-- ============================================================================
-- DIAGNÓSTICO: Por que registros estão sendo ignorados na sincronização?
-- ============================================================================
-- Execute este script para investigar cada validação

-- 1. Dados extraídos da origem (amostras)
SELECT 
    '1. AMOSTRA DE DADOS EXTRAÍDOS' as diag,
    t.cdintegracao_empresa,
    t.cdplanocontabil,
    t.tpmovimento,
    t.dtmovimento,
    t.valor,
    t.cdcentrocusto
FROM temp_integracao_16_1 t
LIMIT 5;

-- 2. Verificar mapeamento de empresas
SELECT 
    '2. EMPRESAS MAPEADAS' as diag,
    COUNT(*) as total_linhas,
    COUNT(DISTINCT t.cdintegracao_empresa) as empresas_unicas,
    STRING_AGG(DISTINCT CAST(t.cdintegracao_empresa AS TEXT), ', ') as codigos_empresa
FROM temp_integracao_16_1 t;

-- 3. Verificar se as empresas existem no banco local
SELECT 
    '3. EMPRESAS ENCONTRADAS NO BANCO LOCAL' as diag,
    COUNT(*) as total,
    STRING_AGG(DISTINCT CAST(e.cdintegracao AS TEXT), ', ') as codigos_encontrados
FROM back.empresa e
WHERE e.cdintegracao IN (SELECT DISTINCT cdintegracao_empresa FROM temp_integracao_16_1)
AND e.flativo = 0;

-- 4. Empresas que NÃO foram encontradas
SELECT 
    '4. EMPRESAS NÃO ENCONTRADAS (problema!)' as diag,
    DISTINCT t.cdintegracao_empresa,
    COUNT(*) OVER (PARTITION BY t.cdintegracao_empresa) as qtd_registros
FROM temp_integracao_16_1 t
WHERE NOT EXISTS (
    SELECT 1 FROM back.empresa e 
    WHERE e.cdintegracao = t.cdintegracao_empresa
)
ORDER BY qtd_registros DESC;

-- 5. Validação de tpmovimento
SELECT 
    '5. TIPOS DE MOVIMENTO ENCONTRADOS' as diag,
    UPPER(TRIM(tpmovimento)) as tipo,
    COUNT(*) as qtd
FROM temp_integracao_16_1
GROUP BY UPPER(TRIM(tpmovimento));

-- 6. Validação de valores nulos
SELECT 
    '6. VALIDAÇÃO DE CAMPOS NULL' as diag,
    SUM(CASE WHEN cdintegracao_empresa IS NULL THEN 1 ELSE 0 END) as nulo_empresa,
    SUM(CASE WHEN cdplanocontabil IS NULL THEN 1 ELSE 0 END) as nulo_plano,
    SUM(CASE WHEN valor IS NULL THEN 1 ELSE 0 END) as nulo_valor,
    SUM(CASE WHEN tpmovimento IS NULL THEN 1 ELSE 0 END) as nulo_tipo,
    SUM(CASE WHEN dtmovimento IS NULL THEN 1 ELSE 0 END) as nulo_data,
    COUNT(*) as total_registros
FROM temp_integracao_16_1;

-- 7. Validação de datas
SELECT 
    '7. VALIDAÇÃO DE DATAS' as diag,
    MIN(dtmovimento) as data_minima,
    MAX(dtmovimento) as data_maxima,
    SUM(CASE WHEN dtmovimento < '2000-01-01'::DATE THEN 1 ELSE 0 END) as datas_invalidas
FROM temp_integracao_16_1;

-- 8. Verificação do JOIN com empresa
SELECT 
    '8. TESTE DO JOIN COM EMPRESA' as diag,
    COUNT(*) as total_apos_join
FROM temp_integracao_16_1 t
INNER JOIN back.empresa e ON e.cdintegracao = t.cdintegracao_empresa
WHERE e.cdempresa IS NOT NULL;

-- 9. Verificação do JOIN com exercício
SELECT 
    '9. TESTE DO JOIN COM EXERCÍCIO' as diag,
    COUNT(*) as total_apos_join_exercicio
FROM temp_integracao_16_1 t
INNER JOIN back.empresa e ON e.cdintegracao = t.cdintegracao_empresa
INNER JOIN back.exercicio ex ON ex.cdempresa = e.cdempresa AND ex.anoref = 2026 AND ex.flativo = 0
WHERE e.cdempresa IS NOT NULL;

-- 10. Resultado após todas as validações (SEM INSERT)
SELECT 
    '10. RESULTADO FINAL (quantos passariam em todas validações)' as diag,
    COUNT(DISTINCT ON (t.cdintegracao_empresa, t.cdplanocontabil, t.tpmovimento, t.dtmovimento)) as total_que_passariam
FROM temp_integracao_16_1 t
INNER JOIN back.empresa e ON e.cdintegracao = t.cdintegracao_empresa
INNER JOIN back.exercicio ex ON ex.cdempresa = e.cdempresa AND ex.anoref = 2026 AND ex.flativo = 0
WHERE t.cdintegracao_empresa IS NOT NULL
  AND e.cdempresa IS NOT NULL
  AND t.cdplanocontabil IS NOT NULL
  AND t.tpmovimento IN ('D', 'C')
  AND t.dtmovimento >= '2000-01-01'::DATE
  AND t.valor IS NOT NULL;
