Contrato de stream de aplicación
ce-source:lender- Hechos:
lerian.streaming.lender - Comandos:
lerian.streaming.lender.commands - Ruta de dead letters:
lerian.streaming.lender.dlq ce-type:studio.lerian.lender.<resource>.<event>- Clave de despacho:
<resource>.<event>a partir dece-resourcetypeyce-eventtype
GET /api/v1/streaming/manifest.
Eventos emitidos
Lender emite 60 eventos: 59 hechos y 1 comando. La tabla separa las claves de catálogo del tipo de enrutamiento de CloudEvent.Contratos de payload emitidos
Los contratos siguientes reflejan las etiquetas JSONdata de CloudEvent en el contrato publicado de Lender. ? significa que el campo puede estar ausente. unknown es JSON sin procesar y puede llevar cualquier valor JSON, incluido null. Los valores decimales son strings JSON, las marcas de tiempo son strings RFC 3339 en UTC, y YYYYMM es una competência de seis dígitos.
accounting_profile.configured
accounting_profile.configured
accounting_profile.configuredTema: lerian.streaming.lenderEsquema: 1.1.0Asunto: profile_ideffective_from es el día civil en que el plan de cuentas que describe empieza a regir. Sin ese campo, dos eventos sobre la misma versión de producto describen dos planes distintos y nada en el cable dice cuál rige en cada mes.assignment_set.approved / assignment_set.accepted
assignment_set.approved / assignment_set.accepted
assignment_set.approved, assignment_set.acceptedTema: lerian.streaming.lenderEsquema: 1.0.0Asunto: assignment_set_idUna composición de cesión queda aprobada de forma duradera. El evento identifica la aprobación inmutable que determina el archivo de oferta.risk_retention indica el régimen de retención bajo el que se registró la cesión. El campo retained_fraction es la parte de la pérdida esperada que la institución conserva después de la venta.assignment_set.cancelled
assignment_set.cancelled
assignment_set.cancelledTópico: lerian.streaming.lenderEsquema: 1.0.0Asunto: assignment_set_idSe cancela una cesión cuya aprobación se había anunciado, y el conjunto deja de retener toda cuenta por cobrar que aún estaba en él. Un conjunto cancelado antes de su aprobación no publica nada. reason es abandoned, member_ineligible, counterparty_declined, superseded o operator_removed_all_lines. El evento se emite una vez. No hay orden garantizado respecto de assignment_receivable.cut.assignment_receivable.accepted
assignment_receivable.accepted
assignment_receivable.acceptedTópico: lerian.streaming.lenderEsquema: 1.0.0Asunto: receivable_refUn administrador de fondos acepta una cuenta por cobrar de una cesión, en una aceptación parcial o total. receivable_ref nombra el contrato como lo conoce el registro del fondo. offered_receivable_ref es el número que llevan el archivo de oferta y el archivo de retorno. Los dos son iguales, salvo que el registro haya renombrado la cuenta por cobrar después. El evento se emite una vez por cuenta por cobrar.assignment_receivable.cut
assignment_receivable.cut
assignment_receivable.cutTópico: lerian.streaming.lenderEsquema: 1.0.0Asunto: receivable_refUna cuenta por cobrar sale de una cesión aprobada y no se cede en ella. exit_source es remessa cuando el fondo rechaza la cuenta por cobrar en su archivo de retorno, y operator cuando el operador del cliente saca la línea mediante un caso de excepción. repeated_cut_brake es true cuando este corte alcanza el límite de cortes repetidos del fondo y abre un caso. El freno vale para el par de fondo y cuenta por cobrar: la cuenta por cobrar queda fuera de las ofertas a ese fondo hasta que un operador resuelva el caso, y sigue ofrecible a cualquier otro fondo. El evento se emite una vez por cuenta por cobrar. No hay orden garantizado respecto de assignment_set.cancelled.assignment_fund.registered / assignment_fund.updated
assignment_fund.registered / assignment_fund.updated
assignment_fund.registered, assignment_fund.updatedTópico: lerian.streaming.lenderEsquema: 1.1.0Asunto: assignment_fund_idassignment_fund.registered se dispara cuando un registro crea el fondo, activo. assignment_fund.updated se dispara cuando un fondo se edita por ID, aunque ningún valor haya cambiado, y cuando su estado cambia. Conserva el assignment_fund_id. Los dos llevan el mismo payload, así que un suscriptor que nunca vio el primero puede proyectar el fondo a partir del segundo.status es active, suspended o closed, y active es true solo para el primero. updated_at lleva nanosegundos.loan_application.submitted
loan_application.submitted
loan_application.submittedTema: lerian.streaming.lenderEsquema: 2.0.0Asunto: loan_application_idloan_application.approved
loan_application.approved
loan_application.approvedTema: lerian.streaming.lenderEsquema: 2.0.0Asunto: loan_application_idloan_application.rejected
loan_application.rejected
loan_application.rejectedTema: lerian.streaming.lenderEsquema: 2.0.0Asunto: loan_application_idloan_application.withdrawn
loan_application.withdrawn
loan_application.withdrawnTema: lerian.streaming.lenderEsquema: 2.0.0Asunto: loan_application_idloan_application.disbursed
loan_application.disbursed
loan_application.disbursedTema: lerian.streaming.lenderEsquema: 2.0.0Asunto: loan_application_iddisbursed_by es el operador que liberó el desembolso. Puede diferir de assigned_officer_id y está ausente cuando ningún operador lo liberó.loan_application.b3_registered
loan_application.b3_registered
loan_application.b3_registeredTópico: lerian.streaming.lenderEsquema: 1.0.0Asunto: loan_application_idUn cliente, como bancarizadora, registró la CCB de un contrato en B3 e informó a Lender el código del instrumento (Código IF). Lender no ordena nada en ninguna registradora. El evento se publica una vez por contrato. registration_date y ccb_number están ausentes cuando el cliente no los informó.loan_application.registration_recorded
loan_application.registration_recorded
loan_application.registration_recordedTópico: lerian.streaming.lenderEsquema: 1.0.0Asunto: loan_application_idUn cliente registró la CCB de un contrato en una registradora que no es B3 (CERC, Grafeno, Nuclea, TAG u otra que nombra) e informó a Lender el código que asignó. Lender no ordena nada en ninguna registradora. El evento se publica una vez por contrato. registradora_name solo está presente para otra registradora, y registration_date y ccb_number están ausentes cuando el cliente no los informó. Un registro en B3 publica loan_application.b3_registered en su lugar.guarantee.execution_received
guarantee.execution_received
guarantee.execution_receivedTópico: lerian.streaming.lenderEsquema: 1.0.0Asunto: guarantee_idUna ejecución externa de una garantía trajo dinero, y el operador lo dividió entre los contratos que la garantía cubre. Cada recibo nombra el contrato, la asignación completa, cómo se asentó la parte vencida (applied_as: un pago o, en un contrato dado de baja, una recuperación de crédito), lo que pagó la deuda más allá de ella (prepaid_amount) y lo que quedó como dinero retenido del prestatario (held_amount). El evento se publica una vez por solicitud, y una repetición no publica nada.loan_charge.applied
loan_charge.applied
loan_charge.appliedTema: lerian.streaming.lenderEsquema: 1.1.0Asunto: loan_account_idbilled_installment_number y billed_due_date nombran la cuota en que se cobra el cargo. Los dos están ausentes en un cargo registrado antes de que se cobraran los cargos. Existen desde la 1.1.0.loan_product.created
loan_product.created
loan_product.createdTema: lerian.streaming.lenderEsquema: 1.0.0Asunto: loan_product_idloan_product.activated
loan_product.activated
loan_product.activatedTema: lerian.streaming.lenderEsquema: 1.0.0Asunto: loan_product_idloan_product.current_version_promoted
loan_product.current_version_promoted
loan_product.current_version_promotedTema: lerian.streaming.lenderEsquema: 1.0.0Asunto: loan_product_idEl producto es el agregado después del reapuntado, así que current_version_id es el nuevo anclaje. Los contratos ya escritos se quedan en la versión en que nacieron. Solo las nuevas solicitudes se originan en la versión promovida. El campo promoted_by contiene el sujeto autenticado tal cual llegó. Queda vacío cuando ninguna persona pidió la promoción.loan_product.archived
loan_product.archived
loan_product.archivedTema: lerian.streaming.lenderEsquema: 1.0.0Asunto: loan_product_idEl producto es el agregado después del cambio, así que status es el nuevo estado. El campo archived_by contiene el sujeto autenticado tal cual llegó. Queda vacío cuando ninguna persona pidió el cambio.loan_product.unarchived
loan_product.unarchived
loan_product.unarchivedTema: lerian.streaming.lenderEsquema: 1.0.0Asunto: loan_product_idEl producto es el agregado después del cambio, así que status es el nuevo estado. El campo unarchived_by contiene el sujeto autenticado tal cual llegó. Queda vacío cuando ninguna persona pidió el cambio.loan_product_version.created
loan_product_version.created
loan_product_version.createdTema: lerian.streaming.lenderEsquema: 1.0.0Asunto: loan_product_version_idmin_annual_rate_bps y max_annual_rate_bps son la banda de la versión en puntos básicos anuales efectivos, y fixed_monthly_rate es la tasa mensual como cadena decimal. Las claves de la banda quedan ausentes cuando la versión no guarda ninguna. Una versión sin banda no emite ninguna de las dos claves, en lugar de emitir una banda de cero a cero, que se leería como “solo se permite 0%”. El campo admitted_borrower_kinds siempre está presente. Un arreglo vacío significa que la versión no admite ningún prestatario.terms guarda los términos de la versión con el formato de la API. refinance, late_payment y payoff_quote_validity_hours están ausentes cuando la versión no los define, igual que un límite no definido de limits.loan_schedule.prepayment_applied
loan_schedule.prepayment_applied
loan_schedule.prepayment_appliedTema: lerian.streaming.lenderEsquema: 1.0.0Asunto: schedule_version_idloan_schedule.rescheduled
loan_schedule.rescheduled
loan_schedule.rescheduledTema: lerian.streaming.lenderEsquema: 1.1.0Asunto: schedule_version_idfinanced_tax_amount es el impuesto que la reprogramación cobró y financió en el principal. Es 0.00 cuando no hay. replacement_loan_account_id es el contrato que una renegociación sustancial abrió en lugar de este. Está ausente en los demás casos.loan_schedule.index_fixed
loan_schedule.index_fixed
loan_schedule.index_fixedTópico: lerian.streaming.lenderEsquema: 1.0.0Asunto: schedule_version_idSe dispara cuando una fila posfijada de una cuenta de préstamo se fija en el índice publicado y una versión sucesora del cronograma lleva la diferencia. La fijación en sí (la fila, el factor del índice y los intereses proyectado y efectivo) se lee del cronograma.repayment.recorded
repayment.recorded
repayment.recordedTema: lerian.streaming.lenderEsquema: 1.0.0Asunto: transaction_idreturned_payment_receivable.opened / returned_payment_receivable.collected / returned_payment_receivable.written_off
returned_payment_receivable.opened / returned_payment_receivable.collected / returned_payment_receivable.written_off
returned_payment_receivable.opened, returned_payment_receivable.collected, returned_payment_receivable.written_offTema: lerian.streaming.lenderEsquema: 1.0.0Asunto: receivable_idLos tres hechos proyectan el mismo agregado por una única proyección compartida, de modo que dos hechos sobre la misma deuda no pueden describirla de formas distintas. Todo campo está siempre presente. Un campo que todavía no aplica contiene una cadena vacía. Nunca está ausente y nunca es null. Lee status para distinguir los estados, no la vacuidad de un campo.Los campos stage y provision_amount traen el envejecimiento de la deuda. Los campos provision_consumed y loss dividen el castigo. El campo reversal_transaction_id es único por cuenta por cobrar y es el ancla a la que resuelve una reentrega de la misma reversión.repayment_reversal.recorded
repayment_reversal.recorded
repayment_reversal.recordedTema: lerian.streaming.lenderEsquema: 1.0.0Asunto: transaction_idloan_account.pdd_stage_transitioned
loan_account.pdd_stage_transitioned
loan_account.pdd_stage_transitionedTema: lerian.streaming.lenderEsquema: 1.0.0Asunto: loan_account_idprepayment_quote.created
prepayment_quote.created
prepayment_quote.createdTema: lerian.streaming.lenderEsquema: 1.0.0Asunto: quote_idinstrument_id, instrument_type e instrument_requested_at están ausentes cuando el efectivo retenido cubre la liquidación.prepayment_settlement.recorded
prepayment_settlement.recorded
prepayment_settlement.recordedTema: lerian.streaming.lenderEsquema: 1.0.0Asunto: settlement_idnet_settlement_amount más held_cash_applied es igual a final_principal_amount más accrued_interest más final_charge_amount más final_iof_amount más late_charges más fees. final_interest_amount es solo divulgación (Portaria MTE 435/2025 art. 17): son intereses futuros perdonados, nunca devengados y nunca parte del efectivo de la liquidación. interest_to_refund son cobros de intereses pagados después de la salida de la liquidación, que se deben devolver al prestatario. held_cash_to_refund es lo que la liquidación dejó del efectivo retenido.loan_account.payoff_refund_recorded
loan_account.payoff_refund_recorded
loan_account.payoff_refund_recordedTópico: lerian.streaming.lenderEsquema: 1.0.0Asunto: refund_idUn cliente pagó a un prestatario, fuera de Lender, intereses o efectivo retenido que una liquidación debía devolver, y el reembolso dejó en cero esa parte del efectivo retenido.loan_account.written_off
loan_account.written_off
loan_account.written_offTópico: lerian.streaming.lenderEsquema: 1.0.0Asunto: write_off_idUna cuenta de préstamo de crédito directo se da de baja como pérdida de crédito (Res. CMN 4.966 art. 49). El efectivo retenido paga primero la deuda, el asiento limpia el libro contra el ingreso retenido y la provisión, y el contrato sale del libro.loan_account.credit_loss_recovered
loan_account.credit_loss_recovered
loan_account.credit_loss_recoveredTópico: lerian.streaming.lenderEsquema: 1.0.0Asunto: recovery_idEl dinero que un prestatario dado de baja paga después salda la deuda antigua. El evento divide el monto entre lo que salda la baja, el ingreso nuevo y su impuesto, el control liberado y la deuda que queda.loan_account.credit_loss_recovery_reversed
loan_account.credit_loss_recovery_reversed
loan_account.credit_loss_recovery_reversedTópico: lerian.streaming.lenderEsquema: 1.0.0Asunto: recovery_idUn operador devuelve una recuperación. El ingreso, el impuesto y el control que la recuperación registró se revierten, y la deuda sigue en pie.loan_account.write_off_collection_ended / loan_account.write_off_control_released
loan_account.write_off_collection_ended / loan_account.write_off_control_released
loan_account.write_off_collection_ended, loan_account.write_off_control_releasedTópico: lerian.streaming.lenderEsquema: 1.0.0Asunto: write_off_idloan_account.write_off_collection_ended se dispara cuando el operador del cliente declara que terminó la cobranza de una cuenta de préstamo dada de baja (Res. CMN 4.966 art. 49 par. 1). loan_account.write_off_control_released se dispara cuando el resto del control de la baja sale de la contabilidad, en la más tardía entre 5 años después de la baja y el fin declarado de la cobranza. control_released es el monto liberado.retained_installment.written_off / retained_installment.write_off_collection_ended / retained_installment.write_off_control_released
retained_installment.written_off / retained_installment.write_off_collection_ended / retained_installment.write_off_control_released
retained_installment.written_off, retained_installment.write_off_collection_ended, retained_installment.write_off_control_releasedTópico: lerian.streaming.lenderEsquema: 1.0.0Asunto: retained_installment_idretained_installment.written_off se dispara cuando el operador cierra una cuota retenida corta en la mesa y el resto se da de baja como pérdida de crédito del cliente. retained_installment.write_off_collection_ended se dispara cuando el operador del cliente declara que terminó la cobranza de ese resto (Res. CMN 4.966 art. 49 par. 1). retained_installment.write_off_control_released se dispara cuando lo que quedaba del control del art. 49 del resto sale de la contabilidad. control_released es el monto liberado.loan_account.debt_balance_changed
loan_account.debt_balance_changed
loan_account.debt_balance_changedTema: lerian.streaming.lenderEsquema: 2.0.0Asunto: loan_account_idloan_account.payment_overdue
loan_account.payment_overdue
loan_account.payment_overdueTema: lerian.streaming.lenderEsquema: 1.0.0Asunto: loan_account_idloan_account.problem_asset_assessed
loan_account.problem_asset_assessed
loan_account.problem_asset_assessedTema: lerian.streaming.lenderEsquema: 1.0.0Asunto: loan_account_idLender lo emite en los dos veredictos. Una declaración con characterizes_problem_asset en false es la única forma de retirar una caracterización anterior.loan_account.problem_asset_reassessment_overdue
loan_account.problem_asset_reassessment_overdue
loan_account.problem_asset_reassessment_overdueTema: lerian.streaming.lenderEsquema: 1.0.0Asunto: loan_account_idEste hecho es un llamado a revisión. No cambia nada en el contrato: la etapa, la provisión y la decisión de reconocimiento de ingresos quedan como estaban. Lender lo emite una vez por contrato por fecha de negocio, y una declaración de cualquiera de los dos veredictos lo cierra.consignado.exclusao.requested
consignado.exclusao.requested
consignado.exclusao.requestedTema: lerian.streaming.lender.commandsEsquema: 1.0.0Asunto: request_refpayroll_deduction.refund_required
payroll_deduction.refund_required
payroll_deduction.refund_requiredTema: lerian.streaming.lenderEsquema: 1.1.0Asunto: receipt_idamount es el reembolso de este evento: el primer reembolso, o un crecimiento. Un crecimiento emite un evento más con el mismo receipt_id. refunded_total guarda los reembolsos del recibo después de este evento; en el primer evento es igual a amount. Está ausente en los eventos 1.0.0. Un suscriptor que deduplica por receipt_id usa el par (receipt_id, refunded_total) como clave: un reenvío repite el par, y un crecimiento trae un total mayor.payroll_overdeduction.refund_required
payroll_overdeduction.refund_required
payroll_overdeduction.refund_requiredTema: lerian.streaming.lenderEsquema: 1.1.0Asunto: refund_case_idamount es el reembolso de este evento: el monto de apertura del caso, o un crecimiento. Un crecimiento emite un evento más con el mismo refund_case_id. refunded_total guarda el monto del caso después de este evento; en el evento de apertura es igual a amount. Está ausente en los eventos 1.0.0. Un suscriptor que deduplica por refund_case_id usa el par (refund_case_id, refunded_total) como clave: un reenvío repite el par, y un crecimiento trae un total mayor.collection.instruction.issued
collection.instruction.issued
collection.instruction.issuedTema: lerian.streaming.lenderEsquema: 1.0.0Asunto: instrument_idcollection.instruction.withdrawn
collection.instruction.withdrawn
collection.instruction.withdrawnTópico: lerian.streaming.lenderEsquema: 1.0.0Asunto: instrument_idLender retiró una instrucción de cobranza que tiene el agente de cobranza del cliente, porque la cuota se acreditó de otra forma, o porque se retiró la instrucción de liquidación anticipada del fondo de un contrato cedido y refinanciado. En el segundo caso, reason es fund_settlement_withdrawn y competencia queda vacía. El agente da de baja ese boleto. Solo un canal designado para tratar el retiro recibe el evento. No nombra monto ni reemplazo: lo que el prestatario aún debe llega como un evento collection.instruction.issued propio.collection.payment.applied
collection.payment.applied
collection.payment.appliedTópico: lerian.streaming.lenderEsquema: 1.0.0Asunto: application_idTodo evento collection.payment.* mantiene la regla de conservación: applied_amount + unapplied_amount + refunded_amount es igual a received_amount. Un refunded_amount ausente vale cero.applied_amount es positivo, refunded_amount está ausente y applied_transaction_id está informado.collection.payment.unapplied
collection.payment.unapplied
collection.payment.unappliedTópico: lerian.streaming.lenderEsquema: 1.0.0Asunto: application_idLleva el mismo payload que collection.payment.applied. unapplied_amount es positivo, refunded_amount está ausente y repair_reason está informado.collection.payment.reapplied
collection.payment.reapplied
collection.payment.reappliedTópico: lerian.streaming.lenderEsquema: 1.0.0Asunto: application_idLleva el mismo payload que collection.payment.applied. applied_amount es positivo, refunded_amount está ausente y applied_transaction_id está informado.collection.payment.refunded
collection.payment.refunded
collection.payment.refundedTópico: lerian.streaming.lenderEsquema: 1.0.0Asunto: application_idLleva el mismo payload que collection.payment.applied. refunded_amount es positivo, unapplied_amount es 0, y refund_request_id y refund_transaction_id están informados.collection.payment.routed_to_fund
collection.payment.routed_to_fund
collection.payment.routed_to_fundTópico: lerian.streaming.lenderEsquema: 1.0.0Asunto: application_idLleva el mismo payload que collection.payment.applied.collection.payment.routed_to_retained
collection.payment.routed_to_retained
collection.payment.routed_to_retainedTópico: lerian.streaming.lenderEsquema: 1.0.0Asunto: application_idLleva el mismo payload que collection.payment.applied.consignado.booking.quarantined
consignado.booking.quarantined
consignado.booking.quarantinedTópico: lerian.streaming.lenderEsquema: 1.0.0Asunto: contract_idLender puso en cuarentena el registro de un contrato averbado hasta que un operador lo libere. reason es terminal_refusal o attempt_budget_exhausted.guarantee_recovery.cash_allocated
guarantee_recovery.cash_allocated
guarantee_recovery.cash_allocatedTema: lerian.streaming.lenderEsquema: 1.0.0Asunto: receipt_idrefund es el efectivo de indemnización por encima de la deuda, devuelto al trabajador. amount es igual a la suma de repayment_applied, prepayment_applied, unapplied y refund.Catalogados pero no emitidos
Estas dos definiciones están presentes en el manifest, pero no tienen ningún llamador de emisión de Lender que no sea de prueba. No trates sus formas con origen enlender como integraciones operativas.
Eventos consumidos
Lender conecta claves de hecho del gateway delerian.streaming.consignado-gw y un hecho de Matcher de lerian.streaming.matcher. Cada consumidor se controla por configuración y se registra en el bootstrap.
consignado.refinanciamento.efetivado lleva novo_contrato. Sin ese bloque, Lender deja el hecho en cuarentena para una intervención operativa. Lender no registra consignado.proposal.accepted. Esa clave no es una entrada de contabilización para Lender.
Planos internos de eventos
Lender también escribe tipos de eventos de outbox internos para intenciones de ledger, trabajo de cobranza y traspasos firmados al hub. Son contratos de coordinación locales al proceso, no entradas del catálogo de eventos. Este inventario público los omite a propósito.Reglas de entrega y compatibilidad
- Deduplica por
(ce-source, ce-id)y haz que los handlers sean idempotentes. - Lee
ce-schemaversionantes de decodificar. La versión es un header de CloudEvents, nunca un sufijo de tema. - El dinero y las tasas son strings decimales. Las marcas de tiempo son RFC 3339 en UTC.
- Los consumidores de hechos conectados filtran claves exactas. Omiten y confirman los hechos no coincidentes en los temas de aplicación compartidos. Los registros manejados con formato incorrecto siguen la política de DLQ del consumidor.
- La ausencia de un identificador de negocio requerido impide la emisión o la ejecución del comando. Lender nunca lo sintetiza.

