Uecko_ERP/apps/web
david 78bb02f9b0 feat: Implement Sequelize mappers and repository for Proforma V2
- Added SequelizeProformaV2RecipientDomainMapper for mapping recipient data to domain model.
- Introduced SequelizeProformaV2TaxesDomainMapper for handling tax data mapping.
- Created SequelizeProformaV2RecipientSummaryMapper for summarizing recipient information.
- Developed SequelizeProformaV2SummaryMapper for mapping Proforma summary data.
- Implemented SequelizeProformaRepositoryV2 for managing Proforma data persistence.
- Added SequelizeProformaV2NumberGenerator for generating Proforma numbers.
2026-07-10 13:59:44 +02:00
..
public . 2025-05-28 16:21:09 +02:00
src Selector de empresas 2026-07-06 17:33:45 +02:00
.env.acana Subida a producción como Acana 2025-11-27 20:07:30 +01:00
.env.development . 2025-05-27 19:47:03 +02:00
.env.production Subida a producción como Acana 2025-11-28 16:00:18 +01:00
.env.rodax Subida a producción como Acana 2025-11-27 20:07:30 +01:00
Dockerfile . 2025-11-04 16:59:37 +01:00
index.html v0.6.5 2026-05-05 13:34:36 +02:00
package.json feat: Implement Sequelize mappers and repository for Proforma V2 2026-07-10 13:59:44 +02:00
README.md Docs 2026-07-06 17:47:05 +02:00
tsconfig.app.json v0.6.0 - Subida a producción 2026-04-21 15:51:57 +02:00
tsconfig.json v0.6.2 2026-04-23 12:34:00 +02:00
tsconfig.node.json . 2025-05-10 10:40:40 +02:00
vite.config.mts Identity -> pantalla de login 2026-07-05 13:43:13 +02:00

apps/web

Aplicación frontend principal del ERP.

Runtime actual de autenticación

La app usa:

@erp/identity/client
IdentityAuthSessionProvider
DataSourceProvider
Axios compartido

No debe usarse @erp/auth/client como runtime nuevo.

Flujo actual

login
-> GET /identity/auth/session
-> GET /companies/available
-> resolver empresa activa
-> auto-selección si hay una sola empresa
-> selector si hay varias
-> /no-companies si no hay empresas
-> X-Company-Id en rutas tenant-scoped

Headers

No enviar X-Company-Id a:

POST /identity/auth/login
POST /identity/auth/refresh
POST /identity/auth/logout
GET /identity/auth/session
GET /companies/available

Sí enviarlo a rutas tenant-scoped cuando exista activeCompanyId.

App company switcher

Componente:

apps/web/src/layout/app-company-switcher.tsx

Propósito:

  • mostrar la empresa activa real en el layout autenticado
  • permitir cambiar entre availableCompanies de la sesión actual

Reglas:

  • usar el contexto de identity
  • no manejar tokens
  • no llamar directamente a GET /companies/available
  • no usar companySlug para auth
  • no modificar el access token

Refresh automático

La app implementa refresh automático global sobre 401 con retry único por request y refreshPromise compartida.

Si el refresh falla:

  • limpiar sesión
  • limpiar empresa activa persistida
  • redirigir a /login