Chaves do módulo
Todas nascem desligadas.
Ligada a primeira chave,
forecast_version=f1 entra no data_version: o primeiro cálculo depois
de ligar gera resultado e previsão novos. A previsão roda no cálculo versionado do perfil e não faz
chamada nova à instituição.
Liberação por horizonte
Os horizontes de 7, 15 e 30 dias são liberados separadamente, conforme a qualidade medida na avaliação. Todo horizonte é calculado e guardado; o não liberado sai na rota comstate: not_released, reasons vazio e scenarios vazio, sem nenhum
valor. Liberar um horizonte depois não recalcula nada: a rota passa a mostrar a previsão já guardada.
Regras do cálculo (f1)
- Saldo inicial (
starting_balance): oown_cash_availableda F1, o mesmo do diagnóstico.position_até a posição bancária mais antiga entre as contas (updateDateTimeda API Contas), o instante em que todas as posições já valiam. Sem caixa próprio elegível,amountsainull; sem posição conhecida,position_atsainull. - Pontos diários: um por dia civil em
America/Sao_Paulo, do dia de referência até o fim exclusivo do horizonte. 7 dias são 7 pontos. Referência 25/02/2026 e 7 dias: pontos de 25/02 a 03/03, fim em 04/03/2026 00h00. É a mesma janela do diagnóstico. - Fechamento do dia:
closing = opening + inflows − outflows; oopeningdo dia seguinte é oclosingdo anterior. min_closing: o menor fechamento do cenário (em empate, o primeiro dia).first_negative_date: o primeiro dia com fechamento abaixo de zero, ounull.- Valores: strings decimais, como no resto do perfil, com a escala preservada e no mínimo 2
casas:
"1000.0400"−"0.2000"="999.8400". Some com tipo decimal, nunca comfloat64.
Cenários e premissas
Cada cenário traz empremises os códigos que usou, com uma descrição em pt-BR.
- Conservador: só saídas conhecidas. A reserva efetiva dos títulos vencidos e das liquidações não observadas sai no dia de referência; cada título a pagar sai na data de vencimento pela reserva efetiva; cada fatura de cartão elegível sai no vencimento, já sem a parte coberta por título vinculado. Nenhuma entrada.
- Base: tudo do conservador, mais os recebíveis do ERP em aberto na data prevista (vencidos a receber ficam fora) e as recorrências publicadas de conta em BRL, na data esperada da próxima janela: entrada pelo menor valor observado, saída pelo maior. Uma recorrência que cobre um título ou uma fatura na mesma janela e no mesmo valor (dentro da tolerância) conta uma vez só, pelo título.
- Entradas variáveis (vendas no cartão, Pix avulsos) sem padrão publicado não são estimadas. Sem
nenhuma recorrência elegível, o base fica
limitedcomreasons: ["no_eligible_patterns"].
Componentes (kind)
Cada dia lista em components o que moveu o saldo, agrupado por kind, com as referências
ordenadas em refs.
Estados
Estado do horizonte
Estado do cenário
Rotas
Todas as regras comuns do perfil financeiro valem aqui: headerX-API-KEY, valores em string decimal, instantes em UTC com Z e nenhuma chamada nova à
instituição.
GET /financial-profiles/{id}/forecasts
Sem parâmetros, devolve a previsão publicada do resultado atual do perfil.
18000.00, um
título vencido a pagar de 4000.00, um título a pagar de 20000.00 com vencimento em 15/10, um
recebível de 8000.00 previsto para 16/10 e nenhuma recorrência publicada. Só o horizonte de 7
dias está liberado (FINANCIAL_PROFILE_FORECAST_RELEASED_HORIZONS=7).
200 Previsão atual
- Conservador: 13/10 fecha
14000.00(sai o vencido), 14/1014000.00, 15/10-6000.00(sai o título) e de 16 a 19/10-6000.00. Primeiro negativo em 15/10, mínimo-6000.00. - Base: igual até 15/10; em 16/10 entra o recebível e o saldo fecha
2000.00. Ficalimitedcomno_eligible_patterns, porque não há recorrência publicada. - 15 e 30 dias estão calculados e guardados, mas não liberados.
1500.00 com data esperada em 20/10, o horizonte de 7 dias não muda
(20/10 está fora); no de 15 dias, só o base recebe recurrence_outflow em 20/10 e fecha
500.00. Se essa recorrência fosse de 20000.00 e ligada ao título de 15/10, contaria uma vez só,
pelo título: o base continuaria -6000.00 em 15/10.
Histórico
?published_before=<RFC 3339>&limit=<1..100> ativa o modo histórico (basta um dos dois). limit
padrão 20. A resposta lista as previsões publicadas, da mais nova para a mais antiga, cada uma no
mesmo formato da previsão atual. Para a próxima página, use o published_at da última como
published_before.
200 Histórico
unavailable com agenda_missing.
Erros
404 FORECAST_NOT_FOUND
404 FORECAST_NOT_FOUND até um cálculo novo ser publicado.
Publicação e imutabilidade
- A previsão é publicada junto com o resultado do perfil, na mesma transação, uma por cálculo. Depois de publicada, nunca é editada nem recalculada.
- Correção de dado (carga nova, conciliação, revisão de classificação) muda o
data_versione gera cálculo e previsão novos. A anterior continua no histórico como foi publicada. - Fonte revogada durante o cálculo: nenhuma previsão nova é publicada.
data_versioné o do cálculo do perfil com o prefixosha256:. No resumo ele continua só em hexadecimal.
Como a previsão é avaliada (FR-026)
A qualidade de cada horizonte é medida depois, comparando a previsão com o saldo que de fato aconteceu. A avaliação é um processo interno e offline da Malvo: não tem rota pública, não liga nem desliga horizonte sozinha e não faz chamada à instituição.- Previsão como foi publicada. A avaliação lê a previsão guardada e nunca a recalcula. Uma correção posterior de dado não muda o erro de uma previsão antiga.
- Saldo observado do dia D: a última posição elegível com
updateDateTimeaté o fim do dia D emAmerica/Sao_Paulo, em todas as contas. Dia sem posição observada sai da conta com motivo, sem interpolação. - Comparação com baselines. B0: último saldo conhecido menos as obrigações conhecidas nas
datas de vencimento. Sazonal: só com pelo menos 3 meses completos de histórico; com menos, sai
como
not_applicable. - Métricas por horizonte e cenário: erro absoluto médio em reais (decimal), erro normalizado pela média do saldo absoluto observado e acerto na antecipação de insuficiência por dia (verdadeiros e falsos positivos e negativos).
- Ganho sobre o baseline:
1 − erro(previsão) / erro(baseline). Um horizonte só é candidato à liberação com ganho de pelo menos 10% sobre o B0, decidido por horizonte. - Separação temporal: a janela usada para ajustar regras e a janela avaliada não se sobrepõem.
- O resultado sai por horizonte, instituição e segmento, com os perfis excluídos e os motivos.
Dados e retenção
- A previsão é dado derivado. Fica guardada por até 13 meses, limitada à vigência das fontes: quando uma fonte é revogada, as previsões que dependem dela são invalidadas e eliminadas em até 15 dias.
- Nenhum valor bancário ou de título vai para log.
Base normativa
- API Contas do Open Finance Brasil 2.5.1
(
api_accounts_-_open_finance_brasil/2.5.1.yaml, lido em 12/10/2026):AccountBalancesData.updateDateTimecomo posição do saldo inicial e do saldo observado na avaliação;amountcomo string^-?\d{1,15}\.\d{2,4}$. - Contrato
obligation-import-v1(Títulos do ERP — contrato v1): decimais textuais em BRL, vencimento e direção dos títulos. - IN BCB nº 615, de 6/5/2025, art. 1º e 3º, vigência a partir de 1º/7/2025, e Manual de APIs do Open Finance Brasil v7.0, seção 5.2, item V: a previsão e a avaliação leem só o que já foi sincronizado; nenhuma chamada nova à instituição.
- Lei nº 13.709/2018 (LGPD), art. 6º, I e III, 15 e 16, e a política de retenção da Malvo aprovada em 10/10/2026 (item 2, dados derivados).
- PRD v1.3, seções 12 e 17 (FR-024 a FR-026), AC-021, AC-023, AC-025 e AC-029. Cenários, premissas, baseline, ganho mínimo de 10% e liberação por horizonte são regras de produto, sem norma externa.