-- Migration V41: Faturamento Completo de Convênios
-- Data: 2026-03-27
-- Objetivo: Glosas, Recebimentos de Convênio, campos de faturamento em guias/lotes

-- ============================================================
-- 1. CAMPOS DE FATURAMENTO NAS GUIAS
-- ============================================================
ALTER TABLE master_guias
  ADD COLUMN IF NOT EXISTS valor_faturado     DECIMAL(10,2) NULL     COMMENT 'Valor efetivamente faturado ao convênio',
  ADD COLUMN IF NOT EXISTS valor_glosado      DECIMAL(10,2) NOT NULL DEFAULT 0.00,
  ADD COLUMN IF NOT EXISTS data_faturamento   DATE          NULL,
  ADD COLUMN IF NOT EXISTS recebimento_id     INT           NULL,
  ADD COLUMN IF NOT EXISTS tiss_status_fat    ENUM('nao_faturado','em_lote','enviado','pago','glosado')
                                              NOT NULL DEFAULT 'nao_faturado';

-- ============================================================
-- 2. CAMPOS ADICIONAIS NO LOTE
-- ============================================================
ALTER TABLE tiss_lotes
  ADD COLUMN IF NOT EXISTS valor_glosado     DECIMAL(12,2) NOT NULL DEFAULT 0.00,
  ADD COLUMN IF NOT EXISTS data_pagamento    DATE          NULL,
  ADD COLUMN IF NOT EXISTS numero_bordereau  VARCHAR(50)   NULL COMMENT 'Número do borderô/protocolo do convênio';

-- ============================================================
-- 3. GLOSAS POR GUIA
-- ============================================================
CREATE TABLE IF NOT EXISTS `master_glosas` (
  `id`             INT           NOT NULL AUTO_INCREMENT,
  `guia_id`        INT           NOT NULL,
  `convenio_id`    INT           NOT NULL,
  `lote_id`        INT           NULL,
  `valor_original` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
  `valor_glosado`  DECIMAL(10,2) NOT NULL DEFAULT 0.00,
  `codigo_glosa`   VARCHAR(20)   NULL,
  `motivo`         TEXT          NULL,
  `status`         ENUM('pendente','recorrida','aceita','negada') NOT NULL DEFAULT 'pendente',
  `recurso_texto`  TEXT          NULL,
  `data_glosa`     DATE          NULL,
  `data_recurso`   DATE          NULL,
  `created_at`     TIMESTAMP     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_glosa_guia`     (`guia_id`),
  KEY `idx_glosa_convenio` (`convenio_id`),
  KEY `idx_glosa_lote`     (`lote_id`),
  CONSTRAINT `fk_glosa_guia`      FOREIGN KEY (`guia_id`)     REFERENCES `master_guias` (`id`),
  CONSTRAINT `fk_glosa_convenio`  FOREIGN KEY (`convenio_id`) REFERENCES `master_convenios` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- 4. RECEBIMENTOS DE CONVÊNIO (FATURAMENTO RECEBIDO)
-- ============================================================
CREATE TABLE IF NOT EXISTS `master_faturamento_recebimentos` (
  `id`               INT           NOT NULL AUTO_INCREMENT,
  `convenio_id`      INT           NOT NULL,
  `lote_id`          INT           NULL,
  `competencia`      CHAR(7)       NOT NULL COMMENT 'YYYY-MM',
  `valor_faturado`   DECIMAL(12,2) NOT NULL DEFAULT 0.00,
  `valor_glosado`    DECIMAL(12,2) NOT NULL DEFAULT 0.00,
  `valor_pago`       DECIMAL(12,2) NOT NULL DEFAULT 0.00,
  `data_pagamento`   DATE          NULL,
  `numero_bordereau` VARCHAR(50)   NULL,
  `observacoes`      TEXT          NULL,
  `status`           ENUM('pendente','parcial','pago') NOT NULL DEFAULT 'pendente',
  `created_at`       TIMESTAMP     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at`       TIMESTAMP     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_receb_convenio`    (`convenio_id`),
  KEY `idx_receb_competencia` (`competencia`),
  KEY `idx_receb_status`      (`status`),
  CONSTRAINT `fk_receb_convenio` FOREIGN KEY (`convenio_id`) REFERENCES `master_convenios` (`id`),
  CONSTRAINT `fk_receb_lote`     FOREIGN KEY (`lote_id`)     REFERENCES `tiss_lotes` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- 5. COLUNA convenio_id EM CAIXA REALIZADO
-- ============================================================
-- Necessário para vincular recebimentos de convênio ao caixa
ALTER TABLE `master_financeiro_caixa_realizado`
  ADD COLUMN IF NOT EXISTS `convenio_id` INT NULL COMMENT 'Vínculo com convênio quando pagamento é de convênio',
  ADD COLUMN IF NOT EXISTS `lote_id`     INT NULL COMMENT 'Vínculo com lote TISS quando aplicável';

-- ============================================================
-- 6. PERMISSÕES
-- ============================================================
INSERT INTO `permissoes` (`nome`, `chave`, `descricao`) VALUES
('Faturamento - Dashboard',  'faturamento_dashboard', 'Visualizar dashboard de faturamento de convênios')
ON DUPLICATE KEY UPDATE nome = nome;

INSERT INTO `permissoes` (`nome`, `chave`, `descricao`) VALUES
('Faturamento - Receber',    'faturamento_receber',   'Registrar pagamentos recebidos de convênios')
ON DUPLICATE KEY UPDATE nome = nome;

INSERT INTO `permissoes` (`nome`, `chave`, `descricao`) VALUES
('Faturamento - Glosas',     'faturamento_glosas',    'Gerenciar e recorrer glosas de convênios')
ON DUPLICATE KEY UPDATE nome = nome;

INSERT INTO `permissoes` (`nome`, `chave`, `descricao`) VALUES
('Faturamento - Relatorio',  'faturamento_relatorio', 'Emitir relatório de faturamento por convênio')
ON DUPLICATE KEY UPDATE nome = nome;

-- ============================================================
-- 7. ATRIBUIR PERMISSÕES AO PERFIL ADMINISTRADOR (ID 1)
-- ============================================================
INSERT IGNORE INTO `perfil_permissoes` (`perfil_id`, `permissao_id`)
SELECT 1, id FROM `permissoes`
WHERE `chave` IN ('faturamento_dashboard','faturamento_receber','faturamento_glosas','faturamento_relatorio');
