Pular para o conteúdo principal
O Lender publica CloudEvents 1.0 em modo binário de conteúdo por meio da biblioteca de streaming da Lerian. A emissão de negócio é apenas via outbox e pelo menos uma vez: a escrita de domínio e o envelope de outbox compartilham uma transação de banco de dados, e o relay publica depois do commit.

Contrato do stream de aplicação

  • ce-source: lender
  • Fatos: lerian.streaming.lender
  • Comandos: lerian.streaming.lender.commands
  • Roteamento de dead letters: lerian.streaming.lender.dlq
  • ce-type: studio.lerian.lender.<resource>.<event>
  • Chave de dispatch: <resource>.<event> a partir de ce-resourcetype e ce-eventtype
O tópico identifica a aplicação produtora e a classe do stream, não um evento específico. Faça o roteamento pelos headers do CloudEvents, não pelo nome do tópico por evento. O Lender expõe o catálogo exato e os tópicos de aplicação em GET /api/v1/streaming/manifest.

Eventos emitidos

O catálogo declara 39 definições. O Lender emite 37 delas: 35 fatos e 2 comandos. A tabela separa as chaves do catálogo do tipo de roteamento do CloudEvent.

Contratos de payload emitidos

Os contratos abaixo espelham as tags JSON de data do CloudEvent no contrato publicado do Lender. ? significa que o campo pode estar ausente. Os structs de wire em Go não declaram campos de ponteiro anuláveis. unknown é JSON bruto e pode carregar qualquer valor JSON, incluindo null. Valores decimais são strings JSON, os timestamps são strings RFC 3339 em UTC, e YYYYMM é uma competência de seis dígitos.
Chave de definição: accounting_profile.configuredTópico: lerian.streaming.lenderEsquema: 1.1.0Assunto: profile_id
effective_from é o dia civil em que o plano de contas que ela descreve passa a valer. Sem esse campo, dois eventos sobre a mesma versão de produto descrevem dois planos diferentes e nada no fio diz qual vale em cada mês.
Chaves de definição: assignment_set.approved, assignment_set.acceptedTópico: lerian.streaming.lenderEsquema: 1.0.0Assunto: assignment_set_idUma composição de cessão é aprovada de forma durável. O evento identifica a aprovação imutável que determina o arquivo de oferta.
Um administrador de fundo aceita a cessão inteira. O evento relata os totais financeiros no nível do conjunto após a baixa dos recebíveis do portfólio do tenant. O campo risk_retention informa o regime de retenção sob o qual a cessão foi registrada. O campo retained_fraction é a parcela da perda esperada que a instituição mantém depois da venda.
Chaves de definição: collection.payment.applied, collection.payment.unapplied, collection.payment.reapplied, collection.payment.refundedTópico: lerian.streaming.lenderEsquema: 1.0.0Assunto: application_id
Chave de definição: loan_application.submittedTópico: lerian.streaming.lenderEsquema: 2.0.0Assunto: loan_application_id
Chave de definição: loan_application.approvedTópico: lerian.streaming.lenderEsquema: 2.0.0Assunto: loan_application_id
Chave de definição: loan_application.rejectedTópico: lerian.streaming.lenderEsquema: 2.0.0Assunto: loan_application_id
Chave de definição: loan_application.withdrawnTópico: lerian.streaming.lenderEsquema: 2.0.0Assunto: loan_application_id
Chave de definição: loan_application.disbursedTópico: lerian.streaming.lenderEsquema: 2.0.0Assunto: loan_application_id
Chave de definição: loan_charge.appliedTópico: lerian.streaming.lenderEsquema: 1.0.0Assunto: loan_account_id
Chave de definição: loan_product.createdTópico: lerian.streaming.lenderEsquema: 1.0.0Assunto: loan_product_id
Chave de definição: loan_product.activatedTópico: lerian.streaming.lenderEsquema: 1.0.0Assunto: loan_product_id
Chave de definição: loan_product.current_version_promotedTópico: lerian.streaming.lenderEsquema: 1.0.0Assunto: loan_product_idO produto é o agregado depois do reapontamento, então current_version_id é o novo pino. Contratos já escritos ficam na versão em que nasceram. Apenas novas solicitações passam a originar na versão promovida. O campo promoted_by contém o sujeito autenticado tal como veio. Ele fica vazio quando nenhuma pessoa pediu a promoção.
Chave de definição: loan_product_version.createdTópico: lerian.streaming.lenderEsquema: 1.0.0Assunto: loan_product_version_id
As faixas mínima e máxima de taxa ficam ausentes quando a versão não guarda nenhuma. Uma versão sem faixa não emite nenhuma das duas chaves, em vez de emitir uma faixa de zero a zero, que se leria como “só 0% é permitido”. O campo admitted_borrower_kinds está sempre presente. Um array vazio significa que a versão não admite nenhum tomador.
Chave de definição: loan_schedule.prepayment_appliedTópico: lerian.streaming.lenderEsquema: 1.0.0Assunto: schedule_version_id
Chave de definição: loan_schedule.rescheduledTópico: lerian.streaming.lenderEsquema: 1.0.0Assunto: schedule_version_id
Chave de definição: repayment.recordedTópico: lerian.streaming.lenderEsquema: 1.0.0Assunto: transaction_id
Chaves de definição: returned_payment_receivable.opened, returned_payment_receivable.collected, returned_payment_receivable.written_offTópico: lerian.streaming.lenderEsquema: 1.0.0Assunto: receivable_idOs três fatos projetam o mesmo agregado por uma única projeção compartilhada, de modo que dois fatos sobre a mesma dívida não podem descrevê-la de formas diferentes. Todo campo está sempre presente. Um campo que ainda não se aplica contém uma string vazia. Ele nunca fica ausente e nunca é null. Leia status para distinguir os estados, não a vacuidade de um campo.Os campos stage e provision_amount trazem o envelhecimento da dívida. Os campos provision_consumed e loss dividem a baixa. O campo reversal_transaction_id é único por recebível e é a âncora à qual uma reentrega do mesmo estorno resolve.
Chave de definição: repayment_reversal.recordedTópico: lerian.streaming.lenderEsquema: 1.0.0Assunto: transaction_id
Chave de definição: loan_account.pdd_stage_transitionedTópico: lerian.streaming.lenderEsquema: 1.0.0Assunto: loan_account_id
Chave de definição: prepayment_quote.createdTópico: lerian.streaming.lenderEsquema: 1.0.0Assunto: quote_id
Chave de definição: prepayment_settlement.recordedTópico: lerian.streaming.lenderEsquema: 1.0.0Assunto: settlement_id
Chave de definição: loan_account.debt_balance_changedTópico: lerian.streaming.lenderEsquema: 2.0.0Assunto: loan_account_id
Chave de definição: loan_account.payment_overdueTópico: lerian.streaming.lenderEsquema: 1.0.0Assunto: loan_account_id
Chave de definição: loan_account.problem_asset_assessedTópico: lerian.streaming.lenderEsquema: 1.0.0Assunto: loan_account_idO Lender o emite nos dois veredictos. Uma declaração com characterizes_problem_asset igual a false é a única forma de retirar uma caracterização anterior.
Chave de definição: loan_account.problem_asset_reassessment_overdueTópico: lerian.streaming.lenderEsquema: 1.0.0Assunto: loan_account_idEste fato é um chamado à revisão. Ele não muda nada no contrato: o estágio, a provisão e a decisão de reconhecimento de receita ficam como estavam. O Lender o emite uma vez por contrato por data de referência, e uma declaração de qualquer veredicto o encerra.
Chave de definição: consignado.exclusao.requestedTópico: lerian.streaming.lender.commandsEsquema: 1.0.0Assunto: request_ref
Chave de definição: consignado.redirecionamento.requestedTópico: lerian.streaming.lender.commandsEsquema: 1.0.0Assunto: request_ref
Chave de definição: payroll_deduction.refund_requiredTópico: lerian.streaming.lenderEsquema: 1.0.0Assunto: receipt_id
Chave de definição: payroll_overdeduction.refund_requiredTópico: lerian.streaming.lenderEsquema: 1.0.0Assunto: refund_case_id
Chave de definição: collection.instruction.issuedTópico: lerian.streaming.lenderEsquema: 1.0.0Assunto: instrument_id
Chave de definição: guarantee_recovery.cash_allocatedTópico: lerian.streaming.lenderEsquema: 1.0.0Assunto: receipt_id

Catalogadas, mas não emitidas

Estas duas definições estão presentes no manifest, mas não têm chamador de emissão do Lender fora de teste. Não trate suas formas de origem lender como integrações operacionais.

Eventos consumidos

O Lender conecta 15 chaves de fato do gateway a partir de lerian.streaming.consignado-gw e um fato do Matcher a partir de lerian.streaming.matcher. Cada consumidor é controlado por configuração e registrado no bootstrap. O gateway tem caminhos de emissão para as primeiras 13 chaves de gateway listadas. O par de portabilidade apenas chega ao Lender quando seu consumidor de resultados está habilitado e o manifest do gateway em produção declara o evento. O manifest não declara os dois resultados de refinanciamento, então esses dois listeners não recebem tráfego do runtime atual do gateway. O Lender não registra consignado.proposal.accepted. Essa chave não é uma entrada de registro do Lender.

Planos de eventos internos

O Lender também grava tipos de evento de outbox internos para intenções de ledger, trabalho de cobrança e handoffs assinados do hub. Eles são contratos de coordenação locais ao processo, não entradas do catálogo de eventos. Este inventário público os omite propositalmente.

Regras de entrega e compatibilidade

  • Faça a deduplicação por (ce-source, ce-id) e torne os handlers idempotentes.
  • Leia ce-schemaversion antes de decodificar. A versão é um header do CloudEvents, nunca um sufixo de tópico.
  • Valores monetários e taxas são strings decimais. Os timestamps são RFC 3339 em UTC.
  • Os consumidores de fatos conectados filtram chaves exatas. Eles ignoram e fazem commit dos fatos não correspondentes nos tópicos de aplicação compartilhados. Registros malformados tratados seguem a política de DLQ do consumidor.
  • Um identificador de negócio obrigatório ausente impede a emissão ou a execução do comando. O Lender nunca o sintetiza.