Documento retroactivo. El Sprint-0 cerró el 2026-03-28 sin un QA formal, dado que el equipo QA (Mauricio) se integró a la fábrica en mayo 2026. Este handoff consolida la realidad entregada para que QA pueda validar Sprint-0 como parte del primer lote consolidado a
qaen el ciclo actual (junto con sprints 1/2/3).Acta formal ADR-003 GATE-D (retroaplicada). Producido por Carlos Torres (Arquitecto) con apoyo de Vanessa Luna (Sr Backend / Gatekeeper Sprint-0).
Destinatario: Mauricio (QA Lead) — ejecutor de Fase 5 (Validación) sobre la base Sprint-0.
Documento maestro:
wiki-arquitectura/zona-interna/04-sdlc/FLUJO_HT_A_PROD.md §2 Fase 4.Plantilla canónica base:
architecture/nebula-erp/QA_HANDOFF_TEMPLATE.mdv1.0.0.
| Campo | Valor |
|---|---|
| Sprint | Sprint-0 — Fundación Core Financiero (fechas: 2026-03-25 a 2026-03-28) |
| Duración | 5 días hábiles (Mar 25 10:00 – Vie 28 17:00) |
| Repos | nebula-accounting-core (6 HTs) + nebula-masters (1 HT) + nebula-models (DTOs) |
| Branch promovida | qa (consolidada con sprints 1-3) |
Commit SHA en qa |
<rellenar al cortar lote consolidado 0-3 — Mauricio + Gatekeeper actual> |
| Tag candidato | v0.0.0-rc1 (sprint-0 individual) — o consolidado con sprints 1-3 |
| Imagen Docker | 10.110.0.2:5000/nebula/business-domains/finance/nebula-accounting-core:v0.0.0-rc1 |
| Ambiente | nodo-02 QA |
| URL Swagger | https://nodo-02.nebula.centricasoluciones.com/swagger-ui/index.html |
| URL Postman base | https://nodo-02.nebula.centricasoluciones.com/api/v1 |
| Fecha de entrega QA (planificada) | 2026-05-19 (junto a lote consolidado 0-3) |
| Fecha límite pruebas | A acordar con Mauricio según política regresión QA (referencia ADR-003 §3.4 — SLA 5 días hábiles por lote ≤3 HTs; este lote es 7 HTs → SLA extendido 10 días hábiles) |
| HT | Título | Estado | Folder | Implementador (R) | Gatekeeper (A) |
|---|---|---|---|---|---|
| HT_CON_001 | Parámetros del Sistema | Released v0.0.0 | sprint-0/htu/HT_CON_001_ParametrosSistema/ |
Vanessa Luna (Sr) | Carlos Torres (Arq) |
| HT_CON_003 | Tipo Plan Contable | Released v0.0.0 | sprint-0/htu/HT_CON_003_TipoPlanContable/ |
Vanessa Luna (Sr) | Carlos Torres (Arq) |
| HT_CON_006 | Alineación TipoCentroCostos | Released v0.0.0 | sprint-0/htu/HT_CON_006_TipoCentroCostos/ |
Vanessa Luna (Sr) | Carlos Torres (Arq) |
| HT_CON_007 | Alineación CentroCostos | Released v0.0.0 | sprint-0/htu/HT_CON_007_CentroCostos/ |
Sebastian Saldarriaga (Mid) | Vanessa Luna (Sr/Gatekeeper) |
| HT_CON_010 | Departamentos y Ciudades | Released v0.0.0 | sprint-0/htu/HT_CON_010_DepartamentosCiudades/ |
Sebastian Saldarriaga (Mid) | Vanessa Luna (Sr/Gatekeeper) |
| HT_CON_011 | Conceptos DIAN Formato 220 | Released v0.0.0 | sprint-0/htu/HT_CON_011_ConceptosDian/ |
Sebastian Saldarriaga (Mid) | Vanessa Luna (Sr/Gatekeeper) |
| HT_CON_015 | Maestro de Dependencias | Released v0.0.0 | sprint-0/htu/HT_CON_015_Dependencias/ |
Vanessa Luna (Sr) | Carlos Torres (Arq) |
Total: 7 HTs, 47 endpoints REST.
Maestros base del Core Financiero — patrones de implementación (no datos transaccionales todavía).
manejaDiferidos, aprobacionCausacion, multiplanContable, afectaPresupuestoPublico).principal único activo por tenant, soft-delete con validación referencial.TipoCentroCostos + Dependencia (LightLoader enriquecimiento).%03d), enum TipoConceptoDian (4 valores), edición inline en tabla.04_References.md (no implementado, validar vía endpoint en vez de cache hit).Nota: Sprint-0 es la base. NO hay endpoints previos. Todos los endpoints listados son NUEVOS, sin breaking changes.
| Método | Ruta | Autorización |
|---|---|---|
| GET | /api/v1/parametros-sistema/get |
CONSULTA |
| PUT | /api/v1/parametros-sistema/update |
EDICION |
| Método | Ruta | Autorización |
|---|---|---|
| GET | /api/v1/tipos-plan-contable/read |
CONSULTA |
| POST | /api/v1/tipos-plan-contable/page |
CONSULTA |
| GET | /api/v1/tipos-plan-contable/get?id=X |
CONSULTA |
| POST | /api/v1/tipos-plan-contable/create |
NUEVO |
| PUT | /api/v1/tipos-plan-contable/update?id=X |
EDICION |
| DELETE | /api/v1/tipos-plan-contable/delete?id=X |
ELIMINACION |
Mismo patrón que CON_003, base path /api/v1/tipos-centro-costos.
Mismo patrón, base path /api/v1/centros-costos. Diferencia: LightLoader enriquece nombreTipoCentroCostos, nombreDependencia, nombrePadre.
nebula-masters)| Método | Ruta | Notas |
|---|---|---|
| GET | /api/v1/departamentos/read |
listar |
| POST | /api/v1/departamentos/page |
paginado |
| GET | /api/v1/departamentos/activos |
combo |
| GET | /api/v1/departamentos/get?id=X |
con ciudades anidadas |
| POST | /api/v1/departamentos/create |
crear |
| PUT | /api/v1/departamentos/update?id=X |
actualizar |
| DELETE | /api/v1/departamentos/delete?id=X |
soft-delete |
| POST | /api/v1/departamentos/importar |
multipart/form-data + politicaDuplicados (IGNORAR | ACTUALIZAR) |
| POST | /api/v1/ciudades/create |
crear ciudad |
| PUT | /api/v1/ciudades/update?id=X |
actualizar ciudad |
| DELETE | /api/v1/ciudades/delete?id=X |
soft-delete ciudad |
CRUD estándar + GET /api/v1/conceptos-dian/activos para combo Formato 220. Código autogenerado (%03d) — inmutable post-creación.
CRUD estándar + 3 endpoints custom:
POST /api/v1/dependencias/masivo — multipart/form-data carga masiva XLSX/CSV (3 columnas: Código, Nombre, Estado A/I).GET /api/v1/dependencias/exportar?formato=xlsx|pdf|csv — file download con Content-Disposition.GET /api/v1/dependencias/lookup — lookup activas para combos.Total endpoints nuevos Sprint-0: 47. OpenAPI completo: sprint-0/htu/HT_CON_*/08_Contracts.md.
| Migración | HT | Tablas creadas |
|---|---|---|
V1.1.0__parametros_sistema.sql |
CON_001 | parametros_sistema (UK por tenant — único registro) |
V1.1.1__tipos_plan_contable.sql |
CON_003 | tipos_plan_contable (UK nombre por tenant) |
V1.1.2__tipos_centro_costos.sql |
CON_006 | tipos_centro_costos (UK código por tenant) |
V1.1.3__centros_costos.sql |
CON_007 | centros_costos (UK código por tenant, FK lógica padre/tipo/dependencia) |
V2.1.0__departamentos_ciudades.sql (schema masters) |
CON_010 | departamentos, ciudades (UK código depto + UK código ciudad por depto) |
V1.1.4__conceptos_dian.sql |
CON_011 | conceptos_dian (UK nombre + año gravable por tenant) |
V1.1.5__dependencias.sql |
CON_015 | dependencias (UK código por tenant) |
Patrón estándar todas las tablas: heredan 10 columnas de BusinessBaseEntity (id, status, created_by, updated_by, created_at, updated_at, version, client_id, company_id, subsidiary_id) — multi-tenancy obligatoria con @Filter Hibernate.
| Catálogo | Valores |
|---|---|
EstadoCentroCostosEnum (CON_007) |
ACTIVO, INACTIVO |
TipoConceptoDian (CON_011) |
INGRESO, APORTE, RETENCION, DATO_TRABAJADOR |
| Booleanos parámetros sistema (CON_001) | manejaDiferidos, aprobacionCausacion, multiplanContable, afectaPresupuestoPublico (S/N) |
| Fixture | Contenido sugerido |
|---|---|
staging_seed_sprint0.sql |
1 tenant tenant_qa_01 + parámetros sistema base + 3 dependencias (Gerencia, Contabilidad, Tesorería) + 1 depto Antioquia con 3 ciudades (Medellín, Envigado, Itagüí) + 3 conceptos DIAN (1 por tipo) |
edge_cases_sprint0.sql |
Dependencia con código en límite máx (5 char), tercero con nombre máximo (50/100), centro costo padre-hijo, concepto DIAN inmutable |
| Recurso | Valor |
|---|---|
| Tenant pruebas | tenant_qa_01 (configurado en nodo-02) |
| Usuario QA Mauricio | mauricio.qa@centrica (KeePass compartido) |
| Tenant aislamiento | tenant_qa_02 (para validar multi-tenancy) |
Selección curada desde 07_TestCases.md de cada HT. No exhaustivo — los detalles de cada HT están en su folder.
fechaSistema con valor igual a la actual → HTTP 200, version incrementa.fechaSistema con fecha futura → HTTP 400 PARAM_FECHA_FUTURA.PARAM_VERSION_CONFLICTO.manejaDiferidos=false deshabilita endpoints futuros que dependen de diferidos (regresión a validar en sprints siguientes).principal=true → HTTP 200.principal=true → HTTP 409 TIPO_PLAN_PRINCIPAL_EXISTENTE.TIPO_PLAN_CON_CUENTAS (cobertura plena después de CON_004 Sprint-2).multiplanContable=N en parámetros → no se permiten múltiples principales.código → HTTP 400 TIPO_CC_CODIGO_INMUTABLE.TIPO_CC_CON_REFERENCIAS.esPadre=true con código 10 caracteres → HTTP 200.esPadre=false referenciando padre → HTTP 200, nombrePadre enriquecido por LightLoader.CC_CODIGO_INMUTABLE.nombreTipoCentroCostos, nombreDependencia, nombrePadre en /get?id=X.estado=ACTIVO + idTipoCentroCostos → resultados correctos por tenant.cantidadCiudades computado + array ciudades[] anidado.POST /departamentos/importar con CSV válido + politicaDuplicados=IGNORAR → respuesta resumen con count creados + ignorados.POST /departamentos/importar con politicaDuplicados=ACTUALIZAR → registros existentes actualizados.indicativo='123' (3 dígitos numéricos) → HTTP 200.indicativo='12A' → HTTP 400 CIUDAD_INDICATIVO_INVALIDO.DEPTO_CON_CIUDADES.001, 002, ...) por tenant + año gravable.codigoConcepto → HTTP 400 CONCEPTO_DIAN_CODIGO_INMUTABLE.GET /conceptos-dian/activos → solo status=ACTIVE ordenados por código.CONCEPTO_DIAN_CON_FORMATO220 (validar después de CON_009 Sprint-2).POST /dependencias/masivo con XLSX 3 columnas (Código, Nombre, Estado A/I) → respuesta resumen.GET /dependencias/exportar?formato=xlsx → file download con Content-Disposition: attachment; filename="dependencias_YYYYMMDD.xlsx".GET /dependencias/exportar?formato=pdf → file download PDF válido.DEP_ASOCIADA_CC_USUARIO.GET /dependencias/lookup → solo activas, payload ligero (id + código + nombre).tenant_qa_01 y verificar que tenant_qa_02 no los ve en /page ni /get?id=X.AuditLog vía Kafka (verificar consumer audit-events recibe los mensajes).CentroCostosDto.nombreTipoCentroCostos y nombreDependencia se enriquecen correctamente sin generar N+1 queries (validar log SQL).| Riesgo | Probabilidad | Impacto | Mitigación QA |
|---|---|---|---|
LightLoader N+1 queries en /page con muchos registros |
Media | Medio | Test PERF-LIGHT-01: paginar 200 CC y validar ≤ 5 queries SQL (verificar log Hibernate) |
| Importación CSV/Excel con encoding distinto (UTF-8 vs Latin-1) | Alta | Medio | Tests con archivos UTF-8, UTF-8 BOM y Latin-1 |
| Indicativo ciudad regex bypass | Baja | Bajo | Test CIU-02 cubre — validar también con espacios, decimales |
File download header Content-Disposition con nombres con tilde |
Baja | Bajo | Smoke test exporta dependencias con nombre "Tesorería" — validar encoding |
| Multi-tenancy bypass por header faltante | Baja | Alto | Test CROSS-MT-02: request sin header tenant → HTTP 401/403 |
Cache ParametrosSistemaProvider no implementado (recomendado en 04_References.md) |
Baja | Bajo | Documentar como deuda técnica menor; cada llamada hace SELECT (acceptable inicialmente) |
| i18n EN no probado en profundidad | Baja | Bajo | Smoke test con Accept-Language: en en 5 endpoints clave |
| Datos legacy: ningún dato preexistente — sprint base | Baja | Bajo | Validar smoke test desde BD vacía + Flyway clean (deployment limpio) |
Nota: Sprint-0 no entregó Postman collection oficial (predecede el patrón Postman + ADR-003). El lote consolidado 0-3 a QA requerirá construir Postman colaborativamente.
Acción recomendada para el ciclo QA consolidado (mayo-junio 2026):
sprint-0/postman/ (a generar en ciclo QA actual)
├── HT_CON_001_ParametrosSistema.postman_collection.json (2 requests)
├── HT_CON_003_TipoPlanContable.postman_collection.json (6 requests)
├── HT_CON_006_TipoCentroCostos.postman_collection.json (6 requests)
├── HT_CON_007_CentroCostos.postman_collection.json (6 requests)
├── HT_CON_010_DepartamentosCiudades.postman_collection.json (11 requests)
├── HT_CON_011_ConceptosDian.postman_collection.json (7 requests)
├── HT_CON_015_Dependencias.postman_collection.json (9 requests)
└── environments/
├── dev_local.postman_environment.json
└── nodo02_qa.postman_environment.json
Responsable propuesto: Brahian Cortes (Jr) — generar collections desde Swagger OpenAPI en día 1 del ciclo QA.
[HT-CON-XXX] <descripción corta>.nebula-accounting-core (o nebula-masters para CON_010).bug, qa, sprint-0, severity-*.POLITICA_REGRESION_QA.md):
critical (bloqueante) — fix SLA 48h.high — fix SLA 72h.medium — fix SLA 5 días o retiro de HT.low — deuda aceptada.docker logs nebula-accounting-core --tail 200 + screenshot Swagger.qa: Jenkins redeploya nodo-02 automáticamente. Re-validar el caso.El fix vendrá en rama
bugfix/HT-CON-XXX-fix-qa(verCICD_HOJA_RUTA_QA_PROD.md §5.1).
Bug fiscal/contable (NIT mal validado, regex DIAN incorrecto): se escala a Carlos (Arquitecto) además de abrir issue.
Para que el Arquitecto promueva qa → main con el lote Sprint-0, este checklist debe estar 100% verde y firmado por Mauricio (QA Lead).
tenant_qa_01 + tenant_qa_02.critical.high (ADR-003 §3.5).QA_CLOSURE.md).tenant_qa_01 no se cruzan con tenant_qa_02).nebula-accounting-core + nebula-masters sin errores no esperados durante sesión pruebas.Accept-Language: en) sobre 5 endpoints clave OK.Firma QA Lead (Mauricio): _________________ Fecha: ____________
Firma Arquitecto (Carlos) — cofirma GATE-F: _________________ Fecha: ____________
Una vez firmado §10 (Sprint-0 puede aprobarse como sub-lote dentro del lote consolidado 0-3):
input del stage Deploy QA en Jenkins UI.QA_EXECUTION_REPORT_SPRINT_0.md y firma QA_CLOSURE_SPRINT_0.md (GATE-F).QA_CLOSURE_SPRINT_0.md (GATE-F) y autoriza tag v0.0.0.GITFLOW_DETALLADO.md (promoción qa → main + tag v0.0.0).Released v0.0.0 en sus README.| Métrica | Target | Capturada |
|---|---|---|
| Casos críticos verdes | 100% | _________ |
| Casos mayores verdes | ≥ 95% | _________ |
| Casos menores verdes | ≥ 80% | _________ |
| First-time-right HT_001 | ≥ 90% (CRUD simple) | _________ |
| First-time-right HT_003 | ≥ 90% | _________ |
| First-time-right HT_007 | ≥ 85% (LightLoader + jerarquía) | _________ |
| First-time-right HT_010 | ≥ 80% (importación masiva) | _________ |
| First-time-right HT_015 | ≥ 80% (file upload/download) | _________ |
| MTTF defectos critical | - | _________ |
| Ciclos retrabajo | ≤ 3 por HT | _________ |
| Días para cierre del lote | ≤ 10 hábiles (lote 7 HTs) | _________ |
Para contexto de Mauricio (no son defectos QA, son recomendaciones técnicas pendientes):
| Deuda | Origen | Plan |
|---|---|---|
| Alineación longitudes campos CON_006/CON_007 (Entity vs DDL) | HT_CON_006/007 README §2.2 | Cerrada en Sprint-1 (correcciones aplicadas durante 5.60h margen) |
Cache @Cacheable Parámetros Sistema (TTL 5min) |
CON_001 04_References.md | Documentada como mejora; no bloqueante |
07_TestCases.md faltante en CON_015 |
CON_015 | Cubierto retroactivamente en este QA_HANDOFF (sección 6.7) |
Rename Flyway v1__create_table_conceptos_dian_220.sql → V1__ (mayúscula) |
CON_011 | Resuelto en Sprint-2 (ver sprint-2/REPROCESO_PENDIENTE.md) |
| Versión | Fecha | Autor | Descripción |
|---|---|---|---|
| 0.1 — DRAFT retroactivo | 2026-05-18 | Carlos Torres | Versión inicial retroaplicada al cierre Sprint-0 (2026-03-28). QA Lead Mauricio se integra mayo 2026. |
| 1.0 — Firmado | por firmar | Mauricio (QA Lead) + Carlos | Versión firmada al cierre del ciclo QA consolidado |
QA_HANDOFF.md — Sprint-0 — Centrica Nebula ERP — ADR-003 retroaplicado