-- Migration V24: Módulo de Fluxo de Caixa (Meu Caixa)
-- Data: 2026-02-23

-- Tabela de sessões de caixa
-- Nota: clinica_id é referência lógica (sem FK pois master_clinicas não existe como tabela separada)
CREATE TABLE IF NOT EXISTS caixas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    clinica_id INT NOT NULL,
    usuario_id INT NOT NULL,
    data_abertura DATETIME NOT NULL,
    data_fechamento DATETIME DEFAULT NULL,
    saldo_inicial DECIMAL(10,2) NOT NULL DEFAULT 0.00,
    saldo_final_sistema DECIMAL(10,2) DEFAULT NULL,
    saldo_final_informado DECIMAL(10,2) DEFAULT NULL,
    status ENUM('aberto', 'fechado') NOT NULL DEFAULT 'aberto',
    observacoes TEXT DEFAULT NULL,
    INDEX idx_clinica_id (clinica_id),
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabela de movimentações do caixa
CREATE TABLE IF NOT EXISTS caixa_movimentacoes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    caixa_id INT NOT NULL,
    paciente_id INT DEFAULT NULL,
    tipo ENUM('entrada', 'saida') NOT NULL,
    valor DECIMAL(10,2) NOT NULL,
    forma_pagamento VARCHAR(50) NOT NULL,
    descricao VARCHAR(255) NOT NULL,
    data_hora DATETIME NOT NULL,
    FOREIGN KEY (caixa_id) REFERENCES caixas(id) ON DELETE CASCADE,
    FOREIGN KEY (paciente_id) REFERENCES pacientes(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Adicionar novas permissões
INSERT IGNORE INTO permissoes (nome, chave, descricao) VALUES
('Acessar Meu Caixa', 'caixa_acessar', 'Permite acessar o painel do fluxo de caixa e registrar lançamentos'),
('Abrir e Fechar Meu Caixa', 'caixa_abrir_fechar', 'Permite abrir um novo turno e realizar o fechamento do caixa próprio'),
('Gestão Global de Caixas', 'caixa_gerenciar_todos', 'Permite visualizar o histórico e registros de todos os caixas da clínica');

-- Conceder permissões de gestão global para o administrador (perfil 1)
INSERT IGNORE INTO perfil_permissoes (perfil_id, permissao_id)
SELECT 1, id FROM permissoes WHERE chave IN ('caixa_acessar', 'caixa_abrir_fechar', 'caixa_gerenciar_todos');

-- Conceder permissão de uso básico para a recepcionista (perfil 3 - assumindo que seja recepção)
INSERT IGNORE INTO perfil_permissoes (perfil_id, permissao_id)
SELECT 3, id FROM permissoes WHERE chave IN ('caixa_acessar', 'caixa_abrir_fechar');
