-- ═══════════════════════════════════════════════════════════════════════
-- 2026-10-19_06 · Invalidación ante Hacienda y eventos de contingencia
--
-- Siguiente paso de la integración DTE (el ERP reemplaza a Control):
--   factura: datos del evento de invalidación (tipo 1/2/3, documento que
--     reemplaza, quién solicita, sello, JSON firmado y respuesta) y el
--     evento de contingencia en el que se transmitió.
--   facturacion_emisor: responsable de los eventos (nombre y documento),
--     va en la invalidación y en la contingencia.
--   dte_contingencia: evento de contingencia (tipo, motivo, período,
--     sello) que agrupa los documentos emitidos sin conexión.
--
-- Respaldo previo: backups/tinsa_db_pre-invalidacion_2026-10-19.sql
-- Reversa: database/rollback/2026-10-19_06_invalidacion_contingencia.sql
-- ═══════════════════════════════════════════════════════════════════════

ALTER TABLE facturacion_emisor
  ADD COLUMN responsable_nombre VARCHAR(100) DEFAULT NULL AFTER correo,
  ADD COLUMN responsable_tipo_doc CHAR(2) NOT NULL DEFAULT '13' AFTER responsable_nombre,
  ADD COLUMN responsable_num_doc VARCHAR(25) DEFAULT NULL AFTER responsable_tipo_doc;

CREATE TABLE dte_contingencia (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  codigo_generacion CHAR(36) NOT NULL UNIQUE,
  ambiente CHAR(2) NOT NULL DEFAULT '00',
  tipo TINYINT UNSIGNED NOT NULL COMMENT 'CAT-005: 1 MH no disponible, 2 sistema del emisor, 3 internet del emisor, 4 energía, 5 otro',
  motivo VARCHAR(500) DEFAULT NULL,
  fecha_inicio DATETIME NOT NULL,
  fecha_fin DATETIME NOT NULL,
  estado ENUM('pendiente','recibido','rechazado') NOT NULL DEFAULT 'pendiente',
  sello_recepcion VARCHAR(100) DEFAULT NULL,
  observaciones_mh TEXT DEFAULT NULL,
  json_firmado MEDIUMTEXT DEFAULT NULL,
  respuesta_mh TEXT DEFAULT NULL,
  fecha_transmision DATETIME DEFAULT NULL,
  id_usuario INT UNSIGNED DEFAULT NULL,
  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  CONSTRAINT fk_dte_contingencia_usuario FOREIGN KEY (id_usuario) REFERENCES usuarios(id_usuario) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

ALTER TABLE factura
  ADD COLUMN id_contingencia INT UNSIGNED DEFAULT NULL AFTER intentos_transmision,
  ADD COLUMN invalidacion_tipo TINYINT UNSIGNED DEFAULT NULL AFTER fecha_anulacion,
  ADD COLUMN id_factura_reemplazo INT UNSIGNED DEFAULT NULL AFTER invalidacion_tipo,
  ADD COLUMN invalidacion_solicita VARCHAR(160) DEFAULT NULL AFTER id_factura_reemplazo,
  ADD COLUMN invalidacion_codigo CHAR(36) DEFAULT NULL AFTER invalidacion_solicita,
  ADD COLUMN invalidacion_sello VARCHAR(100) DEFAULT NULL AFTER invalidacion_codigo,
  ADD COLUMN invalidacion_json MEDIUMTEXT DEFAULT NULL AFTER invalidacion_sello,
  ADD COLUMN invalidacion_respuesta TEXT DEFAULT NULL AFTER invalidacion_json,
  ADD COLUMN invalidacion_fecha DATETIME DEFAULT NULL AFTER invalidacion_respuesta,
  ADD CONSTRAINT fk_factura_contingencia FOREIGN KEY (id_contingencia) REFERENCES dte_contingencia(id) ON DELETE SET NULL,
  ADD CONSTRAINT fk_factura_reemplazo FOREIGN KEY (id_factura_reemplazo) REFERENCES factura(id) ON DELETE SET NULL;
