# Tarifa SLB (Sistema de Lançamentos do Banco Central): mapeamento e desenho da solução

Data: 2026-07-21
Autor: sessão de design (Monetarie SCD, ISPB 46026562, COMPE 526)
Natureza: documento de DESIGN. Nada implementado. Este é o último item "em desenvolvimento" da relação de relatórios da Vulci (item 6 de 15; 14 já atendidos).
Regra do dono aplicada: legado usado com discernimento entre o catálogo VIGENTE 5.12 e o que o legado carrega DEFASADO. Onde houve divergência, o veredito está explícito.

## 0. Resumo executivo (o que é SLB)

SLB é o "Sistema de Lançamentos do Banco Central". É o canal pelo qual o BACEN COBRA e PAGA a instituição participante do STR/SPB. Fonte autoritativa (Catálogo de Serviços do SFN 5.12, Volume I, linhas 1088 e 9367 a 9373):

> "SLB - Sistema de Lançamentos do Banco Central. Este grupo de serviços se destina ao controle das cobranças e dos pagamentos do Banco Central que envolvam as instituições financeiras e as câmaras participantes do STR. O sistema informa ao participante sempre que o Banco Central comandar uma cobrança. O participante poderá então realizar o pagamento informando o Número Controle SLB Original associado à cobrança. Créditos para os participantes são comandados diretamente em suas contas Reservas Bancárias ou de Liquidação. Este grupo de serviços pertence ao domínio de sistema SPB01."

Confirmações independentes de que SLB é o canal de tarifa:
- Volume IV 5.12, linha 679: `SLB    SLB    Tar    Tarifa` (o domínio SLB mapeia para a categoria Tarifa).
- Volume I 5.12, linha 5946: "A cobrança dos custos financeiros será realizada via SLB."
- Domínio `FinlddSLB` (Dom20260327.md, linhas 5498 a 5502): existe finalidade `CTS010002 Cobrança de Tarifa pelo Uso do STR - Instituições Financeiras - Recebimento` (via SLB0001) e `CTS010005 Cobrança de Tarifa pelo Uso do STR - Instituições Financeiras com Conta de Liquidação - Recebimento` (via SLB0001), com as devoluções correspondentes `CTS010004`/`CTS010006` (via SLB0005).

Ou seja: a "tarifa de uso do SLB/STR" que o cliente pede (item 6 da Vulci) é a COBRANÇA que o BACEN faz da Monetarie pelo uso do STR, transportada por mensagens SLB, com FinlddSLB da família CTS0100xx. Como a Monetarie é SCD com Conta de Liquidação (não Reserva Bancária), a finalidade aplicável é a `CTS010005` (cobrança) e a `CTS010006` (devolução).

O que o cliente escreveu (fonte: `docs/reports/respostas-cliente-2026-07-19/Monetarie-Resposta-Relatorios-Funcionais-2026-07-19.md`, item 6, linhas 42 a 44 e 96):

> "### 6. Tarifa de uso do SLB (recebimento mensal, dois movimentos diários). Em desenvolvimento. O tratamento automático dos pagamentos da tarifa de uso do SLB dentro da plataforma SPB, com o débito correspondente na conta institucional, está em desenvolvimento e é o próximo item da fila desta relação."

Ponto a confirmar com o cliente (registrado, não inferido): o significado exato de "dois movimentos". Candidatos: (a) a cobrança da tarifa do STR mais a cobrança relativa à Conta de Liquidação, chegando no mesmo ciclo mensal; (b) o par de eventos "informa cobrança" (SLB0001) e "efetiva/liquida" (SLB0002 + resposta). O texto do cliente ora diz "dois movimentos diários", ora "dois movimentos mensais" (linhas 42 e 96), então o significado precisa de confirmação antes de fixar a regra de conciliação.

---

## FASE 1: MAPEAMENTO

### 1.1. Catálogo VIGENTE 5.12: mensagens SLB e campos

Fonte: `/Users/luizpenha/cecresa/md/XSDDOCV512/SLB/*.XSD` e o Catálogo Volume I 5.12 (linhas 9382 a 9694). A família SLB tem 8 eventos, organizados em três serviços.

Controle de Débitos SLB (o BACEN cobra o participante):

- SLB0001 "SLB informa Lançamento devido pelo Participante" (Emissor SLB, Destinatário Participante; Fluxo5). É a COBRANÇA. O participante deve autorizar o débito no próprio SLB até a data de vencimento. Campos (Vol I linhas 9415 a 9431): `CodMsg`, `NumCtrlSLB` [1..1], `ISPBPart` [1..1], `NumCtrlSLBOr` [0..1], `CNPJConv` [0..1], `DtVenc` (vencimento) [1..1], `Hist` [1..1], `VlrLanc` [1..1], `FinlddSLB` (finalidade) [1..1], `AgDebtd`/`TpCtDebtd`/`CtDebtd`/`TpPessoaDebtd`/`CNPJ_CPFCliDebtd` [0..1], `DtMovto` [1..1].
- SLB0002 / SLB0002R1 "Participante requisita Pagamento de Lançamento BACEN" (Emissor Participante, Destinatário SLB; Fluxo1). Sem pagamento parcial. SLB0002 (linhas 9453 a 9461): `CodMsg`, `NumCtrlPart`, `ISPBPart`, `NumCtrlSLBOr`, `NivelPref` [0..1], `VlrLanc`, `DtMovto`. SLB0002R1 (9467 a 9475): `CodMsg`, `NumCtrlPart`, `ISPBPart`, `NumCtrlSTR` [0..1], `SitLancSLB` (situação), `DtHrSit`, `DtMovto`.
- SLB0003 "SLB informa Cancelamento de Lançamento BACEN" (Emissor SLB, Destinatário Participante; Fluxo5). Cancela cobrança gerada indevidamente, só se ainda não efetivada. Campos (9500 a 9505): `CodMsg`, `NumCtrlSLBOr`, `ISPBPart`, `DtMovto`.
- SLB0007 / SLB0007R1 "Participante requisita Pagamento ao BACEN" não demandado pelo SLB (Fluxo1). SLB0007 (9632 a 9643): `CodMsg`, `NumCtrlPart`, `ISPBPart`, `NumCtrlSLBOr` [0..1], `CNPJConv` [0..1], `FinlddSLB`, `VlrLanc`, `NivelPref` [0..1], `Hist`, `DtMovto`. SLB0007R1 (9649 a 9658): `CodMsg`, `NumCtrlPart`, `ISPBPart`, `NumCtrlSLB`, `NumCtrlSTR` [0..1], `SitLancSLB`, `DtHrSit`, `DtMovto`.
- SLB0008 "SLB informa lançamento de débito direto pelo BACEN" (Emissor SLB, Destinatário Participante; Fluxo5). Débito direto, não depende de autorização. Campos (9682 a 9693): `CodMsg`, `NumCtrlSTR`, `ISPBPart`, `CNPJConv` [0..1], `FinlddSLB`, `VlrLanc`, `NumCtrlSLB`, `Hist`, `DtHrBC`, `DtMovto`.

Controle de Créditos SLB:

- SLB0005 "SLB informa Lançamento Crédito Efetivado" (Emissor SLB, Destinatário Participante; Fluxo5). Crédito na conta do participante (ex.: devolução de tarifa CTS010006). Campos (9528 a 9547): `CodMsg`, `NumCtrlSTR`, `ISPBPart`, `NumCtrlSLBOr` [0..1], `CNPJConv` [0..1], `CodIBANCredtd` [0..1], `AgCredtd`/`TpCtCredtd`/`CtCredtd`/`TpPessoaCredtd`/`CNPJ_CPFCliCredtd`/`NomCliCredtd` [0..1], `FinlddSLB`, `VlrLanc`, `NumCtrlSLB`, `Hist`, `DtHrBC`, `DtMovto`.

Consulta:

- SLB0006 / SLB0006R1 "Participante consulta Lançamentos SLB" (Emissor Participante, Destinatário SLB; Fluxo4). SLB0006 (9568 a 9576): `CodMsg`, `NumCtrlPart`, `ISPBPart`, `TpDeb_Cred` [0..1], `DtRef` [0..1], `NumCtrlSLB` [0..1], `DtMovto`. SLB0006R1 (9582 a 9607): grupo `Grupo_SLB0006R1_Lanc` [0..200] com `NumCtrlSLB`, `NumCtrlSLBOr`, `FinlddSLB`, `NumCtrlSTR`, `CNPJConv`, `AgIF`, `TpCt`, `CtCli`, `TpPessoa`, `CNPJ_CPFCli`, `TpDeb_Cred`, `VlrLanc`, `Hist`, `DtVenc`, `DtPgto`, `SitLancSLB`, `DtHrSit`, mais `DtHrBC`, `DtMovto`. Regras: DtRef para uma data específica, NumCtrlSLB para um lançamento, omitir DtRef para vincendos.

Variantes E (`SLB0002E`, `SLB0006E`, `SLB0007E`): variantes de envelope do catálogo. Existem os XSDs em 5.12 mas não fazem parte do fluxo funcional principal do relatório. Serão tratadas por completude no parser, sem lógica de negócio própria nesta frente.

### 1.2. Veredito VIGENTE vs DEFASADO na família SLB

Diff estrutural provado (element set) entre `XSDDOCV511/SLB` e `XSDDOCV512/SLB`:

```
SLB0001: element set IDENTICAL 5.11==5.12
SLB0002: element set IDENTICAL 5.11==5.12
SLB0003: element set IDENTICAL 5.11==5.12
SLB0005: element set IDENTICAL 5.11==5.12
SLB0006: element set IDENTICAL 5.11==5.12
SLB0007: element set IDENTICAL 5.11==5.12
SLB0008: element set IDENTICAL 5.11==5.12
```

Conclusão: a família SLB NÃO mudou entre 5.11 e 5.12. É estável e vigente. Logo, o que o legado (LegadoSPB) usa em SLB0001/SLB0002/SLB0003/SLB0006 (semântica de cobrança e tarifa) É a semântica vigente. Não há mensagem SLB defasada a portar cega ou a evitar por versão.

Cuidado (defasado por inexistência): NÃO existe `SLB0004` no catálogo 5.12 nem XSD. A família é 0001, 0002, 0003, 0005, 0006, 0007, 0008. Qualquer referência a SLB0004 é fictícia.

### 1.3. Legado LegadoSPB / AutBank (EvolutionPRO)

O legado É o modelo de negócio correto de tarifa SLB, e o relatório do cliente vem dele.

- Relatório restaurado: `.scratch/legadospb-sps/spb_sp_rpt_lancto_SLB.sql` (SP `dbo.spb_sp_rpt_lancto_SLB`, id de log de relatório 302). Lógica: seleciona de `spb_tb_pil_operacoes` onde `cd_msg = 'SLB0001'` (as cobranças) no período `@dt_ini..@dt_fim`; faz LEFT JOIN na mesma tabela onde `cd_msg = 'SLB0002'` casando `NumCtrlSLBOr` do SLB0002 com `nr_ctrl_if` do SLB0001 (o pagamento que referencia a cobrança); LEFT JOIN em `spb_tb_gen_status_oper` para o status do pagamento. Colunas de saída:
  - `num_ctrl_SLB1` = número de controle da cobrança (`nr_ctrl_if`)
  - `dt_movto_SLB1` = data de movimento da cobrança
  - `dt_venc_SLB1` = vencimento (`DtVenc` extraído do XML)
  - `vlr_oper` = `ABS(vl_operacao)` (valor da tarifa)
  - `dt_movto_SLB2` = data de movimento do pagamento
  - `num_ctrl_part_SLB2` = número de controle do participante no pagamento
  - `num_ctrl_SLB2` = número de controle externo/STR do pagamento
  - `ds_status` = situação do pagamento
  - `qtd_dias` = dias entre a data da cobrança e a data do pagamento
  - `Finalidade` = descrição de `FinlddSLB` resolvida por `spb_fc_get_desc_dominio('FinlddSLB', ..., 1)`
- Report visual: `mwbank/LegadoSPB/EvolutionDotNet/www-webapi/wwwroot/Reports/rpt_lanctos_slb.trdp` (Telerik, ligado ao SP acima).
- Procedimentos relacionados no legado (evidência em `EvolutionDotNet/Equalizador/Origem/procs.json`): `spb_sp_gera_SLB0006_prog_envio` (gera a consulta SLB0006 programada), `spb_sp_gera_msg_cancela_slb` (cancelamento), `spb_sp_trata_SLB0002R1` (trata a resposta ao pagamento), `spb_sp_rpt_lancto_SLB` (o relatório).

Veredito do legado: VIGENTE. O relatório do legado é exatamente o "relatório de tarifas SLB" e usa mensagens que continuam válidas no 5.12. Vamos espelhar as colunas dele, ampliando com créditos (SLB0005) e débitos diretos (SLB0008) que o SP antigo não cobre.

### 1.4. Repositório atual `monetarie/spb`: o que já existe e o que falta

O que JÁ existe e está CORRETO (vigente):

- Módulos de mensagem `services/bacen_gateway/lib/bacen_gateway/messages/slb/slb0001.ex` ... `slb0008.ex` (mais R1 e E), gerados do XSD 5.12 pelo `spb/scripts/spb_base_module_generator.py`. Conferido campo a campo no `slb0001.ex`: build/parse/validate com os campos corretos (`NumCtrlSLB`, `DtVenc`, `VlrLanc`, `FinlddSLB`, `DtMovto`, etc.), namespace `http://www.bcb.gov.br/SPB/SLB0001.xsd`, money fail-closed. Testes existem em `test/bacen_gateway/messages/slb/`.
- Catálogo de rotas `services/bacen_gateway/priv/catalog/v512_message_routes.json`: descrições SLB corretas (ex.: "SLB0001 - SLB informa Lançamento devido pelo Participante", "Destinado ao SLB informar ao Participante uma cobrança do Bacen", emitter SLB, destination Participante).
- Consulta agendada SLB0006 no catálogo `priv/catalog/legacy_scheduled_automation.json` (code `SLB0006`, legacy_procedure `spb_sp_gera_SLB0006_prog_envio`).
- Modelo de dados de operações: `spb_operations` (pai) mais `bacen_messages` (filho por `operation_id`). Um SLB0001 recebido cai no modelo genérico.

O que existe mas é a TARIFA INTERNA (conceito DIFERENTE, não confundir com SLB):

- `lib/bacen_gateway/tariff/tariff_engine.ex`, `tariff_accumulator.ex`, `tib_tariff_processor.ex`. Tabelas `bacen_tariffs`, `bacen_tariff_bands` (migration `20260605400000`), `tariff_movements` (migration `20260606000000`). Rotas `/tariffs`, `/tariffs/calculate`, `/admin/tariffs/tib/*` no `router.ex` (linhas 165 a 171 e 845 a 849). Telas `TariffMonitorView.vue`, `InterbankTariffView.vue`, `TariffsConfigView.vue`.
- Isso é o CUSTO POR MENSAGEM que a própria Monetarie ACUMULA por operação SPB (fonte legada `spb_tb_gen_tarifas_bc`, faixas por hora/quantidade/vigência). É o insumo da tarifa que a IF paga, mas NÃO é a mensageria SLB do BACEN nem o relatório do item 6. Relação relevante: a tarifa acumulada aqui é o que o BACEN depois cobra via SLB. Vamos usar isso na conciliação, não como substituto.

O que está DEFASADO/FICTÍCIO no repo atual (defeito a corrigir):

- `lib/bacen_gateway/message_registry.ex:35`: `"SLB" => %{name: "Solicitação de Bloqueio", ...}`. Rótulo ERRADO. SLB não é "Solicitação de Bloqueio".
- `lib/bacen_gateway/post_integration/specific_handlers/slb_handler.ex`: o moduledoc e o roteamento tratam SLB como "SELIC Balcão / OTC" (SLB0001 registro de empréstimo, SLB0002 registro de compromissada, SLB0003 liquidação, SLB0004 término antecipado, SLB0005 prorrogação, SLB0006 consulta) e extraem `TxJurosSLB`, `VlrFinancSLB`, `DtVencimento`. Nada disso existe na família SLB do 5.12. É um modelo FICTÍCIO (confusão com compromissadas do SELIC). O próprio moduledoc admite: "NOTA forward-looking: a Monetarie não exercita SLB na base atual, validado por unit mais mapeamento, sem smoke E2E". Além disso o handler referencia `SLB0004`/`SLB0004R1`, que não existem.

O que FALTA por inteiro (gap para o item 6):

1. Nenhuma tabela dedicada de cobranças SLB (não existe `slb_charges`/`slb_entries`; provado por varredura das migrations).
2. Nenhum handler de negócio correto que persista SLB0001/SLB0008/SLB0005 como lançamento SLB rastreável (com `DtVenc`, `VlrLanc`, `FinlddSLB`, `NumCtrlSLB`, direção débito/crédito e situação). O handler atual é fictício e status-only.
3. Nenhum fluxo de autorização de pagamento (SLB0002) nem de pagamento espontâneo (SLB0007), embora os módulos de mensagem existam.
4. Roteiro contábil COSIF não cobre a família. Evidência: `services/bacen_gateway/docs/reports/2026-07-15-auditoria-roteiro-contabil-spb.md` linha 150 e 210 registram "SLB0007/SLB0008 sem roteiro".
5. Nenhum endpoint de relatório de tarifa SLB nem tela (os `/tariffs` e as telas Tariff são a tarifa interna).
6. Domínio `FinlddSLB` não semeado (necessário para resolver a coluna Finalidade do relatório).

---

## FASE 2: DESENHO DA SOLUÇÃO DE NEGÓCIO (SCD, 5.12 vigente)

### 2.1. O que a Monetarie precisa RECEBER e EMITIR

Contexto: Monetarie é SCD e liquida por Conta de Liquidação (não Reserva Bancária). Isso fixa a finalidade da tarifa do STR na variante de Conta de Liquidação (`CTS010005` cobrança, `CTS010006` devolução).

Fluxo ponta a ponta:

1. RECEBER SLB0001 (cobrança informada). Ex.: tarifa mensal de uso do STR (`FinlddSLB = CTS010005`). Persistir como lançamento SLB pendente, com `DtVenc`, `VlrLanc`, `FinlddSLB`, `NumCtrlSLB`, direção débito. Não move dinheiro ainda; é a notificação da cobrança.
2. AUTORIZAR/PAGAR: emitir SLB0002 referenciando `NumCtrlSLBOr = NumCtrlSLB` da cobrança, até `DtVenc`. Sem pagamento parcial. Modo AUTOMÁTICO (flag) ou MANUAL (operador autoriza na tela). Receber SLB0002R1 com `SitLancSLB` e `NumCtrlSTR` para desfecho terminal (pago). Disciplina do dono (money-path): default MANUAL, `SLB_AUTO_PAY_ENABLED` OFF; automático só por decisão do dono e por ambiente.
3. RECEBER SLB0008 (débito direto). Já efetivado pelo BACEN, sem autorização. Persistir como lançamento débito já pago, sensibilizando a Conta de Liquidação.
4. RECEBER SLB0005 (crédito efetivado). Ex.: devolução de tarifa (`CTS010006`). Persistir como crédito na Conta de Liquidação.
5. RECEBER SLB0003 (cancelamento de cobrança indevida). Baixar o lançamento SLB0001 pendente correspondente (por `NumCtrlSLBOr`), sem pagar.
6. EMITIR SLB0007 quando houver pagamento ao BACEN não demandado pelo SLB (ex.: devolução espontânea). Receber SLB0007R1.
7. EMITIR SLB0006 (consulta) agendada e sob demanda, receber SLB0006R1 (até 200 lançamentos) para RECONCILIAR o que a Monetarie registrou contra o que o BACEN tem. Conciliação diária, espelhando `spb_sp_gera_SLB0006_prog_envio`.

Sobre "dois movimentos" (a confirmar com o cliente, não inferir): o modelo acima acomoda as duas leituras. Se forem duas cobranças no ciclo (STR mais Conta de Liquidação), aparecem como dois SLB0001 com finalidades distintas. Se for o par informa/efetiva, aparecem como o SLB0001 (cobrança) e o SLB0002 mais SLB0002R1 (pagamento). O relatório mostra ambos os movimentos de todo modo.

### 2.2. Contabilização (COSIF)

Princípio do dono (invariável): COSIF é a terceira perna, espelho regulatório. Nunca bloqueia, atrasa ou desfaz o transacional; se o espelho falha, o operacional segue e vira dado reconciliável.

Modelo:

- SLB0001 pago (SLB0002) e SLB0008 (débito direto): a tarifa é DESPESA da instituição. Lançamento contábil de despesa de serviços do sistema financeiro (grupo 8 de despesas do plano SCD, conta a definir com o contador) a débito, contra a Conta de Liquidação/institucional a crédito (a saída de caixa). Valor em centavos na fronteira COSIF (padrão dos outros caminhos: PIX/SPB usam `to_cents`).
- SLB0005 (crédito/devolução de tarifa): receita ou estorno de despesa a crédito, contra a Conta de Liquidação a débito.
- Reconciliação: bater a tarifa acumulada internamente (`tariff_movements` do `TariffEngine`) contra a cobrança efetiva do BACEN (soma dos SLB0001/SLB0008 do período por finalidade). Divergência vira alerta, não bloqueio.

Precondição (não bloqueante para o design, bloqueante para o número final): as contas COSIF exatas dependem do mandato pendente de "backup contábil mais plano de contas oficial" citado no CLAUDE.md. O roteiro contábil da família SLB (hoje inexistente para SLB0007/SLB0008, e ausente para o restante) entra em `lib/bacen_gateway/accounting/roteiro.ex` mais `posting.ex`.

### 2.3. Relatório e tela (item 6 da Vulci)

Formato proposto (espelha `spb_sp_rpt_lancto_SLB` e amplia com as colunas do 5.12):

- Filtros: período por `DtMovto` (de/até), tipo (débito/crédito/débito direto), finalidade (`FinlddSLB`), situação (`SitLancSLB`).
- Colunas: Número de Controle SLB (`NumCtrlSLB`); Data de Movimento; Vencimento (`DtVenc`); Finalidade (descrição de `FinlddSLB`); Valor (`VlrLanc`); Situação (`SitLancSLB` legível); Número de Controle STR (`NumCtrlSTR`); Data de Pagamento (`DtPgto`); Dias até pagamento; Tipo (cobrança / crédito / débito direto).
- Totalizadores: total cobrado no período, total pago, total creditado (devoluções), pendente por vencer, dias médios de pagamento.
- Exportação CSV e detalhe linha a linha, no padrão dos relatórios existentes.
- Estado vazio explícito: "Nenhuma tarifa SLB no período." (padrão já adotado no cliente, ver Relatório de Taxas).
- Localização: nova aba "Tarifa SLB" no `ReportsView.vue` do operador (que já usa abas por relatório com endpoint real: movement, reserve, dailyBalances) ou view dedicada `SlbTariffReportView.vue`.

### 2.4. Arquivos que a implementação vai tocar

Backend (`spb/services/bacen_gateway`):

- NOVO migration `priv/repo/migrations/AAAAMMDDHHMMSS_create_spb_slb_charges.exs`: tabela `spb_slb_charges` (num_ctrl_slb, ispb_part, num_ctrl_slb_or, cnpj_conv, dt_venc, dt_movto, vlr_lanc centavos, finldd_slb, direction débito/crédito, kind cobranca/credito/debito_direto, sit_lanc_slb, num_ctrl_str, dt_pgto, state, operation_id, timestamps; índice único por num_ctrl_slb mais dt_movto).
- NOVO `lib/bacen_gateway/slb/slb_charge.ex` (contexto de persistência e consulta) e `slb_ledger.ex` (máquina de estados: pendente, autorizada, paga, cancelada, creditada).
- CORRIGIR `lib/bacen_gateway/post_integration/specific_handlers/slb_handler.ex`: substituir o modelo fictício SELIC pelo modelo de cobrança SLB vigente (SLB0001 cobrança, SLB0002 pagamento, SLB0003 cancelamento, SLB0005 crédito, SLB0007 pagamento espontâneo, SLB0008 débito direto), persistindo em `spb_slb_charges` e usando `SitLancSLB` via `StatusDePara.map_status("SLB", n)`. Remover SLB0004, TxJurosSLB, VlrFinancSLB, DtVencimento.
- CORRIGIR `lib/bacen_gateway/message_registry.ex:35`: rótulo "SLB" para "Sistema de Lançamentos do Banco Central".
- EDITAR `lib/bacen_gateway/accounting/roteiro.ex` mais `posting.ex`/`posting_recorder.ex`: roteiro COSIF para SLB0001/SLB0002/SLB0005/SLB0007/SLB0008.
- NOVO gerador de pagamento SLB0002 (autorização, reusando `messages/slb/slb0002.ex`) e consumo de SLB0002R1/SLB0007R1 (`slb0002r1.ex`, `slb0007r1.ex`) para desfecho.
- NOVO conciliador SLB0006 agendado (reusando o catálogo `legacy_scheduled_automation.json` já presente) para bater com SLB0006R1.
- NOVO endpoint de relatório `GET /reports/slb` (controller de reports/exports mais SQL sobre `spb_slb_charges`).
- NOVO seed do domínio `FinlddSLB` (`priv/...`) a partir de `Dom20260327.md`, para resolver a Finalidade no relatório.
- Flag `SLB_AUTO_PAY_ENABLED` (default OFF).

Frontend (`spb/frontend-vue`):

- NOVA aba/tela "Tarifa SLB" em `src/apps/operator/views/ReportsView.vue` (ou `SlbTariffReportView.vue`), rota em `src/router/operator-routes.ts`, item em `src/components/layout/Sidebar.vue`.
- i18n em `src/locales/pt-BR.json`, `en-US.json`, `zh-CN.json`.
- (Opcional) tela de operação para o operador autorizar o pagamento (SLB0002) de cobranças pendentes.

Simulador (`spb/simulator`, para validar sem BACEN vivo em HML):

- Ajustar `lib/simulator/messages/slb_handler.ex` para emitir SLB0001 (tarifa STR mensal, `FinlddSLB = CTS010005`), SLB0005, SLB0008, e responder SLB0002/SLB0007 com SLB0002R1/SLB0007R1 no modelo vigente.

### 2.5. Plano de fases (TDD, cada fase com RED antes do GREEN)

- Fase 0 (correção e limpeza, sem mudar saldo): corrigir os rótulos fictícios (`message_registry.ex`, moduledoc e roteamento do `slb_handler.ex`); teste que fixa a semântica correta de SLB0001..0008 e prova que SLB0004/TxJurosSLB/VlrFinancSLB saíram.
- Fase 1 (persistência inbound): schema `spb_slb_charges` mais handler que persiste SLB0001/SLB0008/SLB0005/SLB0003 usando os parsers 5.12. TDD sobre XML real de cada tipo.
- Fase 2 (pagamento): fluxo SLB0002 (autorização, referenciando NumCtrlSLBOr, até DtVenc) e SLB0007 (espontâneo), consumo de R1 e SitLancSLB, estados terminais, flag auto/manual.
- Fase 3 (COSIF): roteiro de despesa/receita, espelho fail-soft; precondição das contas com o contador; reconciliação com `tariff_movements`.
- Fase 4 (conciliação): SLB0006 agendado mais SLB0006R1 (até 200 lançamentos), bate registrado contra BACEN, alerta em divergência.
- Fase 5 (relatório e tela): endpoint `GET /reports/slb`, aba no ReportsView, i18n, export CSV, estado vazio; validação visual por screenshot (regra 11).
- Fase 6 (validação viva): simulador em HML; validação funcional real só em PROD, com acompanhamento (CANÔNICO do dono: a cabine SPB/STA só opera contra o BACEN em PRODUÇÃO; HML nunca teve credencial).

### 2.6. Precondições e decisões abertas (registradas, não inferidas)

1. Confirmar com o cliente o significado de "dois movimentos" (diários vs mensais; STR mais Conta de Liquidação vs informa/efetiva).
2. Definir com o contador as contas COSIF exatas de despesa de tarifa e de receita/estorno (depende do mandato de plano de contas oficial pendente).
3. Confirmar a conta institucional/de liquidação da Monetarie que recebe o débito da tarifa.
4. Monetarie SCD usa Conta de Liquidação, então a finalidade da tarifa do STR é `CTS010005` (cobrança) e `CTS010006` (devolução), não as variantes de Reserva Bancária. Validar contra a primeira cobrança real.
5. CANÔNICO: SLB real só é exercitado contra o BACEN em PROD. HML usa o simulador.
6. Decisão de pagamento automático vs manual por ambiente (default MANUAL; `SLB_AUTO_PAY_ENABLED` OFF), mesma disciplina do SISBAJUD 5302 e dos envios money-path.

---

## Apêndice A: evidências (arquivo:linha)

Catálogo e XSD 5.12 (verdade BACEN):
- `cecresa/md/Catalogo_de_Servicos_do_SFN_Volume_I_Versao_512.md.STAGE:1088` e `:9367-9373` (definição de SLB), `:9382-9394` (lista de eventos), `:9405-9693` (campos por mensagem).
- `cecresa/md/Catalogo_de_Servicos_do_SFN_Volume_IV_Versao_512.md.STAGE:679` (`SLB SLB Tar Tarifa`), `:1974-1975`, `:2356`, `:3320`, `:4313-4320` (regras RSLB).
- `cecresa/md/Catalogo_de_Servicos_do_SFN_Volume_I_Versao_512.md.STAGE:5946` (cobrança de custos financeiros via SLB).
- `cecresa/md/XSDDOCV512/SLB/SLB0001.XSD` ... `SLB0008.XSD` (esquemas); diff 5.11 vs 5.12 idêntico em todos.
- `cecresa/md/Dom20260327.md:5498-5502` (finalidades CTS0100xx de tarifa do STR).

Legado:
- `.scratch/legadospb-sps/spb_sp_rpt_lancto_SLB.sql` (relatório de tarifa SLB, colunas e joins).
- `mwbank/LegadoSPB/EvolutionDotNet/www-webapi/wwwroot/Reports/rpt_lanctos_slb.trdp` (report visual).
- `mwbank/LegadoSPB/EvolutionDotNet/Equalizador/Origem/procs.json` (procs `spb_sp_gera_SLB0006_prog_envio`, `spb_sp_gera_msg_cancela_slb`, `spb_sp_trata_SLB0002R1`, `spb_sp_rpt_lancto_SLB`).

Repositório atual (`monetarie/spb/services/bacen_gateway`):
- `lib/bacen_gateway/messages/slb/slb0001.ex` (parser/builder 5.12 correto) e demais `slb/*.ex`.
- `priv/catalog/v512_message_routes.json` (descrições SLB corretas).
- `priv/catalog/legacy_scheduled_automation.json` (SLB0006 agendado).
- `lib/bacen_gateway/message_registry.ex:35` (rótulo errado "Solicitação de Bloqueio").
- `lib/bacen_gateway/post_integration/specific_handlers/slb_handler.ex` (modelo fictício SELIC/OTC).
- `lib/bacen_gateway/tariff/tariff_engine.ex`, `tib_tariff_processor.ex`, `tariff_accumulator.ex`; migrations `20260605400000_create_bacen_tariff_bands.exs`, `20260606000000_create_tariff_movements.exs`; `router.ex:165-171,845-849` (tarifa INTERNA, não SLB).
- `docs/reports/2026-07-15-auditoria-roteiro-contabil-spb.md:150,210` ("SLB0007/SLB0008 sem roteiro").
- `frontend-vue/src/apps/operator/views/ReportsView.vue` (registro de relatórios por aba), `src/router/operator-routes.ts:49-51`.

Cliente:
- `docs/reports/respostas-cliente-2026-07-19/Monetarie-Resposta-Relatorios-Funcionais-2026-07-19.md:42-44,96` (item 6, tarifa de uso do SLB, em desenvolvimento).
