diff --git a/src/app/dashboard/erp/page.tsx b/src/app/dashboard/erp/page.tsx new file mode 100644 index 0000000..3b2ec68 --- /dev/null +++ b/src/app/dashboard/erp/page.tsx @@ -0,0 +1,89 @@ +'use client'; + +import Link from 'next/link'; + +const ERP_ENTITIES = [ + { name: 'Clienți (Customer)', dir: '→', desc: 'ERPNext → CEO OS (sync unilateral)' }, + { name: 'Facturi (Invoice)', dir: '→', desc: 'ERPNext → CEO OS (tranzacții financiare)' }, + { name: 'Proiecte (Project)', dir: '↔', desc: 'Bidirectional cu aprobare manuală' }, + { name: 'Stoc (Item)', dir: '→', desc: 'ERPNext → CEO OS (read-only)' }, + { name: 'Salarii (Salary Slip)', dir: '→', desc: 'ERPNext → CEO OS (privat, confidential)' }, + { name: 'Contracte (PO/SO)', dir: '→', desc: 'ERPNext → CEO OS (ca documente)' }, +]; + +const SETUP_STEPS = [ + { n: 1, label: 'ERPNext server activ', status: 'done', desc: 'ERPNext rulează pe serverul Hetzner (port 8080).' }, + { n: 2, label: 'API Key ERPNext', status: 'todo', desc: 'Generează API Key + Secret în ERPNext → User → API Access.' }, + { n: 3, label: 'Adapter ceo-api', status: 'todo', desc: 'Serviciu ERP sync în ceo-api (GET /v1/erp/status, POST /v1/erp/sync).' }, + { n: 4, label: 'Flux date activ', status: 'planned', desc: 'Sincronizare automată la intervale configurabile.' }, +]; + +export default function ERPPage() { + return ( +
Integrare ERPNext — sincronizare financiară și operațională.
+ERPNext neconectat la CEO OS
++ ERPNext rulează pe server (port 8080) dar API-ul de sincronizare nu este configurat. + CEO OS nu scrie niciodată direct în baza de date ERP — datele curg exclusiv prin adaptorul API. +
+Regulă arhitecturală CRITICĂ
++ CEO OS nu scrie niciodată direct în baza de date ERPNext. + Toate modificările merg prin API-ul ERPNext, care validează și înregistrează tranzacțiile conform regulilor contabile. + Orice scriere directă în BD ar corupe integritatea contabilă. +
+Entități sincronizate (planificat)
+{e.name}
+{e.desc}
+→ = ERPNext → CEO OS (read) | ↔ = bidirectional cu aprobare
+Pași de configurare
+ {SETUP_STEPS.map((step) => ( +{step.label}
+{step.desc}
+