 RENAME TABLE dispensa_fardamento TO dispensa_fardamento_old;
 drop table conta_corrente;
RENAME TABLE clientes to clientes_old;
 drop table fardamento;
 drop TABLE geral_log;
 DROP TABLE log;
 Drop table log_clientes;
 drop table log_conta_corrente;
 DROP TABLE log_orcamentos;
 DROP TABLE manutencao_viaturas;
 RENAME TABLE pedido_dispensa_fardamento TO pedido_dispensa_fardamento_old;
 RENAME TABLE posse_funcionario to posse_funcionario_old;
 DROP TABLE precario;
 DROP TABLE registo_conta_corrente;
 DROP TABLE registo_orcamentos;
 DROP TABLE registo_preco_dispensa;
 DROP TABLE retoma_fardamento;
 RENAME TABLE stock_zona to stock_zona_old;
 DROP TABLE viaturas;
 

CREATE TABLE `ausencias` (
  `id_ausencia` int(11) NOT NULL AUTO_INCREMENT,
  `nif` varchar(9) NOT NULL,
  `tipo` varchar(50) NOT NULL,
  `data_inicio` date NOT NULL,
  `data_fim` date NOT NULL,
  `dias_contabilizados` int(11) DEFAULT 1,
  `observacoes` text,
  `comprovativo` varchar(255) DEFAULT NULL,
  `registado_em` timestamp DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_ausencia`),
  KEY `nif_idx` (`nif`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE clientes (
    numero_contrato VARCHAR(50) PRIMARY KEY,
    nif VARCHAR(20),
    designacao_comercial VARCHAR(100),
    nome_empresa VARCHAR(100),
    
    -- NOVOS CAMPOS ADICIONADOS
    email VARCHAR(100),
    contacto VARCHAR(50),
    
    zona VARCHAR(50),
    morada_servico VARCHAR(255),
    morada_sede VARCHAR(255),
    data_inicio DATE,
    data_fim DATE,
    renovavel VARCHAR(3),
    duracao VARCHAR(50),
    estado_contrato VARCHAR(50),
    estado VARCHAR(20) DEFAULT 'Ativo',
    
    -- Operacional
    natureza VARCHAR(50),
    
    -- Rondas
    tem_rondas VARCHAR(3) DEFAULT 'Não',
    qtd_pontos_ronda INT DEFAULT 0,
    frequencia_rondas VARCHAR(100),
    
    notas TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 3. Serviços e Preços
CREATE TABLE clientes_servicos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    numero_contrato VARCHAR(50),
    especialidade VARCHAR(50),
    quantidade INT DEFAULT 1,
    dias VARCHAR(100),
    horario VARCHAR(100),
    preco DECIMAL(10,2) DEFAULT 0.00,
    descricao_preco VARCHAR(100),
    FOREIGN KEY (numero_contrato) REFERENCES clientes(numero_contrato) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 4. Tabela de Equipamentos
CREATE TABLE clientes_equipamentos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    numero_contrato VARCHAR(50),
    tipo VARCHAR(50),
    quantidade INT DEFAULT 1,
    marca VARCHAR(100),
    modelo VARCHAR(100),
    num_serie VARCHAR(100),
    data_instalacao DATE,
    imei1 VARCHAR(50),
    imei2 VARCHAR(50),
    num_cartao VARCHAR(50),
    num_telemovel VARCHAR(50),
    descricao_extra TEXT,
    FOREIGN KEY (numero_contrato) REFERENCES clientes(numero_contrato) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 5. Pontos de Ronda
CREATE TABLE clientes_rondas_pontos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    numero_contrato VARCHAR(50),
    ordem INT, 
    nome_ponto VARCHAR(100), 
    descricao_local VARCHAR(255),
    FOREIGN KEY (numero_contrato) REFERENCES clientes(numero_contrato) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 6. Documentos
CREATE TABLE clientes_docs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    numero_contrato VARCHAR(50),
    titulo VARCHAR(100),
    tipo_doc VARCHAR(50),
    nome_ficheiro VARCHAR(255),
    data_upload DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (numero_contrato) REFERENCES clientes(numero_contrato) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 7. Log Equipamentos
CREATE TABLE log_equipamentos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    numero_contrato VARCHAR(50),
    data_hora DATETIME,
    user VARCHAR(50),
    acao TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 8. Adendas
CREATE TABLE clientes_adendas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    numero_contrato VARCHAR(50),
    numero_adenda VARCHAR(50),
    data_adenda DATE,
    estado_adenda VARCHAR(50) DEFAULT 'Por Assinar', 
    descricao TEXT,
    data_registo DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (numero_contrato) REFERENCES clientes(numero_contrato) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE conta_corrente (
    zona VARCHAR(50),
    valor_divida DECIMAL(10,2) DEFAULT 0.00,
    valor_credito DECIMAL(10,2) DEFAULT 0.00,
    total_pago DECIMAL(10,2) DEFAULT 0.00,
    dispensas_pagas TEXT,
    PRIMARY KEY (zona) -- O SEGREDO: Chave Primária impede duplicados
);


-- 1. Tabela para o Registo Geral de Entrada (O "Envelope" ou a Entrega)
CREATE TABLE correspondencia_entrada (
    id INT AUTO_INCREMENT PRIMARY KEY,
    data_rececao DATE NOT NULL,
    hora_rececao TIME NOT NULL,
    remetente VARCHAR(255) NOT NULL,
    tipo_entrega VARCHAR(50), -- Ex: CTT Normal, CTT Registado, Em Mão, Estafeta
    n_tracking VARCHAR(100), -- Código de rastreio se houver
    recebido_por VARCHAR(100), -- Utilizador que registou
    observacoes TEXT,
    data_registo DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 2. Tabela para os Itens dentro da Correspondência (Os vários contratos, faturas, etc.)
CREATE TABLE correspondencia_entrada_itens (
    id INT AUTO_INCREMENT PRIMARY KEY,
    id_entrada INT NOT NULL,
    tipo_documento VARCHAR(100), -- Ex: Contrato, Fatura, Carta, Notificação
    referencia VARCHAR(255), -- Ex: Nome do Funcionário, Nº Cliente, Nº Fatura
    descricao TEXT,
    FOREIGN KEY (id_entrada) REFERENCES correspondencia_entrada(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 3. Tabela para o Registo de Saídas (O que enviamos)
CREATE TABLE correspondencia_saida (
    id INT AUTO_INCREMENT PRIMARY KEY,
    data_envio DATE NOT NULL,
    destinatario VARCHAR(255) NOT NULL,
    tipo_envio VARCHAR(50), -- Ex: CTT Normal, CTT Azul, CTT Registado, Email
    conteudo TEXT NOT NULL, -- O que foi enviado
    n_tracking VARCHAR(100),
    custo DECIMAL(10,2), -- Opcional: Custo do envio
    enviado_por VARCHAR(100),
    data_registo DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE dispensa_fardamento (
    ndispensa INT(10) PRIMARY KEY AUTO_INCREMENT,
    zona VARCHAR(50),
    funcionario VARCHAR(100),
    nif INT(9),
    local_trabalho VARCHAR(100),
    data DATE,
    estado VARCHAR(50),
    disponibilizado VARCHAR(50),
    total DECIMAL(10,2),
    notas TEXT
);

-- =========================================================
-- TABELA: DECLARAÇÕES DE FARDAMENTO POR ASSINAR
-- =========================================================
CREATE TABLE IF NOT EXISTS declaracoes_pendentes (
    id INT(10) PRIMARY KEY AUTO_INCREMENT,
    ndispensa INT(10) NOT NULL,
    nif INT(9) NOT NULL,
    funcionario VARCHAR(100),
    zona VARCHAR(50),
    data_dispensa DATE,
    data_registo DATETIME DEFAULT CURRENT_TIMESTAMP,
    estado ENUM('Falta assinar', 'Assinado') DEFAULT 'Falta assinar',
    data_assinatura DATETIME NULL,
    assinatura_recolhida_por VARCHAR(50) NULL,
    notas TEXT NULL,
    FOREIGN KEY (ndispensa) REFERENCES dispensa_fardamento(ndispensa) ON DELETE CASCADE,
    INDEX idx_estado (estado),
    INDEX idx_nif (nif),
    INDEX idx_zona (zona)
);

-- 1. Postos de Trabalho (Service Locations)
CREATE TABLE escalas_postos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(100) NOT NULL,
    cliente_id VARCHAR(50) DEFAULT NULL, -- numero_contrato dos clientes
    ativo TINYINT(1) DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 2. Staff Fixo (Persistência entre meses)
CREATE TABLE escalas_postos_staff (
    id INT AUTO_INCREMENT PRIMARY KEY,
    posto_id INT NOT NULL,
    nif VARCHAR(9) NOT NULL,
    nome_funcionario VARCHAR(255),
    valido_desde DATE NOT NULL, -- Primeiro dia do mês em que entrou
    valido_ate DATE DEFAULT NULL,  -- Último dia do mês em que saiu (NULL = Ativo)
    FOREIGN KEY (posto_id) REFERENCES escalas_postos(id) ON DELETE CASCADE,
    INDEX (posto_id, nif)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 3. Templates de Turnos (Definições Atuais)
CREATE TABLE escalas_turnos_config (
    id INT AUTO_INCREMENT PRIMARY KEY,
    posto_id INT NOT NULL,
    nome VARCHAR(50) NOT NULL,
    hora_entrada TIME NOT NULL,
    hora_saida TIME NOT NULL,
    ativo TINYINT(1) DEFAULT 1,
    FOREIGN KEY (posto_id) REFERENCES escalas_postos(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 4. Cabeçalho das Escalas
CREATE TABLE escalas_cabecalho (
    id INT AUTO_INCREMENT PRIMARY KEY,
    posto_id INT NOT NULL,
    mes INT NOT NULL,
    ano INT NOT NULL,
    estado ENUM('Rascunho', 'Publicada', 'Fechada') DEFAULT 'Rascunho',
    data_criacao DATETIME DEFAULT CURRENT_TIMESTAMP,
    criado_por VARCHAR(100),
    FOREIGN KEY (posto_id) REFERENCES escalas_postos(id) ON DELETE CASCADE,
    UNIQUE KEY unique_escala (posto_id, mes, ano)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 5. Dados Históricos (Congelamento de horários)
CREATE TABLE escalas_dados (
    id INT AUTO_INCREMENT PRIMARY KEY,
    escala_id INT NOT NULL,
    dia INT NOT NULL,
    nif_funcionario VARCHAR(9) NOT NULL,
    nome_funcionario VARCHAR(255),
    turno_nome VARCHAR(50), -- Nome do turno na altura
    hora_entrada TIME,      -- Hora na altura (não muda se o template mudar)
    hora_saida TIME,        -- Hora na altura
    FOREIGN KEY (escala_id) REFERENCES escalas_cabecalho(id) ON DELETE CASCADE,
    INDEX (nif_funcionario, dia)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 6. Logs de Alterações
CREATE TABLE escalas_logs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    escala_id INT,
    utilizador VARCHAR(100),
    acao VARCHAR(255),
    detalhes TEXT,
    data_hora DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (escala_id) REFERENCES escalas_cabecalho(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


CREATE TABLE IF NOT EXISTS fardamento (
    tipo VARCHAR(30),
    tamanho VARCHAR(5),
    quantidade INT(5),
    PRIMARY KEY (tipo, tamanho)
);

CREATE TABLE fardamento_tamanhos (
    tipo VARCHAR(30),
    tamanho VARCHAR(5),
    ordem INT,
    PRIMARY KEY (tipo, tamanho)
);


CREATE TABLE IF NOT EXISTS `feriados` (
  `data` date NOT NULL,
  `descricao` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`data`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Contactos de Funcionários ! esta nao tinha no meu ficheiro, foi por backup
CREATE TABLE IF NOT EXISTS `funcionarios_contactos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `funcionario_id` int(11) NOT NULL,
  `tipo` enum('Pessoal','Emergencia','Familiar','Outro') DEFAULT 'Pessoal',
  `numero` varchar(20) NOT NULL,
  `obs` varchar(100) DEFAULT NULL,
  `ordem` int(11) DEFAULT 1,
  `data_atualizacao` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE geral_log (
		id INT AUTO_INCREMENT PRIMARY KEY,
		dia VARCHAR(10),
		hora VARCHAR(5),
		user VARCHAR(20),
		log TEXT
		);

-- Novas tabelas normalizadas
CREATE TABLE IF NOT EXISTS `itens_dispensa` (
  `ndispensa` int(10) NOT NULL,
  `tipo` varchar(30) NOT NULL,
  `tamanho` varchar(5) NOT NULL,
  `quantidade` int(5) DEFAULT NULL,
  `preco` decimal(6,2) DEFAULT NULL,
  PRIMARY KEY (`ndispensa`,`tipo`,`tamanho`),
  KEY `idx_itens_dispensa_lookup` (`tipo`,`tamanho`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


	create table log(
		nlog int(10) primary key auto_increment,
		ip varchar(20),
		data varchar(10),
		hora varchar(10),
		try text
		);
	CREATE TABLE log_ausencias (
    id_log INT AUTO_INCREMENT PRIMARY KEY,
    nif VARCHAR(20) NOT NULL,
    user VARCHAR(50),
    data_hora DATETIME DEFAULT CURRENT_TIMESTAMP,
    acao VARCHAR(50), -- Ex: "Inserir", "Remover", "Ajuste"
    tipo_ausencia VARCHAR(50),
    detalhes TEXT
);
CREATE TABLE log_clientes (
	id_log INT AUTO_INCREMENT PRIMARY KEY,
	n_contrato VARCHAR(10),
	dia varchar(10),
	hora varchar(5),
	user VARCHAR(20),
	log TEXT
	);

CREATE TABLE log_conta_corrente (
    id_log INT AUTO_INCREMENT PRIMARY KEY,
    zona VARCHAR(50),
    ndispensa INT(10),
    nretoma INT(10),
    data DATE,
    log TEXT
);
-- 7. Log Equipamentos
CREATE TABLE log_equipamentos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    numero_contrato VARCHAR(50),
    data_hora DATETIME,
    user VARCHAR(50),
    acao TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

	CREATE TABLE log_orcamentos (
		id_log INT AUTO_INCREMENT PRIMARY KEY,
		n_orcamento VARCHAR(10),
		dia varchar(10),
		hora varchar(5),
		user VARCHAR(20),
		log TEXT
		);


-
-- Tabela de Logs de Orçamentos
CREATE TABLE log_orcamentos_geral (
    id INT AUTO_INCREMENT PRIMARY KEY,
    id_orcamento INT,
    data DATETIME DEFAULT CURRENT_TIMESTAMP,
    user VARCHAR(50),
    acao TEXT,
    FOREIGN KEY (id_orcamento) REFERENCES orcamentos(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE posse_funcionario (
    nif INT(9),
    tipo VARCHAR(30),
    tamanho VARCHAR(5),
    quantidade INT(5),
    PRIMARY KEY (nif, tipo, tamanho)
);
CREATE TABLE precario (
    artigo VARCHAR(30),
    preco DECIMAL(6,2),
    PRIMARY KEY (artigo)
);

-- Adendas de Processos ! Nao tinha
CREATE TABLE IF NOT EXISTS `processo_adendas` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_processo` int(11) DEFAULT NULL,
  `numero_adenda` varchar(50) DEFAULT NULL,
  `data_adenda` date DEFAULT NULL,
  `estado_adenda` varchar(50) DEFAULT 'Por Assinar',
  `descricao` text DEFAULT NULL,
  `data_registo` datetime DEFAULT current_timestamp(),
  PRIMARY KEY (`id`),
  KEY `id_processo` (`id_processo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabela registo_conta_corrente (transações financeiras)
CREATE TABLE IF NOT EXISTS registo_conta_corrente (
    ndispensa INT(10),
    zona VARCHAR(50),
    total DECIMAL(10,2),
    estado VARCHAR(15),
    notas TEXT,
    data DATE,
    PRIMARY KEY (ndispensa)
);

CREATE TABLE `registo_orcamentos` (
  `n_orcamento` varchar(15) NOT NULL,
  `ano` int(11) DEFAULT NULL,
  `data` varchar(10) DEFAULT NULL,
  `zona` varchar(50) DEFAULT NULL,
  `nome_cliente` varchar(100) DEFAULT NULL,
  `nif` int(9) DEFAULT NULL,
  `nome_servico` varchar(100) DEFAULT NULL,
  `morada_servico` varchar(100) DEFAULT NULL,
  `especialidades` varchar(50) DEFAULT NULL,
  `n_elementos` int(5) DEFAULT NULL,
  `info` text DEFAULT NULL,
  `valor` varchar(10) DEFAULT NULL,
  `estado` varchar(10) DEFAULT NULL,
  `status` varchar(9) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
ALTER TABLE `registo_orcamentos`
  ADD PRIMARY KEY (`n_orcamento`);


CREATE TABLE retoma_fardamento (
    nretoma INT(10) PRIMARY KEY AUTO_INCREMENT,
    ndispensa INT(10), 
    zona VARCHAR(50),
    funcionario VARCHAR(100),
    nif INT(9),
    local_trabalho VARCHAR(100),
    data DATE,
    pagamento VARCHAR(50), -- 'Reembolsar', 'Sem devolução'
    disponibilizado VARCHAR(50),
    retomado_por VARCHAR(50),
    total DECIMAL(10,2) DEFAULT 0.00,
    notas TEXT
);
CREATE TABLE itens_retoma (
    nretoma INT(10),
    tipo VARCHAR(30),
    tamanho VARCHAR(5),
    quantidade INT(5),
    destruido INT(5),
    PRIMARY KEY (nretoma, tipo, tamanho),
    FOREIGN KEY (nretoma) REFERENCES retoma_fardamento(nretoma) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS status_plataforma_rh (
  id_processo INT(11) NOT NULL,
  status VARCHAR(50) DEFAULT 'Não',
  PRIMARY KEY (id_processo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 3. STOCK (COM TIPO DE CONTROLO)
CREATE TABLE stock_oficina (
    id INT AUTO_INCREMENT PRIMARY KEY,
    produto VARCHAR(100), 
    quantidade_atual DECIMAL(10,2),
    unidade VARCHAR(20), 
    tipo_controlo ENUM('Fluido', 'Unidade') DEFAULT 'Unidade', 
    quantidade_minima INT,
    localizacao VARCHAR(50),
    ultima_atualizacao DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE stock_zona (
    zona VARCHAR(50),
    tipo VARCHAR(30),
    tamanho VARCHAR(5),
    quantidade INT(5),
    PRIMARY KEY (zona, tipo, tamanho)
);

-- 2. VIATURAS (TODOS OS CAMPOS MANTIDOS)
CREATE TABLE viaturas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    matricula VARCHAR(8) UNIQUE NOT NULL,
    marca VARCHAR(50),
    modelo VARCHAR(50),
    ano INT(4),
    n_quadro VARCHAR(100), 
    cor VARCHAR(30),
    kms INT(10) DEFAULT 0,
    estado VARCHAR(20) DEFAULT 'Disponivel',
    
    -- Admin
    data_compra DATE,
    valor_compra DECIMAL(10,2),
    fornecedor_compra VARCHAR(100),
    
    -- Legal
    seguro_companhia VARCHAR(100),
    seguro_apolice VARCHAR(100),
    seguro_validade DATE,
    iuc_validade DATE,
    proxima_inspecao_data DATE,
    
    -- Mecânica
    proxima_revisao_kms INT(10),
    proxima_revisao_data DATE,

    -- GPS
    gps_tipo ENUM('Nenhum', 'Contrato', 'Proprio') DEFAULT 'Nenhum',
    gps_telemovel VARCHAR(20),
    gps_fidelizacao DATE,
    gps_marca VARCHAR(50),
    gps_modelo VARCHAR(50),
    gps_imei VARCHAR(50),
    gps_data_compra DATE,
    gps_garantia_ate DATE,
    
    notas TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

- 5. MANUTENÇÕES
CREATE TABLE manutencoes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    viatura_id INT,
    user_username VARCHAR(50),
    responsavel_nome VARCHAR(100),
    tipo ENUM('Preventiva', 'Corretiva', 'Pneus', 'Inspecao', 'Sinistro', 'Legal') DEFAULT 'Preventiva',
    data_manutencao DATE,
    kms_na_manutencao INT,
    oficina_fornecedor VARCHAR(100),
    descricao_detalhada TEXT,
    pecas_aplicadas TEXT,
    custo_total DECIMAL(10,2),
    fatura_anexo VARCHAR(255),
    FOREIGN KEY (viatura_id) REFERENCES viaturas(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Tabela Principal de Orçamentos (Versão Final Corrigida)
CREATE TABLE orcamentos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    numero_orcamento VARCHAR(20), -- Ex: 1/2025
    sequencial INT,               -- Ex: 1 (Usado para gerar o próximo número)
    ano INT,                      -- Ex: 2025
    data_registo DATE,
    
    -- Dados Cliente
    cliente_nome VARCHAR(255),
    cliente_nif VARCHAR(20),
    cliente_responsavel VARCHAR(100),
    cliente_email VARCHAR(100),
    cliente_telefone VARCHAR(50),
    cliente_morada TEXT,
    
    -- Dados do Serviço
    zona VARCHAR(50),
    local_servico VARCHAR(255),
    tipo_servico VARCHAR(100), -- Vigilância, Portaria, etc.
    regime VARCHAR(100),       -- Horário
    n_elementos INT DEFAULT 0,
    
    -- Dados Financeiros
    valor DECIMAL(10,2) DEFAULT 0.00,
    unidade VARCHAR(50),       -- Ex: p/ Mês, p/ Hora, Global
    
    -- Gestão e Estado
    estado ENUM('Em Aberto', 'Adjudicado', 'Não Adjudicado', 'Sem Resposta', 'Cancelado') DEFAULT 'Em Aberto',
    data_validade DATE,
    motivo_rejeicao TEXT,
    obs_internas TEXT,
    criado_por VARCHAR(100),
    
    INDEX (ano),
    INDEX (estado)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 4. VERIFICAÇÕES (COM LOG DE STOCK CONSUMIDO)
CREATE TABLE verificacoes_frota (
    id INT AUTO_INCREMENT PRIMARY KEY,
    viatura_id INT,
    user_username VARCHAR(50),
    responsavel_nome VARCHAR(100),
    data_hora DATETIME DEFAULT CURRENT_TIMESTAMP,
    kms_atuais INT,
    
    -- Checklist Técnica
    estado_oleo VARCHAR(20) DEFAULT 'OK',
    estado_agua VARCHAR(20) DEFAULT 'OK',
    estado_escovas VARCHAR(20) DEFAULT 'OK',
    estado_pneus VARCHAR(20) DEFAULT 'OK',
    estado_luzes VARCHAR(20) DEFAULT 'OK',
    
    -- Estado Limpeza
    limpeza_interior VARCHAR(20) DEFAULT 'OK',
    limpeza_exterior VARCHAR(20) DEFAULT 'OK',
    
    -- Danos
    novos_danos CHAR(3) DEFAULT 'Nao',
    descricao_danos TEXT,
    observacoes TEXT,
    
    -- Log Stock (Texto descrevendo o que acabou: "Acabou garrafa Limpa Vidros")
    stock_consumido_log TEXT,
    
    FOREIGN KEY (viatura_id) REFERENCES viaturas(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;








-- IMPORTANTE, CORRIGE ERROS NA TABELA DE RETOMAS
-- ===================================================================
-- CORREÇÕES CRÍTICAS - MÓDULO DE FARDAMENTO
-- Executar ANTES de usar os ficheiros PHP corrigidos
-- ===================================================================

-- 1. ADICIONAR COLUNA PREÇO EM ITENS_RETOMA
-- Permite rastrear o valor dos itens retomados para auditorias
ALTER TABLE itens_retoma 
ADD COLUMN preco DECIMAL(6,2) DEFAULT 0.00 
AFTER destruido;

-- 2. CRIAR ÍNDICES PARA OTIMIZAR CONSULTAS
-- Melhora performance nas queries de saldo e histórico

-- Índice para buscar dispensas por NIF + Zona
CREATE INDEX idx_dispensa_nif_zona 
ON dispensa_fardamento(nif, zona, data);

-- Índice para buscar retomas por NIF + Zona
CREATE INDEX idx_retoma_nif_zona 
ON retoma_fardamento(nif, zona, data);

-- Índice para itens de dispensa (JOIN frequente)
CREATE INDEX idx_itens_dispensa_lookup 
ON itens_dispensa(tipo, tamanho);

-- Índice para itens de retoma (JOIN frequente)
CREATE INDEX idx_itens_retoma_lookup 
ON itens_retoma(tipo, tamanho);

-- 3. GARANTIR CHARSET UTF8 EM TODAS AS TABELAS RELEVANTES
-- Nota: Usando utf8 em vez de utf8mb4 para compatibilidade com PHP 7.3
ALTER TABLE dispensa_fardamento CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE itens_dispensa CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE retoma_fardamento CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE itens_retoma CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE conta_corrente CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE fardamento CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE precario CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE posse_funcionario CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE stock_zona CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;














-- Para a versão 1.1:
-- =============================================================
-- ATUALIZAÇÃO DA BASE DE DADOS - ESCALAS PROTEK
-- Executar este script para adicionar os novos campos
-- =============================================================

-- 1. Adicionar campos "letra" e "cor" à tabela escalas_postos_staff
ALTER TABLE escalas_postos_staff 
ADD COLUMN IF NOT EXISTS letra VARCHAR(2) DEFAULT NULL AFTER nome_funcionario,
ADD COLUMN IF NOT EXISTS cor VARCHAR(10) DEFAULT '#e2e8f0' AFTER letra;

-- 2. Adicionar campo "turno_id" à tabela escalas_dados (referência ao turno)
ALTER TABLE escalas_dados 
ADD COLUMN IF NOT EXISTS turno_id INT DEFAULT NULL AFTER escala_id;

-- 3. Criar índice para melhor performance
CREATE INDEX IF NOT EXISTS idx_escalas_dados_turno ON escalas_dados(turno_id, dia);

-- 4. Garantir que a tabela de feriados existe
CREATE TABLE IF NOT EXISTS feriados (
    data DATE NOT NULL PRIMARY KEY,
    descricao VARCHAR(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;



-- 6. Atualizar letras existentes (primeira letra do nome) se ainda não tiverem letra
UPDATE escalas_postos_staff 
SET letra = UPPER(LEFT(nome_funcionario, 1)) 
WHERE letra IS NULL OR letra = '';

-- =============================================================
-- VERIFICAÇÃO
-- =============================================================
-- Executar estas queries para verificar se as alterações foram aplicadas:
-- DESCRIBE escalas_postos_staff;
-- DESCRIBE escalas_dados;
-- SELECT * FROM feriados ORDER BY data;

-- =============================================================
-- ATUALIZAÇÃO DA BASE DE DADOS - ESCALAS PROTEK V2
-- Executar este script para adicionar os novos campos
-- =============================================================

-- 1. Adicionar campos "letra" e "cor" à tabela escalas_postos_staff
ALTER TABLE escalas_postos_staff 
ADD COLUMN IF NOT EXISTS letra VARCHAR(2) DEFAULT NULL AFTER nome_funcionario,
ADD COLUMN IF NOT EXISTS cor VARCHAR(10) DEFAULT '#e2e8f0' AFTER letra;

-- 2. Adicionar campo "turno_id" à tabela escalas_dados (referência ao turno)
ALTER TABLE escalas_dados 
ADD COLUMN IF NOT EXISTS turno_id INT DEFAULT NULL AFTER escala_id;

-- 3. Adicionar campo "ordem_exibicao" à tabela escalas_turnos_config para permitir ordenação personalizada
ALTER TABLE escalas_turnos_config 
ADD COLUMN IF NOT EXISTS ordem_exibicao INT DEFAULT 0 AFTER ativo;

-- 4. Criar índice para melhor performance
CREATE INDEX IF NOT EXISTS idx_escalas_dados_turno ON escalas_dados(turno_id, dia);

-- 5. Garantir que a tabela de feriados existe
CREATE TABLE IF NOT EXISTS feriados (
    data DATE NOT NULL PRIMARY KEY,
    descricao VARCHAR(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 6. Inserir APENAS feriados móveis/variáveis de Portugal para 2025 e 2026
-- Os feriados fixos (01-01, 04-25, 05-01, etc.) são gerados por código
INSERT IGNORE INTO feriados (data, descricao) VALUES
-- 2025 (feriados móveis)
('2025-04-18', 'Sexta-feira Santa'),
('2025-04-20', 'Páscoa'),
('2025-06-19', 'Corpo de Deus'),
-- 2026 (feriados móveis)
('2026-04-03', 'Sexta-feira Santa'),
('2026-04-05', 'Páscoa'),
('2026-06-04', 'Corpo de Deus');

-- 7. Atualizar letras existentes (primeira letra do nome) se ainda não tiverem letra
UPDATE escalas_postos_staff 
SET letra = UPPER(LEFT(nome_funcionario, 1)) 
WHERE letra IS NULL OR letra = '';

-- 8. Atualizar ordem de exibição dos turnos existentes (por ordem de hora_entrada)
SET @ordem = 0;
UPDATE escalas_turnos_config 
SET ordem_exibicao = (@ordem := @ordem + 1)
WHERE ativo = 1
ORDER BY posto_id, hora_entrada;

-- =============================================================
-- VERIFICAÇÃO
-- =============================================================
-- Executar estas queries para verificar se as alterações foram aplicadas:
-- DESCRIBE escalas_postos_staff;
-- DESCRIBE escalas_dados;
-- DESCRIBE escalas_turnos_config;
-- SELECT * FROM feriados ORDER BY data;

-- Corrigir ENUM de estado para incluir 'Aberto' e 'Publicado'
ALTER TABLE escalas_cabecalho 
MODIFY COLUMN estado ENUM('Rascunho', 'Aberto', 'Publicado', 'Fechado') DEFAULT 'Rascunho';

-- Converter estados antigos para novos
UPDATE escalas_cabecalho SET estado = 'Publicado' WHERE estado = 'Publicada';