@startuml uml-activity-corte-pago-quincenal !include _style.iuml title 4. Corte de pago quincenal a prestadores start partition "Cron quincenal" { :Disparar job los días 1 y 16\n(00:30 hora CDMX); } partition "Sistema ExpressMX" { :Determinar rango [periodo_inicio, periodo_fin]; :SELECT FROM transacciones_prestador\nWHERE periodo IN rango\nAND incluida_en_corte = FALSE; if (¿hay transacciones del período?) then (sí) :Agrupar por prestador_id; :SUM(monto_neto) por prestador; :INSERT cortes_pago\n(estatus = 'generado',\nmonto_total, periodo); :UPDATE transacciones_prestador\nSET corte_id = ..., incluida_en_corte = TRUE; :Enviar email al prestador\ncon desglose; else (no) :Registrar log "sin transacciones"; stop endif } partition "Finanzas" { :Revisar cada corte en panel; if (¿corte aprobado?) then (sí) :Marcar estatus 'revisado'; else (no) partition "Sistema ExpressMX" { :Marcar estatus 'rechazado'; :Registrar motivo en bitácora; } partition "Prestador" { :Recibir notificación con motivo; :Aclarar incidencias para\nsiguiente corte; stop } endif } partition "Banco" { :Procesar dispersión ACH SPEI; if (¿confirma depósito?) then (sí) :Devolver clave de rastreo; else (no) partition "Finanzas" { :Reintentar al día siguiente hábil; :Si persiste, escalar a tesorería; stop } endif } partition "Sistema ExpressMX" { :UPDATE cortes_pago\nSET estatus = 'depositado',\nclave_rastreo = ...; } partition "Prestador" { :Recibir confirmación de depósito; :Descargar comprobante PDF; } stop footer Fuente: 00.sql (transacciones_prestador, cortes_pago), apps/web/src/lib/dashboard/actions/cortes.ts @enduml