1913 lines
57 KiB
YAML
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
|