cp7_inspecciones · GS1-128 (10)OP-6989(240)T001-22621 resuelto · resultado_calidad guardado en acabados.resultado_aql
Adjuntar reportes de inspección por color (hasta 8 PDFs) al cerrar CP7. Solo se guarda metadata en upload_audits con upload_type="cp7_aql" y lote_id.
Backend: nuevo endpoint POST /api/v1/checkpoints/cp7/aql-archivos.
Dashboard: sección multi-upload PDF en inspeccion-calidad.astro.
qty_primeras + qty_manchas + qty_zurcido + qty_composturas (las reparadas cuentan como primera calidad). Las segundas se depuran antes — no se suman. Auto-derivado desde cp7_inspecciones sin input manual del operario.
| Archivo | Cambio | Parte |
|---|---|---|
apps/backend/src/api/routers/ (nuevo endpoint) | POST /cp7/aql-archivos → upload_audits | A1 |
pages/data-upload/inspeccion-calidad.astro | Sección multi-upload PDF (8 slots por color) | A1 |
trento."ProdDatosBultoPedidoDetalle" — Packing List FINAL agrupado por NomColor. Total 1,941 uds OP-6989 (incluye sobreproducción vs 1,884 del pedido original).colores_cp8: CP7 + packing list por color)Implementado — commit ec6a9cf. El verificar CP8 retorna colores_cp8 con 3 columnas:
1. Primeras efectivas — de cp7_inspecciones (qty_primeras + manchas + zurcido + composturas)
2. Qty Packing List FINAL — de trento."ProdDatosBultoPedidoDetalle" agrupado por NomColor — fuente real del despacho
3. Diferencia — packing − primeras_ef (positivo = sobreproducción acordada)
Query nueva: Q_CP8_PACKING_POR_COLOR en trento_queries_cp6_9.py. Fallback gracioso si Trento no disponible.
La tabla colores_cp8 que retorna B1 se muestra en la pantalla Verificar de CP8 del handheld de Víctor — Verificar implementado en VerificarFragment.java cuando cp_num == 8.
Columnas: COLOR | PRIMERAS EFECTIVAS | PACKING LIST | DIFERENCIA
Bloqueado por B1 — implementar en mobile cuando el backend esté en develop.
// Response CP8 verificar enriquecido (nuevo) { "session_id": "uuid...", "cantidad_prendas": 1845, // CP7 inspection summary (reusar helper existente) // Tabla combinada por color — fuentes reales OP-6989 "colores_cp8": [ { "color": "BLACK", "primeras_efectivas": 299, // cp7_inspecciones (208+74+15+2) "qty_pedido": 321, // ProdDatosBultoPedidoDetalle (Packing List FINAL) "diferencia": 22 // positivo = más empacado que inspeccionado OK }, { "color": "FUCHSIA", "primeras_efectivas": 119, "qty_pedido": 130, "diferencia": 11 }, { "color": "HARBOR", "primeras_efectivas": 313, "qty_pedido": 320, "diferencia": 7 }, { "color": "HONEY", "primeras_efectivas": 166, "qty_pedido": 181, "diferencia": 15 }, { "color": "LENTIL", "primeras_efectivas": 139, "qty_pedido": 153, "diferencia": 14 }, { "color": "SIENNA", "primeras_efectivas": 299, "qty_pedido": 304, "diferencia": 5 }, { "color": "TEAL", "primeras_efectivas": 141, "qty_pedido": 158, "diferencia": 17 }, { "color": "WINTER WHITE", "primeras_efectivas": 338, "qty_pedido": 374, "diferencia": 36 } ], "total_primeras_efectivas": 1814, "total_pedido": 1941 // packing list FINAL > plan (reposiciones/sobreproducción) }
despachos ya existe (40+ columnas, 2 filas de prueba).
despachos
La tabla despachos ya existe. Agregar 2 campos con nueva migración:
codigo_expediente VARCHAR — ID interno agrupador (ej. "DES-2026-HBT-001")
fecha_guia_remision DATE — fecha oficial de cierre CP9 (trigger = Guía de Remisión, no factura)
En documentos-exportacion.astro agregar flujo:
1. Selector de PO → genera/busca codigo_expediente.
2. Upload de 6 tipos de documento (solo metadata en upload_audits).
3. Estado del expediente (pendiente/completo).
4. Botón "Cerrar CP9" — activo cuando docs obligatorios subidos.
Una PO puede dividirse en envíos aéreo + marítimo. Lógica similar al archivo de reasignación de CP1.
| Documento | Tipo | Parser backend | Upload type |
|---|---|---|---|
| OC Cliente (PO) | Trento Core DB | Auto | — |
| Factura electrónica | parse_factura_exportacion_pdf | cp9_factura | |
| Guía de Remisión | parse_guia_remision_despacho_pdf → extrae fecha cierre | cp9_guia_remision | |
| Bill of Lading | parse_bl_pdf | cp9_bl | |
| DAM | parse_dam_pdf | cp9_dam | |
| DUA | Solo metadata (*) | cp9_dua | |
| Booking | parse_booking_pdf | cp9_booking |
CheckpointFragment → VerificarFragment → CompletarFragment. Solo CP6 tiene screens dedicadas. CP9 es backoffice/dashboard — out of scope para mobile.
El backend ya retorna inspecciones_por_color: {"BLACK": 299, ...} en la respuesta precargada.
Actualizar VerificarFragment.java: cuando cp_num == 7 y inspecciones_por_color != null, mostrar RecyclerView con columnas COLOR | PRIMERAS EFECTIVAS + fila de totales.
Si porcentaje_primeras < 95.0: badge rojo "⚠ {porcentaje}%".
Verificar si PrecargadoResponse ya tiene estos campos o agregarlos al modelo Gson.
En CheckpointConfig.java (CP7): quitar campos manuales de prendas (el backend los auto-deriva). Agregar resultado_calidad con valores ["aprobado", "rechazado"].
En CompletarFragment.java: renderizar resultado_calidad como dos botones toggle (Aprobado verde / Rechazado rojo).
Al recibir response: si desglose.alerta == true, mostrar Snackbar: "Diferencia vs CP6: {diferencia} prendas ({porcentaje_variacion}%). Puede continuar."
Cuando cp_num == 8 y backend retorna colores_cp8: mostrar RecyclerView con columnas COLOR | PRIMERAS EFECTIVAS | PACKING LIST | DIFERENCIA.
Diferencias negativas en rojo. Label "Total cajas: {N}" debajo.
Bloqueado por B1 — implementar cuando backend esté en develop.
// OP-6989 · Hábitat · Estilo 27553 GS1-128 checkin: "(10)OP-6989(240)T001-22621" Backend: https://dev-back.dpp.fintechlab.la // CP7 Completar — payload mínimo POST /api/v1/checkpoints/7/lote/{lote_id}/completar { "resultado_calidad": "aprobado" // prendas_* se auto-derivan desde cp7_inspecciones } // CP7 Completar — response desglose { "desglose": { "primeras": 1814, "segundas": 31, "diferencia": 0, "porcentaje_variacion": 0.0, "alerta": false } } // inspecciones_por_color (en GET precargado CP7) { "BLACK": 299, "FUCHSIA": 119, "HARBOR": 313, "HONEY": 166, "LENTIL": 139, "SIENNA": 299, "TEAL": 141, "WINTER WHITE": 338 } // total_pedido: 1884 · total_primeras_efectivas: 1814 · porcentaje_primeras: 96.3
| Archivo | Cambio | Tarea |
|---|---|---|
fragment/VerificarFragment.java | RecyclerView tabla colores CP7 + badge % | D1 |
checkpoint/CheckpointConfig.java | CP7 fields: quitar prendas manuales, agregar resultado_calidad | D2 |
fragment/CompletarFragment.java | Toggle Aprobado/Rechazado + Snackbar alerta | D2 |
network/model/PrecargadoResponse.java (verificar) | Agregar campos inspecciones_por_color si no existen | D1 |
fragment/VerificarFragment.java | RecyclerView packing list CP8 | D3 |
upload_audits. Sin almacenamiento de contenido.codigo_expediente + fecha_guia_remision via migración.