workspace-v1/projects/erp-construccion/docs/02-definicion-modulos/MAI-006-calidad/implementacion/TRACEABILITY.yml
rckrdmrd 66161b1566 feat: Workspace-v1 complete migration with NEXUS v3.4
Sistema NEXUS v3.4 migrado con:

Estructura principal:
- core/orchestration: Sistema SIMCO + CAPVED (27 directivas, 28 perfiles)
- core/catalog: Catalogo de funcionalidades reutilizables
- shared/knowledge-base: Base de conocimiento compartida
- devtools/scripts: Herramientas de desarrollo
- control-plane/registries: Control de servicios y CI/CD
- orchestration/: Configuracion de orquestacion de agentes

Proyectos incluidos (11):
- gamilit (submodule -> GitHub)
- trading-platform (OrbiquanTIA)
- erp-suite con 5 verticales:
  - erp-core, construccion, vidrio-templado
  - mecanicas-diesel, retail, clinicas
- betting-analytics
- inmobiliaria-analytics
- platform_marketing_content
- pos-micro, erp-basico

Configuracion:
- .gitignore completo para Node.js/Python/Docker
- gamilit como submodule (git@github.com:rckrdmrd/gamilit-workspace.git)
- Sistema de puertos estandarizado (3005-3199)

Generated with NEXUS v3.4 Migration System
EPIC-010: Configuracion Git y Repositorios
2026-01-04 03:37:42 -06:00

1913 lines
57 KiB
YAML

# TRACEABILITY - MAI-006: Calidad
metadata:
modulo: MAI-006
nombre: Calidad
version: 1.0.0
fecha: 2025-12-06
reutilizacion_core: 0%
descripcion: Sistema de gestión de calidad para obras de construcción
vertical: Construcción
dependencias:
- MAI-001 # Proyectos
- MAI-003 # Recursos
- MAI-004 # Avance de Obra
requerimientos:
- id: RF-CAL-001
titulo: Inspecciones de Calidad
descripcion: Gestión completa de inspecciones de calidad en obra
prioridad: Alta
estado: Pendiente
criterios_aceptacion:
- Registrar inspecciones programadas y no programadas
- Capturar hallazgos y observaciones con evidencias fotográficas
- Asignar responsables y fechas de corrección
- Generar reportes de inspección
- Notificar a responsables sobre hallazgos
endpoints:
- metodo: POST
ruta: /api/v1/calidad/inspecciones
descripcion: Crear nueva inspección de calidad
autenticacion: JWT
permisos: [quality.inspection.create]
request_body:
proyecto_id: integer
obra_id: integer
tipo_inspeccion: string
area_inspeccion: string
fecha_programada: datetime
inspector_id: integer
checklist_id: integer
observaciones: string
response: InspeccionCalidadDto
- metodo: GET
ruta: /api/v1/calidad/inspecciones
descripcion: Listar inspecciones con filtros
autenticacion: JWT
permisos: [quality.inspection.read]
query_params:
proyecto_id: integer
obra_id: integer
estado: string
fecha_desde: date
fecha_hasta: date
inspector_id: integer
tipo_inspeccion: string
page: integer
limit: integer
response: PaginatedInspeccionCalidadDto
- metodo: GET
ruta: /api/v1/calidad/inspecciones/{id}
descripcion: Obtener detalle de inspección
autenticacion: JWT
permisos: [quality.inspection.read]
path_params:
id: integer
response: InspeccionCalidadDetalleDto
- metodo: PUT
ruta: /api/v1/calidad/inspecciones/{id}
descripcion: Actualizar inspección
autenticacion: JWT
permisos: [quality.inspection.update]
path_params:
id: integer
request_body:
fecha_programada: datetime
inspector_id: integer
estado: string
observaciones: string
response: InspeccionCalidadDto
- metodo: POST
ruta: /api/v1/calidad/inspecciones/{id}/ejecutar
descripcion: Ejecutar inspección y registrar resultados
autenticacion: JWT
permisos: [quality.inspection.execute]
path_params:
id: integer
request_body:
fecha_ejecucion: datetime
items_checklist:
- item_id: integer
conforme: boolean
observaciones: string
evidencias: array[string]
hallazgos:
- descripcion: string
severidad: string
ubicacion: string
responsable_id: integer
fecha_correccion: date
evidencias: array[string]
resultado_general: string
observaciones_finales: string
response: InspeccionCalidadDto
- metodo: POST
ruta: /api/v1/calidad/inspecciones/{id}/hallazgos
descripcion: Registrar hallazgo en inspección
autenticacion: JWT
permisos: [quality.inspection.update]
path_params:
id: integer
request_body:
descripcion: string
severidad: string
categoria: string
ubicacion: string
responsable_id: integer
fecha_correccion: date
evidencias: array[string]
response: HallazgoCalidadDto
- metodo: PUT
ruta: /api/v1/calidad/inspecciones/hallazgos/{id}/corregir
descripcion: Registrar corrección de hallazgo
autenticacion: JWT
permisos: [quality.inspection.update]
path_params:
id: integer
request_body:
fecha_correccion: datetime
accion_correctiva: string
evidencias: array[string]
verificado_por: integer
response: HallazgoCalidadDto
- metodo: GET
ruta: /api/v1/calidad/inspecciones/{id}/reporte
descripcion: Generar reporte de inspección
autenticacion: JWT
permisos: [quality.inspection.read]
path_params:
id: integer
query_params:
formato: string
response: application/pdf
tablas:
- nombre: inspecciones_calidad
descripcion: Registro de inspecciones de calidad
columnas:
- nombre: id
tipo: SERIAL
pk: true
- nombre: proyecto_id
tipo: INTEGER
fk: proyectos.id
notnull: true
- nombre: obra_id
tipo: INTEGER
fk: obras.id
notnull: true
- nombre: codigo
tipo: VARCHAR(50)
unique: true
notnull: true
- nombre: tipo_inspeccion
tipo: VARCHAR(100)
notnull: true
comment: Estructural, acabados, instalaciones, etc.
- nombre: area_inspeccion
tipo: VARCHAR(200)
notnull: true
- nombre: fecha_programada
tipo: TIMESTAMP
notnull: true
- nombre: fecha_ejecucion
tipo: TIMESTAMP
- nombre: inspector_id
tipo: INTEGER
fk: usuarios.id
notnull: true
- nombre: checklist_id
tipo: INTEGER
fk: checklists_calidad.id
- nombre: estado
tipo: VARCHAR(50)
notnull: true
default: "'programada'"
comment: programada, en_progreso, completada, cancelada
- nombre: resultado_general
tipo: VARCHAR(50)
comment: aprobado, rechazado, condicional
- nombre: observaciones
tipo: TEXT
- nombre: observaciones_finales
tipo: TEXT
- nombre: tenant_id
tipo: INTEGER
fk: tenants.id
notnull: true
- nombre: created_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
- nombre: updated_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
- nombre: created_by
tipo: INTEGER
fk: usuarios.id
- nombre: updated_by
tipo: INTEGER
fk: usuarios.id
indices:
- columnas: [proyecto_id, fecha_programada]
- columnas: [obra_id, estado]
- columnas: [inspector_id, fecha_programada]
- columnas: [codigo]
- columnas: [tenant_id]
- nombre: hallazgos_calidad
descripcion: Hallazgos detectados en inspecciones
columnas:
- nombre: id
tipo: SERIAL
pk: true
- nombre: inspeccion_id
tipo: INTEGER
fk: inspecciones_calidad.id
notnull: true
- nombre: codigo
tipo: VARCHAR(50)
unique: true
notnull: true
- nombre: descripcion
tipo: TEXT
notnull: true
- nombre: severidad
tipo: VARCHAR(50)
notnull: true
comment: critica, alta, media, baja
- nombre: categoria
tipo: VARCHAR(100)
comment: estructural, acabados, instalaciones, seguridad
- nombre: ubicacion
tipo: VARCHAR(200)
- nombre: responsable_id
tipo: INTEGER
fk: usuarios.id
notnull: true
- nombre: fecha_deteccion
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
- nombre: fecha_correccion_requerida
tipo: DATE
notnull: true
- nombre: fecha_correccion_real
tipo: TIMESTAMP
- nombre: accion_correctiva
tipo: TEXT
- nombre: verificado_por
tipo: INTEGER
fk: usuarios.id
- nombre: estado
tipo: VARCHAR(50)
notnull: true
default: "'pendiente'"
comment: pendiente, en_correccion, corregido, verificado
- nombre: tenant_id
tipo: INTEGER
fk: tenants.id
notnull: true
- nombre: created_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
- nombre: updated_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
indices:
- columnas: [inspeccion_id]
- columnas: [responsable_id, estado]
- columnas: [severidad, estado]
- columnas: [tenant_id]
- nombre: evidencias_inspeccion
descripcion: Evidencias fotográficas y documentales
columnas:
- nombre: id
tipo: SERIAL
pk: true
- nombre: inspeccion_id
tipo: INTEGER
fk: inspecciones_calidad.id
- nombre: hallazgo_id
tipo: INTEGER
fk: hallazgos_calidad.id
- nombre: tipo
tipo: VARCHAR(50)
notnull: true
comment: foto, video, documento
- nombre: url
tipo: VARCHAR(500)
notnull: true
- nombre: descripcion
tipo: TEXT
- nombre: fecha_captura
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
- nombre: capturado_por
tipo: INTEGER
fk: usuarios.id
- nombre: tenant_id
tipo: INTEGER
fk: tenants.id
notnull: true
- nombre: created_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
indices:
- columnas: [inspeccion_id]
- columnas: [hallazgo_id]
- columnas: [tenant_id]
- nombre: checklists_calidad
descripcion: Plantillas de checklist para inspecciones
columnas:
- nombre: id
tipo: SERIAL
pk: true
- nombre: nombre
tipo: VARCHAR(200)
notnull: true
- nombre: descripcion
tipo: TEXT
- nombre: tipo_inspeccion
tipo: VARCHAR(100)
notnull: true
- nombre: activo
tipo: BOOLEAN
default: true
- nombre: tenant_id
tipo: INTEGER
fk: tenants.id
notnull: true
- nombre: created_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
- nombre: updated_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
indices:
- columnas: [tenant_id, activo]
- nombre: items_checklist
descripcion: Items de verificación en checklists
columnas:
- nombre: id
tipo: SERIAL
pk: true
- nombre: checklist_id
tipo: INTEGER
fk: checklists_calidad.id
notnull: true
- nombre: orden
tipo: INTEGER
notnull: true
- nombre: descripcion
tipo: TEXT
notnull: true
- nombre: criterio_aceptacion
tipo: TEXT
- nombre: requerido
tipo: BOOLEAN
default: true
- nombre: created_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
indices:
- columnas: [checklist_id, orden]
- nombre: resultados_checklist
descripcion: Resultados de items verificados
columnas:
- nombre: id
tipo: SERIAL
pk: true
- nombre: inspeccion_id
tipo: INTEGER
fk: inspecciones_calidad.id
notnull: true
- nombre: item_id
tipo: INTEGER
fk: items_checklist.id
notnull: true
- nombre: conforme
tipo: BOOLEAN
notnull: true
- nombre: observaciones
tipo: TEXT
- nombre: created_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
indices:
- columnas: [inspeccion_id]
- columnas: [item_id]
componentes_ui:
- ruta: /calidad/inspecciones
componente: InspeccionesCalidadPage
descripcion: Lista de inspecciones de calidad
permisos: [quality.inspection.read]
funcionalidades:
- Filtrar por proyecto, obra, estado, fechas
- Crear nueva inspección
- Ejecutar inspección
- Ver detalle y resultados
- Generar reportes
- ruta: /calidad/inspecciones/nueva
componente: NuevaInspeccionForm
descripcion: Formulario para crear inspección
permisos: [quality.inspection.create]
funcionalidades:
- Seleccionar proyecto y obra
- Definir tipo y área de inspección
- Asignar inspector
- Programar fecha
- Seleccionar checklist
- ruta: /calidad/inspecciones/:id
componente: InspeccionCalidadDetailPage
descripcion: Detalle completo de inspección
permisos: [quality.inspection.read]
funcionalidades:
- Ver información general
- Revisar checklist y resultados
- Ver hallazgos registrados
- Gestionar evidencias
- Generar reporte
- ruta: /calidad/inspecciones/:id/ejecutar
componente: EjecutarInspeccionPage
descripcion: Interfaz para ejecutar inspección
permisos: [quality.inspection.execute]
funcionalidades:
- Marcar items de checklist
- Registrar hallazgos in-situ
- Capturar evidencias fotográficas
- Registrar observaciones
- Completar inspección
- ruta: /calidad/hallazgos
componente: HallazgosCalidadPage
descripcion: Gestión de hallazgos y seguimiento
permisos: [quality.inspection.read]
funcionalidades:
- Lista de hallazgos por estado
- Filtrar por severidad y responsable
- Registrar correcciones
- Verificar correcciones
- Dashboard de hallazgos pendientes
- componente: InspeccionCalidadCard
descripcion: Tarjeta resumen de inspección
props:
- inspeccion: InspeccionCalidadDto
- onEdit: function
- onExecute: function
- onViewDetails: function
- componente: ChecklistEjecucionForm
descripcion: Formulario para ejecutar checklist
props:
- checklist: ChecklistCalidadDto
- onItemCheck: function
- onAddEvidence: function
- componente: HallazgoForm
descripcion: Formulario para registrar hallazgo
props:
- inspeccionId: number
- onSubmit: function
- onCancel: function
- componente: EvidenciaUploader
descripcion: Componente para subir evidencias
props:
- tipo: string
- onUpload: function
- maxFiles: number
app_movil:
modulo: MOB-003
nombre: Supervisor
funcionalidades:
- Ejecutar inspecciones offline
- Registrar hallazgos con cámara
- Completar checklists
- Sincronizar resultados
pantallas:
- InspeccionesListScreen
- EjecutarInspeccionScreen
- ChecklistScreen
- RegistrarHallazgoScreen
- CapturaEvidenciaScreen
- id: RF-CAL-002
titulo: Reportes de No Conformidad
descripcion: Gestión de reportes de no conformidad (RNC)
prioridad: Alta
estado: Pendiente
criterios_aceptacion:
- Emitir RNC por incumplimientos detectados
- Asignar responsables y plazos de corrección
- Registrar acciones correctivas y preventivas
- Hacer seguimiento hasta el cierre
- Generar estadísticas de RNC
endpoints:
- metodo: POST
ruta: /api/v1/calidad/no-conformidades
descripcion: Crear reporte de no conformidad
autenticacion: JWT
permisos: [quality.ncr.create]
request_body:
proyecto_id: integer
origen_tipo: string
origen_id: integer
categoria: string
descripcion: string
severidad: string
responsable_id: integer
fecha_limite: date
evidencias: array[string]
response: NoConformidadDto
- metodo: GET
ruta: /api/v1/calidad/no-conformidades
descripcion: Listar reportes de no conformidad
autenticacion: JWT
permisos: [quality.ncr.read]
query_params:
proyecto_id: integer
estado: string
severidad: string
responsable_id: integer
fecha_desde: date
fecha_hasta: date
page: integer
limit: integer
response: PaginatedNoConformidadDto
- metodo: GET
ruta: /api/v1/calidad/no-conformidades/{id}
descripcion: Obtener detalle de RNC
autenticacion: JWT
permisos: [quality.ncr.read]
path_params:
id: integer
response: NoConformidadDetalleDto
- metodo: PUT
ruta: /api/v1/calidad/no-conformidades/{id}
descripcion: Actualizar RNC
autenticacion: JWT
permisos: [quality.ncr.update]
path_params:
id: integer
request_body:
descripcion: string
severidad: string
responsable_id: integer
fecha_limite: date
response: NoConformidadDto
- metodo: POST
ruta: /api/v1/calidad/no-conformidades/{id}/acciones-correctivas
descripcion: Registrar acción correctiva
autenticacion: JWT
permisos: [quality.ncr.update]
path_params:
id: integer
request_body:
tipo: string
descripcion: string
fecha_implementacion: date
responsable_id: integer
evidencias: array[string]
response: AccionCorrectivaDto
- metodo: POST
ruta: /api/v1/calidad/no-conformidades/{id}/cerrar
descripcion: Cerrar RNC
autenticacion: JWT
permisos: [quality.ncr.close]
path_params:
id: integer
request_body:
fecha_cierre: datetime
verificado_por: integer
observaciones_cierre: string
evidencias_cierre: array[string]
response: NoConformidadDto
- metodo: GET
ruta: /api/v1/calidad/no-conformidades/estadisticas
descripcion: Estadísticas de RNC
autenticacion: JWT
permisos: [quality.ncr.read]
query_params:
proyecto_id: integer
fecha_desde: date
fecha_hasta: date
response: EstadisticasRNCDto
- metodo: GET
ruta: /api/v1/calidad/no-conformidades/{id}/reporte
descripcion: Generar reporte de RNC
autenticacion: JWT
permisos: [quality.ncr.read]
path_params:
id: integer
query_params:
formato: string
response: application/pdf
tablas:
- nombre: no_conformidades
descripcion: Reportes de no conformidad
columnas:
- nombre: id
tipo: SERIAL
pk: true
- nombre: proyecto_id
tipo: INTEGER
fk: proyectos.id
notnull: true
- nombre: codigo
tipo: VARCHAR(50)
unique: true
notnull: true
- nombre: origen_tipo
tipo: VARCHAR(50)
notnull: true
comment: inspeccion, auditoria, queja_cliente, observacion_interna
- nombre: origen_id
tipo: INTEGER
comment: ID del registro origen
- nombre: categoria
tipo: VARCHAR(100)
notnull: true
comment: calidad_materiales, proceso_constructivo, seguridad, etc.
- nombre: descripcion
tipo: TEXT
notnull: true
- nombre: severidad
tipo: VARCHAR(50)
notnull: true
comment: critica, mayor, menor
- nombre: responsable_id
tipo: INTEGER
fk: usuarios.id
notnull: true
- nombre: fecha_emision
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
- nombre: fecha_limite
tipo: DATE
notnull: true
- nombre: fecha_cierre
tipo: TIMESTAMP
- nombre: estado
tipo: VARCHAR(50)
notnull: true
default: "'abierta'"
comment: abierta, en_correccion, cerrada, cancelada
- nombre: causa_raiz
tipo: TEXT
- nombre: observaciones_cierre
tipo: TEXT
- nombre: verificado_por
tipo: INTEGER
fk: usuarios.id
- nombre: emitido_por
tipo: INTEGER
fk: usuarios.id
notnull: true
- nombre: tenant_id
tipo: INTEGER
fk: tenants.id
notnull: true
- nombre: created_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
- nombre: updated_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
indices:
- columnas: [proyecto_id, estado]
- columnas: [responsable_id, estado]
- columnas: [codigo]
- columnas: [severidad, estado]
- columnas: [tenant_id]
- nombre: acciones_correctivas
descripcion: Acciones correctivas y preventivas
columnas:
- nombre: id
tipo: SERIAL
pk: true
- nombre: no_conformidad_id
tipo: INTEGER
fk: no_conformidades.id
notnull: true
- nombre: tipo
tipo: VARCHAR(50)
notnull: true
comment: correctiva, preventiva
- nombre: descripcion
tipo: TEXT
notnull: true
- nombre: fecha_planificada
tipo: DATE
notnull: true
- nombre: fecha_implementacion
tipo: DATE
- nombre: responsable_id
tipo: INTEGER
fk: usuarios.id
notnull: true
- nombre: estado
tipo: VARCHAR(50)
notnull: true
default: "'planificada'"
comment: planificada, implementada, verificada
- nombre: resultado_verificacion
tipo: TEXT
- nombre: verificado_por
tipo: INTEGER
fk: usuarios.id
- nombre: tenant_id
tipo: INTEGER
fk: tenants.id
notnull: true
- nombre: created_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
- nombre: updated_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
indices:
- columnas: [no_conformidad_id]
- columnas: [responsable_id, estado]
- columnas: [tenant_id]
- nombre: evidencias_rnc
descripcion: Evidencias de RNC y acciones correctivas
columnas:
- nombre: id
tipo: SERIAL
pk: true
- nombre: no_conformidad_id
tipo: INTEGER
fk: no_conformidades.id
- nombre: accion_correctiva_id
tipo: INTEGER
fk: acciones_correctivas.id
- nombre: tipo
tipo: VARCHAR(50)
notnull: true
comment: foto, documento, video
- nombre: url
tipo: VARCHAR(500)
notnull: true
- nombre: descripcion
tipo: TEXT
- nombre: etapa
tipo: VARCHAR(50)
comment: deteccion, correccion, verificacion, cierre
- nombre: tenant_id
tipo: INTEGER
fk: tenants.id
notnull: true
- nombre: created_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
- nombre: created_by
tipo: INTEGER
fk: usuarios.id
indices:
- columnas: [no_conformidad_id]
- columnas: [accion_correctiva_id]
- columnas: [tenant_id]
componentes_ui:
- ruta: /calidad/no-conformidades
componente: NoConformidadesPage
descripcion: Lista de reportes de no conformidad
permisos: [quality.ncr.read]
funcionalidades:
- Filtrar por proyecto, estado, severidad
- Crear nuevo RNC
- Ver detalle de RNC
- Dashboard de RNC por estado
- Exportar listado
- ruta: /calidad/no-conformidades/nueva
componente: NuevaNoConformidadForm
descripcion: Formulario para crear RNC
permisos: [quality.ncr.create]
funcionalidades:
- Seleccionar proyecto
- Definir origen y categoría
- Describir no conformidad
- Asignar responsable y plazo
- Adjuntar evidencias
- ruta: /calidad/no-conformidades/:id
componente: NoConformidadDetailPage
descripcion: Detalle de RNC
permisos: [quality.ncr.read]
funcionalidades:
- Ver información completa
- Registrar acciones correctivas
- Hacer seguimiento
- Verificar y cerrar RNC
- Generar reporte
- componente: NoConformidadCard
descripcion: Tarjeta resumen de RNC
props:
- noConformidad: NoConformidadDto
- onEdit: function
- onViewDetails: function
- componente: AccionCorrectivaForm
descripcion: Formulario para acción correctiva
props:
- rncId: number
- tipo: string
- onSubmit: function
- componente: RNCEstadisticasWidget
descripcion: Widget de estadísticas de RNC
props:
- proyectoId: number
- periodo: DateRange
- componente: TimelineRNC
descripcion: Línea de tiempo de RNC
props:
- rncId: number
- eventos: array
app_movil:
modulo: MOB-003
nombre: Supervisor
funcionalidades:
- Emitir RNC desde campo
- Registrar acciones correctivas
- Capturar evidencias
- Consultar RNC asignadas
pantallas:
- NoConformidadesListScreen
- NuevaRNCScreen
- RNCDetailScreen
- AccionCorrectivaScreen
- id: RF-CAL-003
titulo: Pruebas de Laboratorio
descripcion: Gestión de pruebas de laboratorio y ensayos de materiales
prioridad: Alta
estado: Pendiente
criterios_aceptacion:
- Registrar solicitudes de pruebas de laboratorio
- Gestionar envío de muestras
- Registrar resultados de laboratorio
- Comparar con especificaciones técnicas
- Generar certificados de pruebas
endpoints:
- metodo: POST
ruta: /api/v1/calidad/pruebas-laboratorio
descripcion: Crear solicitud de prueba
autenticacion: JWT
permisos: [quality.lab.create]
request_body:
proyecto_id: integer
obra_id: integer
tipo_prueba: string
material: string
especificacion_id: integer
cantidad_muestras: integer
fecha_muestreo: datetime
ubicacion_muestreo: string
laboratorio_id: integer
solicitante_id: integer
observaciones: string
response: PruebaLaboratorioDto
- metodo: GET
ruta: /api/v1/calidad/pruebas-laboratorio
descripcion: Listar pruebas de laboratorio
autenticacion: JWT
permisos: [quality.lab.read]
query_params:
proyecto_id: integer
estado: string
tipo_prueba: string
laboratorio_id: integer
fecha_desde: date
fecha_hasta: date
page: integer
limit: integer
response: PaginatedPruebaLaboratorioDto
- metodo: GET
ruta: /api/v1/calidad/pruebas-laboratorio/{id}
descripcion: Obtener detalle de prueba
autenticacion: JWT
permisos: [quality.lab.read]
path_params:
id: integer
response: PruebaLaboratorioDetalleDto
- metodo: PUT
ruta: /api/v1/calidad/pruebas-laboratorio/{id}
descripcion: Actualizar solicitud de prueba
autenticacion: JWT
permisos: [quality.lab.update]
path_params:
id: integer
request_body:
laboratorio_id: integer
fecha_envio: date
observaciones: string
response: PruebaLaboratorioDto
- metodo: POST
ruta: /api/v1/calidad/pruebas-laboratorio/{id}/resultados
descripcion: Registrar resultados de laboratorio
autenticacion: JWT
permisos: [quality.lab.results]
path_params:
id: integer
request_body:
fecha_resultados: datetime
resultados:
- parametro: string
valor_obtenido: decimal
valor_especificado: decimal
unidad: string
cumple: boolean
resultado_general: string
observaciones_laboratorio: string
certificado_url: string
response: PruebaLaboratorioDto
- metodo: POST
ruta: /api/v1/calidad/pruebas-laboratorio/{id}/aprobar
descripcion: Aprobar o rechazar resultados
autenticacion: JWT
permisos: [quality.lab.approve]
path_params:
id: integer
request_body:
aprobado: boolean
aprobado_por: integer
fecha_aprobacion: datetime
observaciones_aprobacion: string
response: PruebaLaboratorioDto
- metodo: GET
ruta: /api/v1/calidad/pruebas-laboratorio/{id}/certificado
descripcion: Descargar certificado de prueba
autenticacion: JWT
permisos: [quality.lab.read]
path_params:
id: integer
response: application/pdf
- metodo: GET
ruta: /api/v1/calidad/laboratorios
descripcion: Listar laboratorios certificados
autenticacion: JWT
permisos: [quality.lab.read]
query_params:
activo: boolean
response: array[LaboratorioDto]
- metodo: POST
ruta: /api/v1/calidad/laboratorios
descripcion: Registrar laboratorio
autenticacion: JWT
permisos: [quality.lab.admin]
request_body:
nombre: string
ruc: string
direccion: string
telefono: string
email: string
certificaciones: array[string]
especialidades: array[string]
activo: boolean
response: LaboratorioDto
tablas:
- nombre: pruebas_laboratorio
descripcion: Solicitudes y resultados de pruebas
columnas:
- nombre: id
tipo: SERIAL
pk: true
- nombre: proyecto_id
tipo: INTEGER
fk: proyectos.id
notnull: true
- nombre: obra_id
tipo: INTEGER
fk: obras.id
- nombre: codigo
tipo: VARCHAR(50)
unique: true
notnull: true
- nombre: tipo_prueba
tipo: VARCHAR(100)
notnull: true
comment: concreto, suelos, asfalto, acero, etc.
- nombre: subtipo_prueba
tipo: VARCHAR(100)
comment: resistencia_compresion, granulometria, etc.
- nombre: material
tipo: VARCHAR(200)
notnull: true
- nombre: especificacion_id
tipo: INTEGER
fk: especificaciones_tecnicas.id
- nombre: cantidad_muestras
tipo: INTEGER
notnull: true
- nombre: fecha_muestreo
tipo: TIMESTAMP
notnull: true
- nombre: ubicacion_muestreo
tipo: VARCHAR(200)
- nombre: responsable_muestreo
tipo: INTEGER
fk: usuarios.id
- nombre: laboratorio_id
tipo: INTEGER
fk: laboratorios.id
- nombre: fecha_envio
tipo: DATE
- nombre: fecha_resultados
tipo: TIMESTAMP
- nombre: resultado_general
tipo: VARCHAR(50)
comment: aprobado, rechazado, condicional
- nombre: observaciones_laboratorio
tipo: TEXT
- nombre: certificado_url
tipo: VARCHAR(500)
- nombre: aprobado
tipo: BOOLEAN
- nombre: aprobado_por
tipo: INTEGER
fk: usuarios.id
- nombre: fecha_aprobacion
tipo: TIMESTAMP
- nombre: observaciones_aprobacion
tipo: TEXT
- nombre: estado
tipo: VARCHAR(50)
notnull: true
default: "'solicitada'"
comment: solicitada, enviada, en_proceso, completada, aprobada, rechazada
- nombre: solicitante_id
tipo: INTEGER
fk: usuarios.id
notnull: true
- nombre: observaciones
tipo: TEXT
- nombre: tenant_id
tipo: INTEGER
fk: tenants.id
notnull: true
- nombre: created_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
- nombre: updated_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
indices:
- columnas: [proyecto_id, estado]
- columnas: [laboratorio_id, estado]
- columnas: [codigo]
- columnas: [tipo_prueba, estado]
- columnas: [tenant_id]
- nombre: resultados_prueba
descripcion: Parámetros y resultados detallados
columnas:
- nombre: id
tipo: SERIAL
pk: true
- nombre: prueba_id
tipo: INTEGER
fk: pruebas_laboratorio.id
notnull: true
- nombre: parametro
tipo: VARCHAR(200)
notnull: true
comment: resistencia, granulometria, humedad, etc.
- nombre: valor_obtenido
tipo: DECIMAL(15,4)
notnull: true
- nombre: valor_especificado
tipo: DECIMAL(15,4)
- nombre: valor_minimo
tipo: DECIMAL(15,4)
- nombre: valor_maximo
tipo: DECIMAL(15,4)
- nombre: unidad
tipo: VARCHAR(50)
notnull: true
- nombre: cumple
tipo: BOOLEAN
notnull: true
- nombre: observaciones
tipo: TEXT
- nombre: created_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
indices:
- columnas: [prueba_id]
- nombre: laboratorios
descripcion: Catálogo de laboratorios certificados
columnas:
- nombre: id
tipo: SERIAL
pk: true
- nombre: nombre
tipo: VARCHAR(200)
notnull: true
- nombre: ruc
tipo: VARCHAR(20)
unique: true
- nombre: direccion
tipo: TEXT
- nombre: telefono
tipo: VARCHAR(50)
- nombre: email
tipo: VARCHAR(200)
- nombre: contacto_nombre
tipo: VARCHAR(200)
- nombre: contacto_telefono
tipo: VARCHAR(50)
- nombre: contacto_email
tipo: VARCHAR(200)
- nombre: certificaciones
tipo: JSONB
comment: Certificaciones y acreditaciones
- nombre: especialidades
tipo: JSONB
comment: Tipos de pruebas que realiza
- nombre: activo
tipo: BOOLEAN
default: true
- nombre: tenant_id
tipo: INTEGER
fk: tenants.id
notnull: true
- nombre: created_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
- nombre: updated_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
indices:
- columnas: [tenant_id, activo]
- columnas: [ruc]
- nombre: especificaciones_tecnicas
descripcion: Especificaciones técnicas de materiales
columnas:
- nombre: id
tipo: SERIAL
pk: true
- nombre: nombre
tipo: VARCHAR(200)
notnull: true
- nombre: codigo
tipo: VARCHAR(50)
unique: true
- nombre: tipo_material
tipo: VARCHAR(100)
notnull: true
- nombre: norma_referencia
tipo: VARCHAR(100)
- nombre: parametros
tipo: JSONB
notnull: true
comment: Parámetros y valores esperados
- nombre: descripcion
tipo: TEXT
- nombre: activo
tipo: BOOLEAN
default: true
- nombre: tenant_id
tipo: INTEGER
fk: tenants.id
notnull: true
- nombre: created_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
- nombre: updated_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
indices:
- columnas: [tenant_id, activo]
- columnas: [codigo]
- nombre: muestras_laboratorio
descripcion: Control de muestras enviadas
columnas:
- nombre: id
tipo: SERIAL
pk: true
- nombre: prueba_id
tipo: INTEGER
fk: pruebas_laboratorio.id
notnull: true
- nombre: codigo_muestra
tipo: VARCHAR(50)
notnull: true
- nombre: descripcion
tipo: TEXT
- nombre: fecha_toma
tipo: TIMESTAMP
notnull: true
- nombre: estado
tipo: VARCHAR(50)
notnull: true
default: "'tomada'"
comment: tomada, enviada, en_analisis, analizada
- nombre: tenant_id
tipo: INTEGER
fk: tenants.id
notnull: true
- nombre: created_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
indices:
- columnas: [prueba_id]
- columnas: [codigo_muestra]
- columnas: [tenant_id]
componentes_ui:
- ruta: /calidad/pruebas-laboratorio
componente: PruebasLaboratorioPage
descripcion: Lista de pruebas de laboratorio
permisos: [quality.lab.read]
funcionalidades:
- Filtrar por proyecto, tipo, estado
- Crear solicitud de prueba
- Registrar resultados
- Aprobar/rechazar resultados
- Descargar certificados
- ruta: /calidad/pruebas-laboratorio/nueva
componente: NuevaPruebaForm
descripcion: Formulario para solicitar prueba
permisos: [quality.lab.create]
funcionalidades:
- Seleccionar proyecto y obra
- Definir tipo de prueba y material
- Registrar datos de muestreo
- Seleccionar laboratorio
- Especificar parámetros a evaluar
- ruta: /calidad/pruebas-laboratorio/:id
componente: PruebaLaboratorioDetailPage
descripcion: Detalle de prueba de laboratorio
permisos: [quality.lab.read]
funcionalidades:
- Ver información de solicitud
- Ver resultados detallados
- Comparar con especificaciones
- Aprobar/rechazar
- Descargar certificado
- ruta: /calidad/pruebas-laboratorio/:id/resultados
componente: RegistrarResultadosForm
descripcion: Formulario para resultados
permisos: [quality.lab.results]
funcionalidades:
- Ingresar valores por parámetro
- Comparar con especificaciones
- Adjuntar certificado
- Determinar cumplimiento
- ruta: /calidad/laboratorios
componente: LaboratoriosPage
descripcion: Gestión de laboratorios
permisos: [quality.lab.admin]
funcionalidades:
- Lista de laboratorios
- Registrar nuevo laboratorio
- Editar información
- Gestionar especialidades
- componente: PruebaLaboratorioCard
descripcion: Tarjeta resumen de prueba
props:
- prueba: PruebaLaboratorioDto
- onViewDetails: function
- componente: ResultadosComparativaTable
descripcion: Tabla comparativa de resultados
props:
- resultados: array
- especificacion: object
- componente: CertificadoViewer
descripcion: Visor de certificados PDF
props:
- certificadoUrl: string
app_movil:
modulo: MOB-003
nombre: Supervisor
funcionalidades:
- Solicitar pruebas de laboratorio
- Registrar toma de muestras
- Consultar resultados
- Ver certificados
pantallas:
- PruebasLaboratorioListScreen
- SolicitudPruebaScreen
- RegistroMuestraScreen
- ResultadosScreen
- id: RF-CAL-004
titulo: Certificaciones
descripcion: Gestión de certificaciones de calidad y conformidad
prioridad: Media
estado: Pendiente
criterios_aceptacion:
- Emitir certificados de calidad de obra
- Gestionar certificados de conformidad de materiales
- Mantener registro de certificaciones
- Generar reportes consolidados
- Integrar con inspecciones y pruebas
endpoints:
- metodo: POST
ruta: /api/v1/calidad/certificaciones
descripcion: Crear certificación
autenticacion: JWT
permisos: [quality.cert.create]
request_body:
proyecto_id: integer
tipo_certificacion: string
alcance: string
elementos_certificados: array
inspecciones_ids: array[integer]
pruebas_ids: array[integer]
fecha_emision: date
vigencia: date
emitido_por: integer
observaciones: string
response: CertificacionDto
- metodo: GET
ruta: /api/v1/calidad/certificaciones
descripcion: Listar certificaciones
autenticacion: JWT
permisos: [quality.cert.read]
query_params:
proyecto_id: integer
tipo: string
estado: string
fecha_desde: date
fecha_hasta: date
page: integer
limit: integer
response: PaginatedCertificacionDto
- metodo: GET
ruta: /api/v1/calidad/certificaciones/{id}
descripcion: Obtener detalle de certificación
autenticacion: JWT
permisos: [quality.cert.read]
path_params:
id: integer
response: CertificacionDetalleDto
- metodo: PUT
ruta: /api/v1/calidad/certificaciones/{id}
descripcion: Actualizar certificación
autenticacion: JWT
permisos: [quality.cert.update]
path_params:
id: integer
request_body:
alcance: string
observaciones: string
vigencia: date
response: CertificacionDto
- metodo: POST
ruta: /api/v1/calidad/certificaciones/{id}/aprobar
descripcion: Aprobar certificación
autenticacion: JWT
permisos: [quality.cert.approve]
path_params:
id: integer
request_body:
aprobado_por: integer
fecha_aprobacion: datetime
observaciones: string
response: CertificacionDto
- metodo: POST
ruta: /api/v1/calidad/certificaciones/{id}/anular
descripcion: Anular certificación
autenticacion: JWT
permisos: [quality.cert.cancel]
path_params:
id: integer
request_body:
motivo_anulacion: string
anulado_por: integer
response: CertificacionDto
- metodo: GET
ruta: /api/v1/calidad/certificaciones/{id}/documento
descripcion: Generar documento de certificación
autenticacion: JWT
permisos: [quality.cert.read]
path_params:
id: integer
query_params:
formato: string
response: application/pdf
- metodo: GET
ruta: /api/v1/calidad/certificaciones/consolidado
descripcion: Reporte consolidado de certificaciones
autenticacion: JWT
permisos: [quality.cert.read]
query_params:
proyecto_id: integer
fecha_desde: date
fecha_hasta: date
formato: string
response: application/pdf
tablas:
- nombre: certificaciones
descripcion: Certificaciones de calidad emitidas
columnas:
- nombre: id
tipo: SERIAL
pk: true
- nombre: proyecto_id
tipo: INTEGER
fk: proyectos.id
notnull: true
- nombre: codigo
tipo: VARCHAR(50)
unique: true
notnull: true
- nombre: tipo_certificacion
tipo: VARCHAR(100)
notnull: true
comment: obra_civil, estructural, acabados, instalaciones, conformidad_material
- nombre: alcance
tipo: TEXT
notnull: true
- nombre: elementos_certificados
tipo: JSONB
comment: Desglose de elementos incluidos
- nombre: fecha_emision
tipo: DATE
notnull: true
- nombre: fecha_vigencia
tipo: DATE
- nombre: emitido_por
tipo: INTEGER
fk: usuarios.id
notnull: true
- nombre: aprobado_por
tipo: INTEGER
fk: usuarios.id
- nombre: fecha_aprobacion
tipo: TIMESTAMP
- nombre: estado
tipo: VARCHAR(50)
notnull: true
default: "'borrador'"
comment: borrador, aprobada, vigente, vencida, anulada
- nombre: observaciones
tipo: TEXT
- nombre: motivo_anulacion
tipo: TEXT
- nombre: anulado_por
tipo: INTEGER
fk: usuarios.id
- nombre: fecha_anulacion
tipo: TIMESTAMP
- nombre: documento_url
tipo: VARCHAR(500)
- nombre: tenant_id
tipo: INTEGER
fk: tenants.id
notnull: true
- nombre: created_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
- nombre: updated_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
indices:
- columnas: [proyecto_id, estado]
- columnas: [codigo]
- columnas: [tipo_certificacion, estado]
- columnas: [tenant_id]
- nombre: certificaciones_inspecciones
descripcion: Relación certificación-inspecciones
columnas:
- nombre: id
tipo: SERIAL
pk: true
- nombre: certificacion_id
tipo: INTEGER
fk: certificaciones.id
notnull: true
- nombre: inspeccion_id
tipo: INTEGER
fk: inspecciones_calidad.id
notnull: true
- nombre: created_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
indices:
- columnas: [certificacion_id]
- columnas: [inspeccion_id]
constraints:
- tipo: unique
columnas: [certificacion_id, inspeccion_id]
- nombre: certificaciones_pruebas
descripcion: Relación certificación-pruebas laboratorio
columnas:
- nombre: id
tipo: SERIAL
pk: true
- nombre: certificacion_id
tipo: INTEGER
fk: certificaciones.id
notnull: true
- nombre: prueba_id
tipo: INTEGER
fk: pruebas_laboratorio.id
notnull: true
- nombre: created_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
indices:
- columnas: [certificacion_id]
- columnas: [prueba_id]
constraints:
- tipo: unique
columnas: [certificacion_id, prueba_id]
- nombre: anexos_certificacion
descripcion: Anexos y documentos adjuntos
columnas:
- nombre: id
tipo: SERIAL
pk: true
- nombre: certificacion_id
tipo: INTEGER
fk: certificaciones.id
notnull: true
- nombre: tipo
tipo: VARCHAR(50)
notnull: true
comment: plano, foto, reporte, certificado_laboratorio
- nombre: titulo
tipo: VARCHAR(200)
notnull: true
- nombre: url
tipo: VARCHAR(500)
notnull: true
- nombre: descripcion
tipo: TEXT
- nombre: orden
tipo: INTEGER
- nombre: tenant_id
tipo: INTEGER
fk: tenants.id
notnull: true
- nombre: created_at
tipo: TIMESTAMP
default: CURRENT_TIMESTAMP
- nombre: created_by
tipo: INTEGER
fk: usuarios.id
indices:
- columnas: [certificacion_id, orden]
- columnas: [tenant_id]
componentes_ui:
- ruta: /calidad/certificaciones
componente: CertificacionesPage
descripcion: Lista de certificaciones
permisos: [quality.cert.read]
funcionalidades:
- Filtrar por proyecto, tipo, estado
- Crear nueva certificación
- Ver detalles
- Aprobar certificaciones
- Descargar documentos
- Reporte consolidado
- ruta: /calidad/certificaciones/nueva
componente: NuevaCertificacionForm
descripcion: Formulario para crear certificación
permisos: [quality.cert.create]
funcionalidades:
- Seleccionar proyecto
- Definir tipo y alcance
- Vincular inspecciones
- Vincular pruebas de laboratorio
- Agregar anexos
- Definir vigencia
- ruta: /calidad/certificaciones/:id
componente: CertificacionDetailPage
descripcion: Detalle de certificación
permisos: [quality.cert.read]
funcionalidades:
- Ver información completa
- Ver inspecciones vinculadas
- Ver pruebas vinculadas
- Ver anexos
- Aprobar/anular
- Generar documento
- componente: CertificacionCard
descripcion: Tarjeta resumen de certificación
props:
- certificacion: CertificacionDto
- onViewDetails: function
- onDownload: function
- componente: CertificacionBuilder
descripcion: Constructor de certificación
props:
- proyectoId: number
- onSelectInspecciones: function
- onSelectPruebas: function
- onAddAnexo: function
- componente: CertificacionPreview
descripcion: Vista previa de certificación
props:
- certificacion: CertificacionDto
- componente: ConsolidadoCertificacionesReport
descripcion: Reporte consolidado
props:
- proyectoId: number
- periodo: DateRange
app_movil:
modulo: MOB-003
nombre: Supervisor
funcionalidades:
- Consultar certificaciones vigentes
- Ver documentos de certificación
- Validar QR de certificados
pantallas:
- CertificacionesListScreen
- CertificacionDetailScreen
- DocumentoViewerScreen
integracion:
modulos_relacionados:
- modulo: MAI-001
relacion: Vinculación con proyectos y obras
endpoints_consumidos:
- GET /api/v1/proyectos/{id}
- GET /api/v1/obras
- modulo: MAI-003
relacion: Asignación de personal para inspecciones
endpoints_consumidos:
- GET /api/v1/personal
- GET /api/v1/personal/{id}
- modulo: MAI-004
relacion: Validación de calidad del avance
endpoints_consumidos:
- GET /api/v1/avance/{id}
- modulo: MGN-001
relacion: Usuarios, roles y permisos
endpoints_consumidos:
- GET /api/v1/users
- GET /api/v1/users/{id}
- modulo: MGN-008
relacion: Notificaciones de hallazgos y RNC
endpoints_provistos:
- POST /api/v1/notifications
app_movil:
- app: MOB-003
nombre: Supervisor
sincronizacion:
- Inspecciones asignadas
- Checklists
- Hallazgos registrados
- Evidencias capturadas
modo_offline: true
funcionalidades:
- Ejecutar inspecciones sin conexión
- Capturar evidencias con cámara
- Registrar hallazgos
- Sincronizar al recuperar conexión
migraciones:
- version: 001
descripcion: Creación inicial de tablas de calidad
orden:
- checklists_calidad
- items_checklist
- inspecciones_calidad
- resultados_checklist
- hallazgos_calidad
- evidencias_inspeccion
- no_conformidades
- acciones_correctivas
- evidencias_rnc
- laboratorios
- especificaciones_tecnicas
- pruebas_laboratorio
- resultados_prueba
- muestras_laboratorio
- certificaciones
- certificaciones_inspecciones
- certificaciones_pruebas
- anexos_certificacion
seeds:
- tabla: checklists_calidad
descripcion: Checklists predefinidos
registros:
- nombre: Inspección Estructural de Concreto
tipo_inspeccion: estructural
items:
- Verificación de encofrado
- Revisión de armadura de refuerzo
- Control de vaciado
- Curado del concreto
- nombre: Inspección de Acabados
tipo_inspeccion: acabados
items:
- Nivelación de pisos
- Verticalidad de muros
- Acabado de pintura
- Instalación de revestimientos
- tabla: especificaciones_tecnicas
descripcion: Especificaciones técnicas comunes
registros:
- codigo: CONC-210
nombre: Concreto f'c=210 kg/cm2
tipo_material: concreto
norma_referencia: ACI 318
parametros:
resistencia_minima: 210
slump: 3-4
edad_ensayo: 28
- tabla: laboratorios
descripcion: Laboratorios certificados ejemplo
registros:
- nombre: Laboratorio de Ensayos de Materiales SAC
especialidades:
- concreto
- suelos
- asfalto
testing:
unitarios:
- InspeccionesCalidadService
- NoConformidadesService
- PruebasLaboratorioService
- CertificacionesService
integracion:
- Flujo completo de inspección
- Emisión y cierre de RNC
- Registro y aprobación de pruebas
- Generación de certificaciones
e2e:
- Ejecutar inspección desde móvil
- Registrar RNC con acciones correctivas
- Solicitar y aprobar prueba de laboratorio
- Emitir certificación de calidad
documentacion:
swagger: /api/docs/calidad
postman_collection: MAI-006-Calidad.postman_collection.json
diagramas:
- Flujo de inspección de calidad
- Ciclo de vida de RNC
- Proceso de pruebas de laboratorio
- Emisión de certificaciones
permisos:
roles:
- quality.manager:
- quality.inspection.*
- quality.ncr.*
- quality.lab.*
- quality.cert.*
- quality.inspector:
- quality.inspection.read
- quality.inspection.execute
- quality.inspection.create
- quality.ncr.read
- quality.ncr.create
- quality.supervisor:
- quality.inspection.read
- quality.ncr.read
- quality.ncr.update
- quality.ncr.close
- quality.lab.read
- quality.cert.read
- quality.lab_tech:
- quality.lab.read
- quality.lab.create
- quality.lab.results
- quality.certifier:
- quality.cert.read
- quality.cert.create
- quality.cert.approve
metricas:
kpis:
- Índice de inspecciones realizadas vs programadas
- Tiempo promedio de cierre de RNC
- Porcentaje de pruebas aprobadas
- Certificaciones emitidas por proyecto
- Hallazgos por severidad
- Tendencia de no conformidades
reportes:
- nombre: Reporte de Inspección
tipo: PDF
parametros: [inspeccion_id]
- nombre: Reporte de No Conformidad
tipo: PDF
parametros: [rnc_id]
- nombre: Certificado de Prueba de Laboratorio
tipo: PDF
parametros: [prueba_id]
- nombre: Certificación de Calidad
tipo: PDF
parametros: [certificacion_id]
- nombre: Consolidado de Calidad del Proyecto
tipo: PDF/Excel
parametros: [proyecto_id, fecha_desde, fecha_hasta]
- nombre: Dashboard de Calidad
tipo: Web
parametros: [proyecto_id]
metricas:
- Inspecciones por estado
- RNC abiertas vs cerradas
- Pruebas por resultado
- Certificaciones vigentes
notas_implementacion:
- Implementar captura offline de inspecciones en app móvil
- Integrar con servicio de almacenamiento para evidencias
- Configurar notificaciones automáticas para hallazgos críticos
- Implementar workflow de aprobación para certificaciones
- Considerar integración con laboratorios externos vía API
- Implementar validación QR para certificados
- Configurar recordatorios de vencimiento de certificaciones