-- ============================================================
-- Migration v95 — Módulo Banco de Sangue
-- HSRB SISTEMAS — Compatível com RDC 34/2014 (ANVISA)
-- Prefixo: bs_  |  Todas as tabelas possuem clinica_id
-- ============================================================

SET SQL_MODE   = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone  = "+00:00";
SET NAMES utf8mb4;

-- ------------------------------------------------------------
-- Doadores
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `bs_doadores` (
  `id`                  int(11) NOT NULL AUTO_INCREMENT,
  `clinica_id`          int(11) NOT NULL,
  `nome`                varchar(100) NOT NULL,
  `cpf`                 varchar(14) DEFAULT NULL,
  `rg`                  varchar(20) DEFAULT NULL,
  `data_nascimento`     date NOT NULL,
  `sexo`                enum('M','F') NOT NULL,
  `peso`                decimal(5,2) DEFAULT NULL,
  `tipo_sanguineo`      enum('A','B','AB','O') DEFAULT NULL,
  `fator_rh`            enum('+','-') DEFAULT NULL,
  `telefone`            varchar(15) DEFAULT NULL,
  `celular`             varchar(15) DEFAULT NULL,
  `email`               varchar(100) DEFAULT NULL,
  `endereco`            varchar(150) DEFAULT NULL,
  `numero`              varchar(10) DEFAULT NULL,
  `complemento`         varchar(50) DEFAULT NULL,
  `bairro`              varchar(50) DEFAULT NULL,
  `cidade`              varchar(50) DEFAULT NULL,
  `estado`              char(2) DEFAULT NULL,
  `cep`                 varchar(9) DEFAULT NULL,
  `status_doador`       enum('apto','inapto_temporario','inapto_permanente','inativo') DEFAULT 'apto',
  `data_proxima_doacao` date DEFAULT NULL,
  `total_doacoes`       int(11) DEFAULT 0,
  `observacoes`         text DEFAULT NULL,
  `data_cadastro`       timestamp NOT NULL DEFAULT current_timestamp(),
  `ultima_atualizacao`  timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`id`),
  KEY `idx_bs_doadores_clinica` (`clinica_id`),
  KEY `idx_bs_doadores_cpf`     (`cpf`),
  KEY `idx_bs_doadores_nome`    (`nome`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------
-- Triagem Clínica Pré-Doação (RDC 34/2014)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `bs_triagens` (
  `id`                  int(11) NOT NULL AUTO_INCREMENT,
  `clinica_id`          int(11) NOT NULL,
  `doador_id`           int(11) NOT NULL,
  `usuario_id`          int(11) NOT NULL,
  `data_triagem`        datetime NOT NULL,
  `peso`                decimal(5,2) DEFAULT NULL,
  `pressao_sistolica`   int(11) DEFAULT NULL,
  `pressao_diastolica`  int(11) DEFAULT NULL,
  `pulso`               int(11) DEFAULT NULL,
  `temperatura`         decimal(4,1) DEFAULT NULL,
  `hemoglobina`         decimal(4,1) DEFAULT NULL,
  `hematocrito`         decimal(4,1) DEFAULT NULL,
  `febre_resfriado`     tinyint(1) DEFAULT 0 COMMENT 'Febre/resfriado últimos 7 dias',
  `medicamento`         tinyint(1) DEFAULT 0 COMMENT 'Uso de medicamentos',
  `cirurgia_recente`    tinyint(1) DEFAULT 0 COMMENT 'Cirurgia últimos 6 meses',
  `tatuagem_recente`    tinyint(1) DEFAULT 0 COMMENT 'Tatuagem/piercing últimos 12 meses',
  `gestante`            tinyint(1) DEFAULT 0 COMMENT 'Gravidez/amamentação',
  `dsts`                tinyint(1) DEFAULT 0 COMMENT 'DST nos últimos 12 meses',
  `drogas_injetaveis`   tinyint(1) DEFAULT 0 COMMENT 'Uso de drogas injetáveis (inapto permanente)',
  `transfundido`        tinyint(1) DEFAULT 0 COMMENT 'Recebeu transfusão últimos 12 meses',
  `viagem_recente`      tinyint(1) DEFAULT 0 COMMENT 'Viagem área endêmica',
  `resultado`           enum('apto','inapto_temporario','inapto_permanente') NOT NULL,
  `motivo_inaptidao`    varchar(255) DEFAULT NULL,
  `prazo_retorno`       date DEFAULT NULL,
  `observacoes`         text DEFAULT NULL,
  `data_cadastro`       timestamp NOT NULL DEFAULT current_timestamp(),
  PRIMARY KEY (`id`),
  KEY `idx_bs_triagens_doador`  (`doador_id`),
  KEY `idx_bs_triagens_clinica` (`clinica_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------
-- Coletas de Sangue (Bolsas)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `bs_coletas` (
  `id`                 int(11) NOT NULL AUTO_INCREMENT,
  `clinica_id`         int(11) NOT NULL,
  `doador_id`          int(11) NOT NULL,
  `triagem_id`         int(11) DEFAULT NULL,
  `usuario_id`         int(11) NOT NULL,
  `numero_bolsa`       varchar(30) NOT NULL,
  `data_coleta`        datetime NOT NULL,
  `volume_ml`          int(11) NOT NULL DEFAULT 450,
  `anticoagulante`     enum('CPDA-1','ACD-A','CPD','SAG-M') DEFAULT 'CPDA-1',
  `tipo_sanguineo`     enum('A','B','AB','O') DEFAULT NULL,
  `fator_rh`           enum('+','-') DEFAULT NULL,
  `status`             enum('coletada','em_processamento','aprovada','descartada') DEFAULT 'coletada',
  `motivo_descarte`    varchar(255) DEFAULT NULL,
  `observacoes`        text DEFAULT NULL,
  `data_cadastro`      timestamp NOT NULL DEFAULT current_timestamp(),
  `ultima_atualizacao` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`id`),
  UNIQUE KEY `uq_numero_bolsa`   (`numero_bolsa`, `clinica_id`),
  KEY `idx_bs_coletas_doador`    (`doador_id`),
  KEY `idx_bs_coletas_clinica`   (`clinica_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------
-- Testes Sorológicos e Imuno-Hematológicos (RDC 34/2014)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `bs_testes_sorologicos` (
  `id`              int(11) NOT NULL AUTO_INCREMENT,
  `clinica_id`      int(11) NOT NULL,
  `coleta_id`       int(11) NOT NULL,
  `usuario_id`      int(11) NOT NULL,
  `data_realizacao` datetime NOT NULL,
  `hbsag`           enum('NR','R','I') DEFAULT NULL COMMENT 'HBsAg — Hepatite B antígeno superfície',
  `anti_hbc`        enum('NR','R','I') DEFAULT NULL COMMENT 'Anti-HBc — Hepatite B anticorpo core',
  `anti_hcv`        enum('NR','R','I') DEFAULT NULL COMMENT 'Anti-HCV — Hepatite C',
  `anti_hiv_1_2`    enum('NR','R','I') DEFAULT NULL COMMENT 'Anti-HIV 1/2',
  `htlv_1_2`        enum('NR','R','I') DEFAULT NULL COMMENT 'HTLV I/II',
  `vdrl`            enum('NR','R','I') DEFAULT NULL COMMENT 'Sífilis — VDRL',
  `chagas`          enum('NR','R','I') DEFAULT NULL COMMENT 'Doença de Chagas',
  `nat_hiv`         enum('NR','R','I') DEFAULT NULL COMMENT 'NAT HIV',
  `nat_hcv`         enum('NR','R','I') DEFAULT NULL COMMENT 'NAT HCV',
  `nat_hbv`         enum('NR','R','I') DEFAULT NULL COMMENT 'NAT HBV',
  `tipo_sanguineo`  enum('A','B','AB','O') DEFAULT NULL,
  `fator_rh`        enum('+','-') DEFAULT NULL,
  `fenotipagem`     varchar(100) DEFAULT NULL COMMENT 'Ex: K-, E-, e+, C-, c+',
  `resultado_geral` enum('aprovado','reprovado','incompleto') DEFAULT 'incompleto',
  `observacoes`     text DEFAULT NULL,
  `data_cadastro`   timestamp NOT NULL DEFAULT current_timestamp(),
  PRIMARY KEY (`id`),
  KEY `idx_bs_testes_coleta`   (`coleta_id`),
  KEY `idx_bs_testes_clinica`  (`clinica_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------
-- Hemocomponentes (Processamento / Fracionamento)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `bs_hemocomponentes` (
  `id`                  int(11) NOT NULL AUTO_INCREMENT,
  `clinica_id`          int(11) NOT NULL,
  `coleta_id`           int(11) NOT NULL,
  `usuario_id`          int(11) NOT NULL,
  `tipo`                enum('CH','CHL','CHF','PFC','CP','CRIO','ST') NOT NULL
                        COMMENT 'CH=Conc.Hemácias, CHL=Lavadas, CHF=Filtradas, PFC=Plasma, CP=Plaquetas, CRIO=Crioprecipitado, ST=Sangue Total',
  `numero_componente`   varchar(30) NOT NULL,
  `tipo_sanguineo`      enum('A','B','AB','O') NOT NULL,
  `fator_rh`            enum('+','-') NOT NULL,
  `volume_ml`           int(11) DEFAULT NULL,
  `data_processamento`  datetime NOT NULL,
  `data_validade`       datetime NOT NULL,
  `status`              enum('disponivel','reservado','transfundido','descartado','vencido') DEFAULT 'disponivel',
  `motivo_descarte`     varchar(255) DEFAULT NULL,
  `requisicao_id`       int(11) DEFAULT NULL,
  `observacoes`         text DEFAULT NULL,
  `data_cadastro`       timestamp NOT NULL DEFAULT current_timestamp(),
  `ultima_atualizacao`  timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`id`),
  UNIQUE KEY `uq_numero_componente`     (`numero_componente`, `clinica_id`),
  KEY `idx_bs_hemo_coleta`              (`coleta_id`),
  KEY `idx_bs_hemo_clinica`             (`clinica_id`),
  KEY `idx_bs_hemo_tipo_sangue`         (`tipo_sanguineo`, `fator_rh`, `status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------
-- Requisições de Hemocomponentes
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `bs_requisicoes` (
  `id`                        int(11) NOT NULL AUTO_INCREMENT,
  `clinica_id`                int(11) NOT NULL,
  `paciente_id`               int(11) NOT NULL,
  `numero_requisicao`         varchar(20) NOT NULL,
  `solicitante_nome`          varchar(100) NOT NULL,
  `solicitante_crm`           varchar(20) DEFAULT NULL,
  `setor`                     varchar(100) DEFAULT NULL,
  `diagnostico`               varchar(255) DEFAULT NULL,
  `tipo_componente`           enum('CH','CHL','CHF','PFC','CP','CRIO','ST') NOT NULL,
  `tipo_sanguineo_solicitado` enum('A','B','AB','O','qualquer') DEFAULT 'qualquer',
  `fator_rh_solicitado`       enum('+','-','qualquer') DEFAULT 'qualquer',
  `quantidade`                int(11) NOT NULL DEFAULT 1,
  `urgencia`                  enum('rotina','urgencia','emergencia') DEFAULT 'rotina',
  `indicacao_clinica`         text DEFAULT NULL,
  `status`                    enum('pendente','em_analise','aprovada','em_separacao','liberada','transfundida','cancelada') DEFAULT 'pendente',
  `usuario_solicitante_id`    int(11) NOT NULL,
  `usuario_aprovador_id`      int(11) DEFAULT NULL,
  `data_requisicao`           timestamp NOT NULL DEFAULT current_timestamp(),
  `data_aprovacao`            datetime DEFAULT NULL,
  `data_liberacao`            datetime DEFAULT NULL,
  `observacoes`               text DEFAULT NULL,
  `ultima_atualizacao`        timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`id`),
  UNIQUE KEY `uq_numero_requisicao`  (`numero_requisicao`, `clinica_id`),
  KEY `idx_bs_req_paciente`          (`paciente_id`),
  KEY `idx_bs_req_clinica`           (`clinica_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------
-- Itens Atendidos da Requisição (Prova Cruzada)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `bs_requisicao_hemocomponentes` (
  `id`                      int(11) NOT NULL AUTO_INCREMENT,
  `requisicao_id`           int(11) NOT NULL,
  `hemocomponente_id`       int(11) NOT NULL,
  `resultado_prova_cruzada` enum('compativel','incompativel','nao_realizada') DEFAULT 'nao_realizada',
  `data_prova_cruzada`      datetime DEFAULT NULL,
  `usuario_id`              int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_bs_req_hemo_req`  (`requisicao_id`),
  KEY `idx_bs_req_hemo_hemo` (`hemocomponente_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------
-- Transfusões
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `bs_transfusoes` (
  `id`                     int(11) NOT NULL AUTO_INCREMENT,
  `clinica_id`             int(11) NOT NULL,
  `requisicao_id`          int(11) NOT NULL,
  `paciente_id`            int(11) NOT NULL,
  `hemocomponente_id`      int(11) NOT NULL,
  `usuario_id`             int(11) NOT NULL,
  `medico_responsavel`     varchar(100) DEFAULT NULL,
  `data_inicio`            datetime NOT NULL,
  `data_fim`               datetime DEFAULT NULL,
  `volume_transfundido_ml` int(11) DEFAULT NULL,
  `pa_pre`                 varchar(10) DEFAULT NULL,
  `pulso_pre`              int(11) DEFAULT NULL,
  `temp_pre`               decimal(4,1) DEFAULT NULL,
  `pa_pos`                 varchar(10) DEFAULT NULL,
  `pulso_pos`              int(11) DEFAULT NULL,
  `temp_pos`               decimal(4,1) DEFAULT NULL,
  `status`                 enum('em_andamento','concluida','interrompida') DEFAULT 'em_andamento',
  `observacoes`            text DEFAULT NULL,
  `data_cadastro`          timestamp NOT NULL DEFAULT current_timestamp(),
  `ultima_atualizacao`     timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`id`),
  KEY `idx_bs_transf_req`      (`requisicao_id`),
  KEY `idx_bs_transf_paciente` (`paciente_id`),
  KEY `idx_bs_transf_clinica`  (`clinica_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------
-- Reações Transfusionais — Hemovigilância
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `bs_reacoes_transfusionais` (
  `id`                       int(11) NOT NULL AUTO_INCREMENT,
  `clinica_id`               int(11) NOT NULL,
  `transfusao_id`            int(11) NOT NULL,
  `usuario_id`               int(11) NOT NULL,
  `data_reacao`              datetime NOT NULL,
  `tipo_reacao`              enum(
                               'hemolitica_aguda',
                               'hemolitica_tardia',
                               'febril_nao_hemolitica',
                               'alergia_leve',
                               'alergia_grave_anafilaxia',
                               'sobrecarga_circulatoria',
                               'lesao_pulmonar_trali',
                               'contaminacao_bacteriana',
                               'hipotensao',
                               'outro'
                             ) NOT NULL,
  `gravidade`                enum('leve','moderada','grave','fatal') NOT NULL,
  `descricao_sintomas`       text NOT NULL,
  `conduta_adotada`          text DEFAULT NULL,
  `desfecho`                 enum('recuperado','recuperado_sequelas','em_acompanhamento','obito','desconhecido') DEFAULT NULL,
  `notificado_anvisa`        tinyint(1) DEFAULT 0,
  `data_notificacao_anvisa`  datetime DEFAULT NULL,
  `numero_notificacao`       varchar(30) DEFAULT NULL,
  `status`                   tinyint(1) DEFAULT 1,
  `data_cadastro`            timestamp NOT NULL DEFAULT current_timestamp(),
  PRIMARY KEY (`id`),
  KEY `idx_bs_reacoes_transfusao` (`transfusao_id`),
  KEY `idx_bs_reacoes_clinica`    (`clinica_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------
-- Permissões do Módulo
-- ------------------------------------------------------------
INSERT IGNORE INTO `permissoes` (`nome`, `chave`, `descricao`) VALUES
('Banco de Sangue - Visualizar',         'banco_sangue_view',              'Acesso ao módulo de banco de sangue'),
('Banco de Sangue - Doadores Gerenciar', 'banco_sangue_doadores_manage',   'Cadastrar e gerenciar doadores de sangue'),
('Banco de Sangue - Coleta Registrar',   'banco_sangue_coleta_create',     'Registrar novas coletas de sangue'),
('Banco de Sangue - Testes Gerenciar',   'banco_sangue_testes_manage',     'Gerenciar testes sorológicos e imuno-hematológicos'),
('Banco de Sangue - Hemocomponentes',    'banco_sangue_hemo_manage',       'Gerenciar processamento de hemocomponentes'),
('Banco de Sangue - Estoque Visualizar', 'banco_sangue_estoque_view',      'Visualizar estoque de hemocomponentes'),
('Banco de Sangue - Req. Criar',         'banco_sangue_req_create',        'Criar requisições de hemocomponentes'),
('Banco de Sangue - Req. Aprovar',       'banco_sangue_req_approve',       'Aprovar e liberar requisições de hemocomponentes'),
('Banco de Sangue - Transfusão',         'banco_sangue_transfusao_create', 'Registrar e gerenciar transfusões'),
('Banco de Sangue - Reações',            'banco_sangue_reacao_create',     'Registrar reações transfusionais (hemovigilância)'),
('Banco de Sangue - Relatórios',         'banco_sangue_relatorios',        'Acessar relatórios e estatísticas do banco de sangue');
