68caf401a730c19dc318f229898cbedf6b306c3e
El mockup muestra que una fila es etiqueta + uno o varios controles en la misma línea (Cliente = input + "...", Canal / Zona = dos mitades, Serie + Número = 72 px + resto, select + número + botón) y que la cabecera tiene a lo sumo 2 columnas. Los campos de un solo control no lo permitían. - Controles sin etiqueta combinables dentro de sbo-field: sbo-input, sbo-textarea, sbo-number, sbo-date, sbo-select y el botón .sbo-btn; ocupan el espacio sobrante o un width fijo. - El primer control de la fila toma el id de la etiqueta (claimId); los demás se nombran con ariaLabel. El error de la fila marca todos sus controles (aria-invalid / aria-describedby). - Los campos con etiqueta (sbo-text-field, sbo-number-field, ..., sbo-lookup-field) pasan a ser atajos de un solo control con la misma API. - CSS global: .sbo-group y .sbo-btn reemplazan a .sbo-pick/.sbo-pair. - CLAUDE.md apunta al mockup renombrado (tools/oferta_venta.html). - Verificado en Chrome contra SAP real, con una cabecera que reproduce las filas compuestas del mockup. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
basic-erp
ERP base para SAP Business One sobre NestJS + Angular (TypeScript en ambos lados).
apps/api NestJS (proxy Service Layer, auth, permisos)
apps/web Angular (componentes reutilizables)
libs/sap-types Tipos compartidos
tools/ Mockups y pruebas
Requisitos: Node 22+ y npm 11+ (npm 10 falla al resolver las dependencias de Nest 12: npx npm@11 install).
npm install # instala todos los workspaces y compila libs/sap-types
npm run dev:api # http://localhost:3000/api/health
npm run dev:web # http://localhost:4200
npm test # libs + api + web
Configuración del backend: apps/api/.env (ver apps/api/.env.example).
Languages
TypeScript
89.5%
HTML
8.7%
CSS
1.8%