# basic-erp ERP base para SAP Business One (Service Layer). Monorepo npm workspaces: - `apps/api` — NestJS: proxy hacia el Service Layer, login, sesión SAP compartida, permisos de menú (SQLite). - `apps/web` — Angular: componentes reutilizables estilo SAP Business One. - `libs/sap-types` — tipos TypeScript compartidos entre api y web. - `tools/` — mockups y colecciones de pruebas. ## Reglas del proyecto base - Solo campos **estándar** de SAP Business One. Ningún campo de usuario (`U_*`) salvo `U_WEB_USER` / `U_WEB_PASS` de `EmployeesInfo`, usados para el login web. - Los formularios se construyen con componentes reutilizables y configuración declarativa; no se duplica markup por documento. - Los colores y el aspecto salen de variables CSS (temas). Tema por defecto: claro, con la paleta de `tools/oferta_venta.html` (mockup de ejemplo: tiene algunos campos no estándar, pero se conserva la idea: filas de etiqueta + controles, máx. 2 columnas). ## Criterios de la interfaz Es un ERP, no una página de publicidad: **ligera y rápida**. Sin librerías de componentes (Material/PrimeNG), sin webfonts ni animaciones, componentes propios y densos, zoneless + `OnPush`, rutas con carga diferida, presupuesto de bundle en `angular.json`, listas largas paginadas en el servidor. ## Comandos - `npm install` (npm 11) instala todo y compila `libs/sap-types` (postinstall). - `npm run dev:api` · `npm run dev:web` · `npm run build` · `npm test`. ## Flujo de trabajo por cliente (branches) 1. `main` es la versión base/genérica, sin personalizaciones de cliente. 2. Cada cliente tiene su branch (`cliente/`); ahí viven sus personalizaciones y fixes. 3. Los cambios de una branch de cliente no se mezclan con `main` ni con otro cliente, salvo backport genérico decidido explícitamente. 4. Antes de crear branches, mergear a `main`, o hacer merge/backport entre clientes, confirmar con el usuario. No hacer `git push` sin confirmación. ## Flujo de las pantallas de documento Cada menú abre primero una **lista de los últimos documentos** (con barra de filtros y búsqueda por columna, 50 por página); desde ahí se crea uno nuevo (`/…/nuevo`, formulario vacío) o se abre uno existente (`/…/:docEntry`, ver/editar). Las pantallas se definen en `apps/web/src/app/features/documents/document-screens.ts`.