Class ColunasConteudo
O BulkUpserter consome estas listas para gerar SQL parametrizado (cláusulas
SET, WHERE IS DISTINCT FROM e ON CONFLICT). Listas separadas por
tabela e papel (UK natural × colunas de conteúdo) — a alteração em qualquer uma delas
impacta diretamente o predicado de diff e exige revisão das migrations correspondentes.
Conformidade com o schema deve ser garantida por teste de integração que compara
FATURAMENTO_UK e MOVIMENTO_UK com pg_constraint
(spec § 9.5 — runbook obrigatório se a chave for alterada).
-
Field Summary
FieldsModifier and TypeFieldDescriptionbi_faturamento— 22 colunas comparadas noWHERE IS DISTINCT FROMdo UPSERT.bi_faturamento— 10 colunas da chave natural (UKuq_bi_faturamento_naturalcomNULLS NOT DISTINCT).bi_movimento— 11 colunas comparadas noWHERE IS DISTINCT FROMdo UPSERT.bi_movimento— 16 colunas da chave do "evento físico" (semseq_dentro_grupo).bi_movimento— 17 colunas da chave natural (UKuq_bi_movimento_natural).Subconjunto deFATURAMENTOeMOVIMENTOcujo valor de entrada "vazio" —NULL, string vazia ou0— não sobrescreve o valor já gravado no UPSERT (extensão da spec 004; ver javadoc doBulkUpserter).Sentinelas textuais de "vazio na entrada" por coluna — usadas peloBulkUpserter.valorEfetivo(String, String)para encadearNULLIFs e proteger contra sobrescrita por placeholders do ERP ('SEM MARCA'/'SEM MODELO'). -
Method Summary
-
Field Details
-
FATURAMENTO
bi_faturamento— 22 colunas comparadas noWHERE IS DISTINCT FROMdo UPSERT. Tudo que não está emFATURAMENTO_UKnem éidouserie(decisão § 4.2.a: série de NF é praticamente imutável; mudanças nela não disparam UPDATE, evitando churn desnecessário). -
FATURAMENTO_UK
-
MOVIMENTO
bi_movimento— 11 colunas comparadas noWHERE IS DISTINCT FROMdo UPSERT. Tudo que não está emMOVIMENTO_UK(que já inclui as 16 cols da chave + o desempateseq_dentro_grupo) nem éid. -
MOVIMENTO_UK
-
MOVIMENTO_CHAVE_GRUPO
bi_movimento— 16 colunas da chave do "evento físico" (semseq_dentro_grupo). Usada peloBulkUpserterao calcular o seq em Java (Map+AtomicInteger) antes do COPY. -
PRESERVAR_SE_VAZIO_NA_ENTRADA
Subconjunto deFATURAMENTOeMOVIMENTOcujo valor de entrada "vazio" —NULL, string vazia ou0— não sobrescreve o valor já gravado no UPSERT (extensão da spec 004; ver javadoc doBulkUpserter).São os cinco campos de cadastro de veículo/frota. A planilha da origem com frequência não os traz preenchidos, e um
SET col = EXCLUDED.colcego apagaria correções de cadastro aplicadas direto no banco. OBulkUpserterresolve isso aplicandoCOALESCE(NULLIF(EXCLUDED.col, <sentinela>), <tabela>.col)tanto na cláusulaSETquanto noWHERE IS DISTINCT FROM.Consequência: uma vez preenchidos, esses campos só podem ser limpos ou zerados via script no banco — nunca por um upload de Excel.
-
SENTINELAS_TEXTO
Sentinelas textuais de "vazio na entrada" por coluna — usadas peloBulkUpserter.valorEfetivo(String, String)para encadearNULLIFs e proteger contra sobrescrita por placeholders do ERP ('SEM MARCA'/'SEM MODELO').A primeira sentinela é sempre
""(string vazia); placeholders específicos vêm depois. Spec 006 — Req. 7 (reforço da preservação).Colunas numéricas (
ano_construcao,ano_modelo) não aparecem aqui — usamNULLIF(col, 0)noBulkUpserter.
-