# Backfill do E2E nas linhas DICT do acervo de auditoria (monitor de operacoes). # # CONTEXTO (fato provado vivo em 2026-07-06): a linha DICT do GetEntry em # `monetarie_audit.xml_audit_logs` ficava com `end_to_end_id = nil` e o E2E # real apenas em `pi_end_to_end_id` (header PI-EndToEndId, DICT v2.11). Como o # monitor agrupa fluxos por `end_to_end_id`, a consulta DICT nunca agrupava # com a pacs.008 do MESMO pagamento. O codigo novo (Shared.Audit.BacenLogger, # fallback DICT* para pi_end_to_end_id) corrige as linhas futuras; este script # corrige o ACERVO ja gravado. # # ESTE SCRIPT NAO RODA AUTOMATICAMENTE. E idempotente (o filtro # `end_to_end_id IS NULL` zera o conjunto apos a primeira execucao) e so toca # linhas DICT com pi_end_to_end_id preenchido. Rodar UMA vez por ambiente, # depois do deploy da imagem que contem o fallback do BacenLogger. # # COMO RODAR (HML, task viva do pix-api, via rpc — NAO usar eval, o eval nao # herda os secrets da task; gotcha do estado canonico 2026-07-02): # # awsmon ecs execute-command --cluster monetarie-greenfield-homolog \ # --task --container pix-api --interactive \ # --command "/bin/sh" # # dentro do container: # bin/monetarie_pix rpc "$(cat docs/operator/scripts/2026-07-06-backfill-dict-e2e.exs)" # # LOCAL (repo com infra docker compose de dev): # cd pix/backend && mix run ../../docs/operator/scripts/2026-07-06-backfill-dict-e2e.exs # # Em modo eval/rpc o Repo nao sobe sozinho: o bloco abaixo garante o start # (gotcha #2 do pix/CLAUDE.md). Application.ensure_all_started(:ecto_sql) case Shared.Repo.start_link() do {:ok, _pid} -> :ok {:error, {:already_started, _pid}} -> :ok end sql = """ UPDATE monetarie_audit.xml_audit_logs SET end_to_end_id = pi_end_to_end_id WHERE message_type LIKE 'DICT%' AND end_to_end_id IS NULL AND pi_end_to_end_id IS NOT NULL """ %Postgrex.Result{num_rows: n} = Shared.Repo.query!(sql, [], timeout: 120_000) IO.puts("[backfill-dict-e2e] linhas DICT atualizadas com o E2E do header: #{n}")