-- Tabela de mapeamento dinâmico de campos
CREATE TABLE IF NOT EXISTS back.integracao_mapeamento (
    cdmapeamento SERIAL PRIMARY KEY,
    cdintegracao INTEGER NOT NULL,
    nome_campo_helm VARCHAR(100) NOT NULL,
    nome_campo_origem VARCHAR(150),
    tipo_mapeamento VARCHAR(20) NOT NULL,
    valor_constante VARCHAR(255),
    expressao_sql TEXT,
    configuracao_json JSONB,
    flobrigatorio SMALLINT DEFAULT 0,
    flativo SMALLINT DEFAULT 1,
    dtcriacao TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW()
);

COMMENT ON TABLE back.integracao_mapeamento IS 'Configuração de mapeamento de campos ERP → HELM (realizado)';
COMMENT ON COLUMN back.integracao_mapeamento.tipo_mapeamento IS 'direto | constante | expressao | lookup | json';

CREATE INDEX IF NOT EXISTS idx_mapeamento_integracao
    ON back.integracao_mapeamento (cdintegracao, flativo);

-- Contexto obrigatório por integração (empresa e data na origem)
CREATE TABLE IF NOT EXISTS back.integracao_contexto (
    cdcontexto SERIAL PRIMARY KEY,
    cdintegracao INTEGER NOT NULL,
    campo_empresa_origem VARCHAR(150) NOT NULL,
    campo_data_origem VARCHAR(150) NOT NULL,
    flativo SMALLINT DEFAULT 1,
    dtcriacao TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW()
);

COMMENT ON TABLE back.integracao_contexto IS 'Contexto por integração: campo de empresa e campo de data na origem';
CREATE UNIQUE INDEX IF NOT EXISTS uq_contexto_integracao
    ON back.integracao_contexto (cdintegracao) WHERE flativo = 1;
