ADM-008: Puntos de Venta (CRUD fundacional) #19
Reference in New Issue
Block a user
Delete Branch "feature/ADM-008"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Resumen
Implementa ADM-008 del roadmap (Fase 1 — Maestros fundacionales del CRITICAL PATH).
Scope recortado post-smoke: solo CRUD de
PuntoDeVentacon Temporal Tables + auditoría + cascada de inactividad Medio→PdV + feature frontend completa.Durante el smoke el usuario aclaró un punto arquitectónico crítico: SIG-CM2.0 no genera números de factura AFIP — los asigna IMAC (subsistema de Plataforma Infogestión) externamente. Un worker futuro (INT-001) poleará una vista de Infogestión para asociar
NumeroOrdenInterno ↔ NumeroFacturaAFIP + CAI. En consecuencia, se eliminó toda la infraestructura de "reserva de número" que inicialmente había implementado (tablaSecuenciaComprobante, SPusp_ReservarNumeroComprobante, enumTipoComprobante, handlers Reservar/Próximo, endpoints, panel UI, tests de concurrencia).Resuelve OQ-ADM-008 (cardinalidad PdV×Medio → 1:N) y OQ-ADM-008-C (numeración AFIP fuera de scope, diferida a INT-001).
Archivos clave
Backend
database/migrations/V013__create_puntos_de_venta.sql— DDLPuntoDeVenta+ Temporal Tables (retention 10 años, PAGE compression) + permiso + drops idempotentes de artefactos previos (SecuenciaComprobante + SP)src/api/SIGCM2.Domain/Entities/PuntoDeVenta.cs— sealed record + factoryForCreation+With*+ invariantessrc/api/SIGCM2.Domain/Exceptions/{PuntoDeVentaNotFoundException, NumeroAFIPDuplicadoException}.cssrc/api/SIGCM2.Application/PuntosDeVenta/— 6 handlers CRUD (Create/Update/Deactivate/Reactivate/GetById/List) conIAuditLogger+TransactionScope(fail-closed)src/api/SIGCM2.Infrastructure/Persistence/PuntoDeVentaRepository.cs— Dapper + mapping SqlException 2627 →NumeroAFIPDuplicadoExceptionsrc/api/SIGCM2.Api/Controllers/PuntosDeVentaController.cs— 6 endpoints CRUDsrc/api/SIGCM2.Api/Filters/ExceptionFilter.cs— mapping 404 / 409Frontend
src/web/src/features/puntos-de-venta/— types, api, hooks, table, form, detail, banners, 4 pages/admin/puntos-de-venta/*+ sidebar admin (guardadministracion:puntos_de_venta:gestionar)Tests
dotnet test tests/SIGCM2.Api.Tests→ 190/190 verdevitest run→ 20/20 verdeDocs (Obsidian, fuera del repo por convención)
2.5 Auditoría.md—PuntoDeVentaagregado al catálogo2.10 UDTs Módulo Administración.md— scope ADM-008 recortado + OQ-ADM-008-C resueltaSTATUS.md—[x]ADM-008 con resumen ajustadoDecisiones relevantes
Seccion.MedioId NOT NULL.architecture/imac-polling-view.administracion:puntos_de_venta:gestionar— CHECK constraintCK_Permiso_Codigo_Formatsolo acepta[a-z0-9_:].medio_inactivosi el Medio padre está inactivo.PuntoDeVenta.NumeroAFIPse mantiene como configuración fija (va en el payload a IMAC).SIGCM2YSIGCM2_Testantes de declarar "ready for smoke".Followups generados
SIGCM2.Worker.ImacFacturaSynccon Quartz.NET que polea la vista de Plataforma Infogestión (SQL exacto en memoria engramarchitecture/imac-polling-view) para asociar número de orden interno ↔ número de factura AFIP + CAI.NumeroOrdenInterno+NumeroAFIPdel PdV.Test plan
dotnet build→ 0 errores, 0 warningsdotnet test tests/SIGCM2.Api.Tests→ 190/190dotnet test tests/SIGCM2.Application.Tests --filter "FullyQualifiedName~PuntoDeVenta"→ 55/55cd src/web && vitest run src/tests/features/puntos-de-venta→ 20/20SIGCM2dev +SIGCM2_Test/admin/puntos-de-venta→ crear PdV para ELDIA (NumeroAFIP=1, nombre "Central") → editar → deactivate → reactivate → confirmar auditoría enAuditEventCommits relevantes
bef8977— migration V013 inicial (con reserva, después recortado)43877bd,50f6f2b,489359f— Domain + Application + Infra39160bb,4877954— Api + integration testsd61292a,4b96cde,0560452,4720f67— Frontend feature completa65787db— verify-loop fixes (UQ constraint name, DI registro, extended backoff)4368c42— docs inicial40482ca,7d432a9,6be637b,6458ee0— cirugía post-smoke (eliminar reserva de número)fc77576— limpieza final (import huérfano + comentario stale)T5.3: 18 tests cubriendo 401/403, create, get, list, update, deactivate, reactivate, reservar, proximo. T5.4: 50 tasks paralelas → 50 numeros distintos sin duplicados. T5.5: 100 reservas en serie → {1..100} en orden.ADM-008: Puntos de Venta (FacturasNumeros) — CRUD + SP reserva atómicato ADM-008: Puntos de Venta (CRUD fundacional)