-- =============================================================================
--  inv_solicitud — puntero y trazas de la TRANSFERENCIA hacia Tlalpan
-- =============================================================================
--  Base de datos : asturias_api  (servidor PÚBLICO, CL032BACK)
--  Archivo       : database/sql/inv_solicitud_add_transferencia_portal.sql
--  Fecha         : 2026-08-12
--  Equivale a    : database/migrations/2026_08_12_120000_add_transferencia_portal_to_inv_solicitud.php
--
--  MOTIVO
--  ------
--  El Portal CAPTURA la solicitud de invitados; Tlalpan (siasturianov6) la
--  CALIFICA y es el dueño del estado. Tlalpan viene a jalar las solicitudes
--  pendientes por /invitados/transferencia/pendientes y acusa recibo por
--  /invitados/transferencia/recibidas. El Portal nunca inicia la conexión (R1 de
--  ARQUITECTURA_SERVIDORES.md).
--
--  Para que ese ciclo sea idempotente y auditable hacen falta tres datos que hoy
--  no existen en la tabla:
--
--    idSolicitudTlalpan          → puntero al ID de DESTINO. Es lo que permite
--                                  correlacionar el veredicto que regresa y lo que
--                                  exige el checklist §10.8 de ARQUITECTURA.
--    solicitudFechaTransferencia → cuándo acusó recibo Tlalpan. Sin esta marca no
--                                  se puede medir el retraso del canal ni detectar
--                                  una solicitud estancada.
--    solicitudFechaEstado        → cuándo llegó el último veredicto que CAMBIÓ el
--                                  estado. Tlalpan reenvía el lote COMPLETO cada
--                                  5 min; esta columna se escribe solo en el cambio
--                                  real, no en cada ciclo.
--
--  La bandera de outbox `solicitudTransferencia enum('No','Si')` YA EXISTE y se
--  conserva tal cual: nace en 'No' desde Solicitud::nuevoTemporal() y pasa a 'Si'
--  cuando Tlalpan acusa recibo.
--
--  ÍNDICES
--  -------
--    idx_solicitud_transferencia (solicitudTransferencia, solicitudEstado)
--        Cubre la selección de /pendientes, que corre cada 5 minutos:
--        WHERE solicitudEstado='Solicitada' AND solicitudTransferencia='No'.
--        El orden de las columnas sigue al de la propuesta aprobada; ambas son
--        de igualdad, así que la selectividad la aporta la pareja completa.
--
--    idx_solicitud_tlalpan (idSolicitudTlalpan)
--        Cubre la aplicación del veredicto, que llega por idSolicitudPortal pero
--        se verifica de forma cruzada contra el puntero de destino.
--
--  NO se declara UNIQUE sobre idSolicitudTlalpan: la unicidad dura del canal vive
--  del lado de Tlalpan (UNIQUE(idSolicitudPortal) en siasturianov6). Un UNIQUE
--  aquí convertiría un acuse mal formado en un error 500 en vez de en un rechazo
--  controlado y bitacorado.
--
--  APLICAR MANUALMENTE
--  -------------------
--    mysql -u <usuario> -p asturias_api < inv_solicitud_add_transferencia_portal.sql
--
--  Es un ALTER de solo-adición sobre una tabla InnoDB pequeña (AUTO_INCREMENT = 9
--  en el dump de referencia). No reescribe datos y no requiere ventana.
-- =============================================================================

ALTER TABLE `inv_solicitud`
  ADD COLUMN `idSolicitudTlalpan`          int      NULL DEFAULT NULL
      COMMENT 'PK de inv_solicitud en Tlalpan. Puntero de destino.' AFTER `solicitudTransferencia`,
  ADD COLUMN `solicitudFechaTransferencia` datetime NULL DEFAULT NULL
      COMMENT 'Cuándo acusó recibo Tlalpan.'                        AFTER `idSolicitudTlalpan`,
  ADD COLUMN `solicitudFechaEstado`        datetime NULL DEFAULT NULL
      COMMENT 'Último veredicto recibido de Tlalpan.'               AFTER `solicitudFechaTransferencia`,
  ADD INDEX  `idx_solicitud_transferencia` (`solicitudTransferencia`, `solicitudEstado`),
  ADD INDEX  `idx_solicitud_tlalpan`       (`idSolicitudTlalpan`);

-- -----------------------------------------------------------------------------
--  VERIFICACIÓN (opcional, tras aplicar)
-- -----------------------------------------------------------------------------
-- SHOW CREATE TABLE `inv_solicitud`\G
-- SELECT COUNT(*) AS pendientes_de_transferir
--   FROM `inv_solicitud`
--  WHERE `solicitudEstado` = 'Solicitada'
--    AND `solicitudTransferencia` = 'No'
--    AND `solicitudFechaSalida` >= CURDATE();

-- -----------------------------------------------------------------------------
--  ROLLBACK
-- -----------------------------------------------------------------------------
-- ALTER TABLE `inv_solicitud`
--   DROP INDEX  `idx_solicitud_tlalpan`,
--   DROP INDEX  `idx_solicitud_transferencia`,
--   DROP COLUMN `solicitudFechaEstado`,
--   DROP COLUMN `solicitudFechaTransferencia`,
--   DROP COLUMN `idSolicitudTlalpan`;
