-- ============================================================
-- Migração: fichas de Aditamento à Proposta de Adesão (LGPD)
-- Data   : 2026-09-02
-- Seguro : idempotente — CREATE TABLE IF NOT EXISTS.
--          O sistema também cria esta tabela sozinho na primeira
--          vez que /adesao ou /adesoes é acessado (Adesao::ensureSchema);
--          este arquivo serve para execução manual/documentação.
-- ============================================================
--
-- Substitui o preenchimento à mão do PDF
-- https://aafc.org.br/Jornal_Senior/01-SALARIO_EM_RISCO.pdf (página 3).
-- O associado preenche em /adesao (público, sem login), imprime a ficha
-- já preenchida, assina à mão e devolve à AAFC.
--
-- Esta tabela é a ÁREA DE ESPERA: nada daqui entra em `contatos`
-- automaticamente. A equipe confere em /adesoes e decide campo a campo
-- o que aplicar no cadastro (status: pendente → aplicado | descartado).
--
-- Por que tabela própria e não gravar direto em `contatos`:
--   * o texto é digitado pelo próprio associado (erro de digitação não
--     contamina a base);
--   * a ficha é um DOCUMENTO — precisa ficar guardada como foi enviada,
--     mesmo depois que o cadastro mudar;
--   * a ficha tem campos que não existem em `contatos` (RG, telefone fixo,
--     matrícula na empresa, curador, autorização Vivest).

CREATE TABLE IF NOT EXISTS adesoes (
    id                 INT UNSIGNED NOT NULL AUTO_INCREMENT,

    -- Protocolo (AD-2026-000123) e chave de reimpressão.
    -- protocolo é NULL no INSERT e preenchido logo depois a partir do id —
    -- por isso a UNIQUE aceita NULL (MySQL/MariaDB permitem vários NULLs).
    protocolo          VARCHAR(20)  NULL,
    chave_impressao    VARCHAR(32)  NOT NULL,
    status             VARCHAR(20)  NOT NULL DEFAULT 'pendente',

    -- Cabeçalho da ficha (as caixinhas do alto do papel)
    tipo_beneficio     VARCHAR(12)  NULL,      -- aposentado | pensionista
    plano              VARCHAR(14)  NULL,      -- 4819 | suplementado
    aafc               VARCHAR(40)  NULL,      -- matrícula/registro na AAFC
    emp_empresa        VARCHAR(10)  NULL,      -- Nº da matrícula na empresa: Empresa
    emp_matricula      VARCHAR(20)  NULL,      -- ...Matrícula
    emp_digito         VARCHAR(2)   NULL,      -- ...Dígito

    -- Identificação
    nome               VARCHAR(160) NOT NULL,
    sexo               VARCHAR(1)   NULL,      -- M | F
    cpf                VARCHAR(11)  NULL,      -- 11 dígitos, sem pontuação
    rg                 VARCHAR(20)  NULL,
    data_nascimento    DATE         NULL,

    -- Endereço
    cep                VARCHAR(9)   NULL,      -- 00000-000
    logradouro         VARCHAR(255) NULL,
    bairro             VARCHAR(120) NULL,
    cidade             VARCHAR(120) NULL,
    estado             VARCHAR(2)   NULL,

    -- Contato
    celular            VARCHAR(20)  NULL,      -- E.164 (+5511999998888)
    telefone           VARCHAR(20)  NULL,      -- fixo; não existe em `contatos`
    email              VARCHAR(320) NULL,

    -- Curador (se houver)
    curador_nome       VARCHAR(160) NULL,
    curador_cpf        VARCHAR(11)  NULL,

    -- Autorização à Vivest (desconto de 0,5% em folha)
    autoriza_vivest    TINYINT(1)   NOT NULL DEFAULT 0,
    assinatura_cidade  VARCHAR(120) NULL,
    assinatura_data    DATE         NULL,

    -- Termo de consentimento LGPD (1 = Sim, 0 = Não, NULL = não respondeu)
    lgpd_associativo   TINYINT(1)   NULL,      -- fins associativos (Estatuto)
    lgpd_publicacoes   TINYINT(1)   NULL,      -- receber publicações e eventos
    lgpd_parceiros     TINYINT(1)   NULL,      -- compartilhar com parceiros

    -- Conferência pela equipe
    contact_id         INT UNSIGNED NULL,      -- contato vinculado em `contatos`
    ficha_assinada_em  DATETIME     NULL,      -- quando o papel assinado chegou
    ficha_assinada_via VARCHAR(30)  NULL,      -- whatsapp | email | regional | sede | correio
    aplicado_em        DATETIME     NULL,
    aplicado_por       INT          NULL,
    observacoes        TEXT         NULL,

    -- Trilha do envio
    ip                 VARCHAR(45)  NULL,
    user_agent         VARCHAR(255) NULL,
    criado_em          DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    atualizado_em      DATETIME     NULL ON UPDATE CURRENT_TIMESTAMP,

    PRIMARY KEY (id),
    UNIQUE KEY uq_adesoes_protocolo (protocolo),
    KEY idx_adesoes_status (status, criado_em),
    KEY idx_adesoes_cpf (cpf),
    KEY idx_adesoes_matricula (emp_matricula),
    KEY idx_adesoes_contact (contact_id),
    KEY idx_adesoes_criado (criado_em)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Não há FOREIGN KEY para `contatos` de propósito: a ficha é um documento e
-- deve sobreviver a merges/exclusões de contato. O vínculo é conferido no
-- código (Adesao::sugerirContato / vincular).

-- Verificação pós-migração ------------------------------------
SELECT
    COUNT(*)                                          AS total,
    SUM(status = 'pendente')                          AS pendentes,
    SUM(status = 'aplicado')                          AS aplicadas,
    SUM(status = 'descartado')                        AS descartadas,
    SUM(ficha_assinada_em IS NOT NULL)                AS com_papel_assinado
FROM adesoes;
