Corrige docs/13: roteiro real (Copy), não upload de amostra (inventado)

Confirmado contra prints reais do App Builder: o wizard de criação só
oferece 'From scratch' ou 'As copy of an existing Data Load
Definition' — não existe tela de upload de amostra para autodetectar
colunas, como eu tinha documentado antes sem verificar. Corrige o
roteiro pra seguir exatamente as telas reais (Method -> Application ->
As Copy, renomeando DL_TECH_CMDB_V1 -> DL_TECH_CMDB_V2 e
DL_TECH_VULNERABILIDADE_V2 -> DL_TECH_VULNERABILIDADE_V3 na mesma
tela). Marca explicitamente onde o roteiro ainda não está confirmado
(tela pós-'Copy Data Load Definition') em vez de continuar
adivinhando. Reposiciona os templates/*.xlsx: servem para testar a
carga depois de pronta, não para criar o perfil.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-09 19:23:17 -03:00
parent 0e7d75db27
commit 8ef36eb1cc
2 changed files with 53 additions and 26 deletions

View File

@@ -43,16 +43,19 @@ teste — a menos que você peça explicitamente o contrário.
(bloco grande) foi pulado na primeira passada — o checkpoint de compilação deu `VALID`
porque a view *antiga* (46 colunas) já era válida antes. Resolvido rodando o bloco
explicitamente; segunda checagem confirmou as 81 colunas.
- [ ] **Mapeamento pronto + templates de amostra prontos** (ver
[docs/13-v2-perfis-carga.html](docs/13-v2-perfis-carga.html) e `templates/`) — falta criar
os dois perfis no App Builder (uma vez, seu acesso, não do cliente — upload dos templates de
amostra, não preenchimento campo a campo) e depois gerar um export completo novo da
Application 100 (captura os perfis automaticamente, com IDs corretos). O cliente só importa
esse export, nunca toca em Data Load Definitions — mesmo fluxo de sempre. **Achado
importante:** essas definições vivem dentro de `sql/02_ampminsights_apex_app.sql` via API
interna do APEX (`wwv_flow_imp_shared`) — não escrever isso à mão fora de um import
completo, risco de corromper os Shared Components. `RAW_JSON` deliberadamente fora do
escopo deste item — depende do item de staging abaixo.
- [ ] **Em andamento, roteiro sendo confirmado tela a tela** (ver
[docs/13-v2-perfis-carga.html](docs/13-v2-perfis-carga.html)) — mapeamento de colunas
pronto; passo a passo real do App Builder confirmado até "Copy Data Load Definition"
(método = cópia de `DL_TECH_CMDB_V1`/`DL_TECH_VULNERABILIDADE_V2`, renomeadas pra
`DL_TECH_CMDB_V2`/`DL_TECH_VULNERABILIDADE_V3` — **não** "upload de amostra", isso foi um
chute meu já corrigido). Falta confirmar a tela seguinte (adicionar as colunas novas na
cópia) antes de completar o roteiro. Depois de pronto: exportar a Application 100 de novo
(captura os perfis com IDs corretos) — o cliente só importa esse export, nunca toca em Data
Load Definitions. **Achado importante:** essas definições vivem dentro de
`sql/02_ampminsights_apex_app.sql` via API interna do APEX (`wwv_flow_imp_shared`) — não
escrever isso à mão fora de um import completo, risco de corromper os Shared Components.
`RAW_JSON` deliberadamente fora do escopo deste item — depende do item de staging abaixo.
Os `templates/*.xlsx` servem pra testar a carga depois de pronta, não pra criar o perfil.
- [ ] Pipeline de staging: bucket → `TB_26AI_TECH_V2_STG` via `DBMS_CLOUD.COPY_DATA` (tabela nova,
não mexe nas existentes)
- [ ] `MERGE` com histórico (`LOAD_BATCH_ID`, `TB_26AI_TECH_V2_HIST` — tabela nova), honrando o

View File

@@ -127,27 +127,51 @@ coluna, e um `JSON_OBJECT(*)` sobre o staging resolve isso corretamente.</p>
arquivo, exatamente como já faz hoje em cada release.</p>
</div>
<p>Boa notícia: não precisa preencher campo a campo. O jeito mais rápido é criar o perfil do zero
apontando pra um arquivo de amostra (só cabeçalho, sem dados) com todas as colunas certas — o APEX
detecta as colunas automaticamente a partir do cabeçalho. Já preparei os dois arquivos:</p>
<div class="table-wrap">
<table>
<tr><th>Arquivo de amostra (no repositório)</th><th>Colunas</th><th>Perfil a criar</th></tr>
<tr><td><code>templates/sample_DL_TECH_CMDB_V2.xlsx</code></td><td>27 (16 originais + 11 novas — sem <code>RAW_JSON</code>)</td><td><code>DL_TECH_CMDB_V2</code></td></tr>
<tr><td><code>templates/sample_DL_TECH_VULNERABILIDADE_V3.xlsx</code></td><td>40 (18 originais + 22 novas — sem <code>RAW_JSON</code>)</td><td><code>DL_TECH_VULNERABILIDADE_V3</code></td></tr>
</table>
<div class="callout warning">
<div class="callout-title">Passo a passo confirmado tela a tela — sem adivinhação</div>
<p>A versão anterior deste capítulo sugeria "subir um arquivo de amostra para detectar colunas
automaticamente" — essa tela <strong>não existe</strong> neste wizard, era um chute meu, não
confirmado contra o ambiente real. O roteiro abaixo segue exatamente as telas reais, uma a uma.
Onde uma tela ainda não foi vista/confirmada, isso está marcado explicitamente — não vou
documentar o que não vi.</p>
</div>
<ol>
<li>Baixe os dois arquivos de <code>templates/</code> neste repositório.</li>
<li>App Builder → Application 100 → <strong>Shared Components</strong> → <strong>Data Load Definitions</strong> → <strong>Create</strong>.</li>
<li>Na tela de criação, escolha carregar a partir de um arquivo e faça upload do <code>sample_DL_TECH_CMDB_V2.xlsx</code> (ou o de vulnerabilidades) — o APEX lê o cabeçalho e monta o Data Profile com as 27 (ou 40) colunas automaticamente.</li>
<li><strong>Name</strong>: <code>DL_TECH_CMDB_V2</code> (ou <code>DL_TECH_VULNERABILIDADE_V3</code>). <strong>Target Type</strong>: Table. <strong>Table Name</strong>: <code>TB_26AI_TECH_CMDB</code> (ou <code>TB_26AI_TECH_V2</code>). <strong>Loading Method</strong>: Append — mesma configuração do perfil original (ver aba "Data Load" da tela, igual à do <code>DL_TECH_CMDB_V1</code>).</li>
<li>Em <strong>Edit Data Profile</strong>, confira o tipo de cada coluna nova contra a tabela da seção 3 (ou 4) — a maioria detecta como <code>VARCHAR2</code>/texto por padrão, então ajuste manualmente: <code>DEFINITION_CVSS3_BASE_SCORE</code>, <code>DEFINITION_EPSS_SCORE</code>, <code>PORT</code>, <code>TIME_TO_FIX</code>, <code>ATTESTATION_SCORE</code> → <code>NUMBER</code>; <code>LAST_FIXED</code>, <code>VULN_SLA_DATE</code>, <code>PATCH_PUBLISHED</code>, <code>VULNERABILITY_PUBLISHED</code> → data/timestamp; <code>U_FIM_DO_SUPORTE</code> → data, máscara <code>DD-MM-YYYY</code>.</li>
<li>Para os campos flag (<code>ATTESTED_FLAG</code>, <code>CISA_KEV_FLAG</code>, <code>EXPLOITED_BY_MALWARE_FLAG</code>, <code>EXPLOITED_BY_NESSUS_FLAG</code>): configure a transformação de valor (Column Transformation) <code>Verdadeiro(a)/true → 1</code>, <code>Falso(a)/false → 0</code> — mesma convenção já usada em <code>SOX</code>/<code>COFRE</code>/<code>TENABLE</code>/<code>SIEM</code>.</li>
<li>Salve e teste com uma planilha pequena (5-10 linhas de ativos <code>AM...</code>, com dado real nas colunas — não só o cabeçalho) antes de rodar a carga completa.</li>
<li>App Builder → Application 100 → <strong>Shared Components</strong> → <strong>Data Load Definitions</strong>.</li>
<li>Clique no botão verde <strong>Create</strong> (canto superior direito).</li>
<li><strong>Tela "Create Data Load - Method"</strong>: marque <strong>"As copy of an existing Data Load Definition"</strong> (não "From scratch") → <strong>Next</strong>.</li>
<li><strong>Tela "Create Data Load - Application"</strong>: no campo <strong>Copy From Application</strong>, selecione <strong>"100 ampminsights"</strong> (a própria aplicação) → <strong>Next</strong>.</li>
<li><strong>Tela "Create Data Load - As Copy"</strong>: aparece uma tabela com as 3 definições que já existem (<code>DL_TECH_CMDB_V1</code>, <code>DL_TECH_VULNERABILIDADES</code>, <code>DL_TECH_VULNERABILIDADE_V2</code>), cada uma com um campo <strong>To Name</strong> e um dropdown <strong>Action</strong> (No/Yes/Copy and Subscribe). Faça, nesta mesma tela, as duas cópias de uma vez:
<ul>
<li>Linha <code>DL_TECH_CMDB_V1</code>: mude <strong>Action</strong> para <strong>Yes</strong>; no campo <strong>To Name</strong>, apague "Copy of DL_TECH_CMDB_V1" e escreva <code>DL_TECH_CMDB_V2</code>.</li>
<li>Linha <code>DL_TECH_VULNERABILIDADE_V2</code>: mude <strong>Action</strong> para <strong>Yes</strong>; no campo <strong>To Name</strong>, escreva <code>DL_TECH_VULNERABILIDADE_V3</code>.</li>
<li>Linha <code>DL_TECH_VULNERABILIDADES</code>: deixe <strong>Action = No</strong> (essa não faz parte do v2.0.0).</li>
</ul>
</li>
<li>Clique em <strong>Copy Data Load Definition</strong> (canto inferior direito).</li>
</ol>
<div class="callout info">
<div class="callout-title">A partir daqui, ainda não confirmado — preciso da próxima tela</div>
<p>O que aparece depois de clicar em "Copy Data Load Definition", e como adicionar as colunas
novas (seção 3/4) dentro da cópia — ainda não vi essa tela. Assim que você tiver o print, eu
completo o roteiro com o mesmo nível de precisão, em vez de adivinhar.</p>
</div>
<p>Depois de ter as colunas novas adicionadas na cópia (roteiro a completar), os ajustes que já sei
que vão ser necessários, pela tabela da seção 3/4:</p>
<ul>
<li><code>DEFINITION_CVSS3_BASE_SCORE</code>, <code>DEFINITION_EPSS_SCORE</code>, <code>PORT</code>, <code>TIME_TO_FIX</code>, <code>ATTESTATION_SCORE</code> → tipo <code>NUMBER</code>.</li>
<li><code>LAST_FIXED</code>, <code>VULN_SLA_DATE</code>, <code>PATCH_PUBLISHED</code>, <code>VULNERABILITY_PUBLISHED</code> → data/timestamp.</li>
<li><code>U_FIM_DO_SUPORTE</code> → data, máscara <code>DD-MM-YYYY</code>.</li>
<li><code>ATTESTED_FLAG</code>, <code>CISA_KEV_FLAG</code>, <code>EXPLOITED_BY_MALWARE_FLAG</code>, <code>EXPLOITED_BY_NESSUS_FLAG</code> → transformação de valor <code>Verdadeiro(a)/true → 1</code>, <code>Falso(a)/false → 0</code> (mesma convenção já usada em <code>SOX</code>/<code>COFRE</code>/<code>TENABLE</code>/<code>SIEM</code>).</li>
</ul>
<p>Os arquivos <code>templates/sample_DL_TECH_CMDB_V2.xlsx</code> e
<code>templates/sample_DL_TECH_VULNERABILIDADE_V3.xlsx</code> continuam úteis, só que num momento
diferente do que eu disse antes: não servem pra criar o perfil, servem como planilha de teste (só
o cabeçalho — adicione 5-10 linhas de ativos <code>AM...</code> com dado real antes de subir) pra
validar a carga depois que o perfil estiver pronto, na seção 6.</p>
<h2>6. Como validar</h2>
<p>Depois de rodar uma carga de teste pequena:</p>
<div class="code-block">