Saltar al contenido
DispensAI

CAL-005

Respuesta y cierre de ticket

Asegurar que toda queja reciba una respuesta documentada y visible para el socio antes de cerrarse, y que el cierre quede registrado en el historial de workflow.

1. Objetivo

Establecer cómo se redacta, entrega y registra la respuesta al socio y cómo se cierra formalmente el ticket, dejando constancia de la resolución y garantizando que el socio pueda verificar el cierre a través del enlace de consulta.

2. Alcance

Cubre la etapa de respuesta y cierre: redacción de la respuesta, transición de estado a resolved, entrega al socio, posible reapertura si la resolución no es satisfactoria, y cierre definitivo.

No cubre:

  • la apertura del ticket → [[wiki/entities/dispensai/protocolos/CAL-002]];
  • la autoapertura → [[wiki/entities/dispensai/protocolos/CAL-003]];
  • la investigación → [[wiki/entities/dispensai/protocolos/CAL-004]];
  • la derivación a no conformidad → CAL-006.

3. Definiciones

  • Respuesta: mensaje visible para el socio que explica qué se encontró, qué se actuó y cuál es la resolución.
  • Cierre: transición del ticket a estado closed, estado terminal sin posibilidad de reapertura por el sistema.
  • Reapertura: vuelta de resolved a in_progress, habilitada por el workflow cuando la resolución no es satisfactoria.
  • Nota interna: mensaje visible sólo para el equipo de la organización; no sale al socio.
  • Cierre por duplicidad: cierre de un ticket idéntico a otro ya gestionado, dejando constancia del folio original.

4. Roles y responsables

RolResponsabilidad
Responsable de Soporte / CalidadRedacta la respuesta y ejecuta el cierre.
SistemaValida las transiciones, registra el historial y entrega la respuesta al socio en su enlace de consulta.
SocioPuede ver la respuesta desde su enlace de consulta y solicitar reapertura si no está conforme.
CalidadVerifica que los tickets cerrados tengan respuesta documentada.

5. Disparador de inicio

La queja alcanza el estado in_progress tras la investigación de CAL-004. El responsable tiene los antecedentes suficientes para redactar la respuesta.

6. Requisitos previos

  • El ticket está en estado in_progress con investigación concluida.
  • El responsable puede registrar mensajes en el ticket.
  • El socio tiene un enlace de consulta activo (access_id) para recibir la respuesta.

7. Entradas

  • Resultado de la investigación (notas internas del responsable).
  • Antecedentes revisados (descripción, dispensación, evaluación de origen, si aplica).
  • Decisión de resolución: atendida, rechazada, derivada a NC, cerrada por duplicidad.

8. Procedimiento paso a paso

  1. El responsable redacta la respuesta en el ticket como un mensaje visible para el socio, que explica qué se encontró y qué resolvió.
  2. El responsable avanza el estado a resolved. El sistema valida la transición in_progress → resolved. El registro del historial con usuario, fecha y motivo no se produce hoy: la tabla destino no existe (ver brecha 5 en §17). El estado sí queda en service_complaints.
  3. La respuesta queda visible para el socio en su enlace de consulta (/tickets/[accessId]), sin que el socio requiera iniciar sesión.
  4. Si el socio no queda conforme, el responsable puede volver el ticket a in_progress (transición resolved → in_progress habilitada por el workflow) para continuar la gestión.
  5. Cuando la resolución es definitiva, el responsable avanza a closed. El sistema valida la transición resolved → closed; el registro del historial tampoco se produce (brecha 5).
  6. El estado closed es terminal: el sistema no permite transición alguna desde closed.

9. Puntos de control

#ControlMomento
C1Mensaje de respuesta redactado y marcado como visible para el socioPaso 1
C2Transición resolved válida — la validación opera; el registro en historial no (brecha 5)Paso 2
C3Respuesta accesible por el socio en su enlace de consultaPaso 3
C4Reapertura posible si la resolución no es satisfactoriaPaso 4
C5Transición closed válida — sin registro en historial (brecha 5)Paso 5
C6Estado closed es terminal — sin posibilidad de nueva transiciónPaso 6

10. Criterios de decisión

SituaciónResultado
Investigación concluida y respuesta redactadaAvanzar a resolved y notificar al socio
Socio no conforme con la respuestaVolver a in_progress para continuar gestión
Ticket duplicado de otro ya gestionadoCerrar con constancia del folio original
Queja revela causa raíz sistémicaIniciar derivación paralela en CAL-006 antes de cerrar
Queja resuelta y socio sin nuevas observacionesAvanzar a closed

11. Excepciones y escalamiento

  • Cierre por duplicidad. No se borra el ticket; se cierra en closed con nota interna que referencia el folio del ticket original.
  • Queja anónima. La respuesta se publica en el enlace de consulta. No es posible comunicarla por otro canal porque no existe identidad del presentador.
  • NC asociada abierta. Si la queja generó una NC automática (CAL-004), el cierre de la queja no cierra automáticamente la NC. El responsable de Calidad la gestiona por separado en el flujo de no conformidades.
  • Ticket en closed con NC abierta. Es un estado válido. La NC registra la causa raíz sistémica; la queja registra la atención al caso individual. Son cadenas de evidencia distintas.

12. Registros generados

  • Mensaje visible al socio con la respuesta y la resolución, en complaint_messages.
  • Estado final del ticket en service_complaints.

No se genera hoy, porque su tabla destino no existe (brecha 5 en §17): el registro de las transiciones in_progress → resolved y resolved → closed con usuario y motivo, y el historial consultable vía getWorkflowHistory. El estado final del ticket queda; quién lo cerró y cuándo, no. La constancia de esos datos es hoy humana.

13. Indicadores

IndicadorFórmulaMetaFuente
Tickets cerrados con respuestaTickets en closed con mensaje visible ÷ total cerrados100 %service_complaints + complaint_messages
Tiempo en resolvedPromedio de días entre resolved y closed< 5 díasNo calculable hoy — sin historial de transiciones (brecha 5)
Tickets reabiertosTickets que volvieron de resolved a in_progress ÷ totalMonitoreo de tendenciaNo calculable hoy — sin historial de transiciones (brecha 5)
Tickets duplicados cerradosConteo de cierres por duplicidadSeguimiento; si sube, revisar CAL-002service_complaints

14. Riesgos y controles

RiesgoControlTipo
Cierre sin respuesta al socioVer brecha 1 en §17—
Cierre prematuro antes de investigarWorkflow obliga paso por in_progress antes de resolvedPreventivo
NC asociada olvidadaRegla del §11 — gestión separada documentadaManual
Respuesta no visible para el socioC3 — verificar visible_to_user en complaint_messagesPreventivo
Reapertura sin justificaciónSin control efectivo — el motivo de la transición no se persisteBrecha (§17, brecha 5)

15. Normativa y referencias

  • ISO 9001:2015 §10.2, No conformidad y acción correctiva: el cierre de una queja requiere registro de lo actuado y de la resolución adoptada.
  • ISO 9001:2015 §10.3, Mejora continua: el análisis de quejas cerradas alimenta la mejora del servicio.
  • ISO 26000:2010 §6.7.6, Resolución de conflictos y reclamos: la respuesta al reclamante es parte del proceso justo.
  • [[wiki/entities/dispensai/protocolos/CAL-002]] — apertura del ticket.
  • [[wiki/entities/dispensai/protocolos/CAL-004]] — investigación previa al cierre.
  • CAL-006 — derivación a no conformidad cuando el cierre revela causa raíz sistémica.

16. Anexos y formularios vinculados

  • Plantilla de respuesta a queja (texto base).
  • Modelo de notificación de cierre.

17. Implementación en el sistema

El protocolo está implementado en su estructura de workflow. El sistema garantiza el orden de las transiciones; su registro histórico no se persiste hoy (brecha 5). La obligatoriedad de la respuesta antes del cierre no está enforced por el código: es una responsabilidad operativa del equipo de Soporte y Calidad.

Elemento del protocoloDónde vive
Paso 2 — transición resolvedupdateComplaintWorkflowStatus("queja", complaintId, "resolved", userId, reason) en dispensai/lib/iso-workflows.ts
Paso 5 — transición closedupdateComplaintWorkflowStatus("queja", complaintId, "closed", userId, reason)
Registro de historiallogWorkflowTransition escribe a iso_workflows — tabla inexistente (brecha 5)
Estado terminal closedWORKFLOW_TRANSITIONS.queja.closed = [] — sin transición posible
Reapertura habilitadaWORKFLOW_TRANSITIONS.queja.resolved = ["closed", "in_progress"]
Mensajes visibles al socioTabla complaint_messages con columna visible_to_user; consultables en /tickets/[accessId] sin sesión
Historial consultablegetWorkflowHistory("queja", complaintId) — sin filas que devolver (brecha 5)

Brechas conocidas:

  1. El cierre no exige respuesta documentada. updateComplaintWorkflowStatus valida la transición tipológica pero no verifica que exista al menos un mensaje visible al socio. Un responsable puede pasar el ticket a resolved y luego a closed sin haber redactado ninguna respuesta. El riesgo principal del protocolo —cierre prematuro— puede ocurrir en el sistema.
  2. Sin confirmación de satisfacción del socio. El sistema no solicita ni registra si quien presentó la queja considera su caso resuelto. La transición a closed es unilateral del responsable.
  3. NC asociada sin vínculo de cierre. La no conformidad creada automáticamente en CAL-004 (queja crítica > 3 días) no se cierra al cerrar la queja. No hay campo en service_complaints ni en service_non_conformities que registre el vínculo bidireccional. El cierre de ambas cadenas requiere gestión manual separada, sin alerta de pendiente.
  4. La transición a resolved/closed no notifica al socio. La inspección de app/actions/iso.ts no encontró llamada a notificación en el camino de updateComplaintWorkflowStatus. El socio puede enterarse del cierre solo si consulta proactivamente su enlace en /tickets/[accessId].
  5. La tabla iso_workflows no existe, y el plano ISO está apagado. Este protocolo la declaraba como registro de evidencia del cierre. Fue eliminada por dispensai/supabase/migrations/20260515000000_iso_standby.sql:128 (DROP TABLE IF EXISTS public.iso_workflows CASCADE) y vuelve a eliminarse en 20260629000000_cross_tenant_dispensation_fix_canonical.sql:83. Ninguna migración posterior la recrea: su única sentencia CREATE TABLE vive en 20240101000000_baseline_schema.sql, anterior al drop. El plano ISO se trasladó al Worker dispensai/backends/workers/iso (D1), detrás de la bandera ISO_ENABLED, en false en los seis tenants con .env local; con la bandera apagada logISOSystemEvent es un no-op silencioso (dispensai/lib/iso-event-logger.ts:8). Consecuencia operativa: el cierre del ticket ocurre y su estado final queda en service_complaints, pero quién cerró, cuándo y con qué motivo no deja rastro verificable en el sistema. La cadena de evidencia del cierre depende de los mensajes en complaint_messages y de constancia humana. Esto también agrava la brecha 3: el vínculo con la no conformidad no sólo carece de campo, sino que service_non_conformities tampoco existe (20260515000000_iso_standby.sql:138).

Brecha observada en auditoría 2026-08-31

  • Ruta no encontrada exacta: /admin/farmiemos/rse/quejas/[id] — puede ser variante (singular/plural, /admin vs /dashboard) o ruta renombrada. Acción correctora: actualizar el frontmatter con la ruta real que usa el sistema.
  • Ruta no encontrada exacta: /tickets/[accessId] — puede ser variante (singular/plural, /admin vs /dashboard) o ruta renombrada. Acción correctora: actualizar el frontmatter con la ruta real que usa el sistema.

18. Historial de versiones

VersiónFechaCambioAutor
1.02026-08-28Versión inicial, derivada de la navegación del flujo de quejas y del módulo de workflowsCalidad
1.12026-08-29Cierre de INFERIDO: brecha 4 confirmada — app/actions/iso.ts no contiene llamada de notificación en updateComplaintWorkflowStatus; ausencia es brecha confirmada. Estado ascendido a Vigente.Harness dispensai-protocolos
1.22026-08-29Corrección de evidencia inexistente: iso_workflows sale del frontmatter (registro_evidencia, implementacion.tablas). Nueva brecha 5 con las migraciones que la eliminaron y el estado de ISO_ENABLED. §8, §9, §12, §13, §14 y §17 corregidos para no afirmar un registro que no ocurre. Brechas 4 → 5.Sistema / admin
1.0+audit-2026-08-312026-08-31Detectados gaps en auditoría: /admin/farmiemos/rse/quejas/[id], /tickets/[accessId]. §17 actualizada para documentar la brecha con evidencia de código. Estado documental sin cambio.Auditoría automática

Documentos asociados

  • Ticket de queja
  • Mensajes visibles al socio
  • Historial de transiciones de estado

Registros y evidencia

  • Mensajes en complaint_messages con visible_to_user true
  • Estado final del ticket en service_complaints

Indicadores

  • % de tickets cerrados con respuesta visible al socio
  • Tiempo promedio entre resolved y closed
  • Tickets reabiertos tras cierre

Normativa y referencias

  • ISO 9001:2015 §10.2
  • ISO 9001:2015 §10.3
  • ISO 26000:2010 6.7.6

Dónde deja rastro en el sistema

Rutas
  • /admin/farmiemos/rse/quejas/[id]
  • /tickets/[accessId]
Tablas
  • service_complaints
  • complaint_messages