Skip to main content
Version: Next

Domain Events

Lana Bank publishes domain events via the transactional outbox pattern. These events can be consumed by external systems for integration, analytics, and audit purposes.

All events are serialized as JSON and include metadata for tracing and ordering.


Event Structure

Each event is wrapped in an envelope with the following structure:

{
"id": "uuid",
"event_type": "core.credit.facility-activated",
"payload": { ... },
"recorded_at": "2024-01-15T10:30:00Z",
"trace_id": "trace-uuid"
}

Access Events

Events related to user and role management.

EventDescriptionPayload Fields
UserCreatedA new user was createdentity.email, entity.id, entity.role_id
RoleCreatedA new role was createdentity.id, entity.name

Credit Events

Events related to credit facility lifecycle and operations.

Facility Lifecycle

EventDescriptionPayload Fields
FacilityProposalCreatedA credit facility proposal was createdentity.amount, entity.created_at, entity.customer_id, entity.id, entity.status, entity.terms
FacilityActivatedA credit facility was activatedentity.activated_at, entity.activation_tx_id, entity.amount, entity.collateral_id, entity.collateralization, entity.completed_at, entity.customer_id, entity.id, entity.liquidation_trigger
FacilityCompletedA credit facility was fully repaid and closedentity.activated_at, entity.activation_tx_id, entity.amount, entity.collateral_id, entity.collateralization, entity.completed_at, entity.customer_id, entity.id, entity.liquidation_trigger

Collateral Events

EventDescriptionPayload Fields
PendingCreditFacilityCollateralizationChangedCollateralization state changed for pending facilityentity.amount, entity.collateralization, entity.completed_at, entity.created_at, entity.customer_id, entity.id, entity.status, entity.terms
FacilityCollateralizationChangedCollateralization state changed for active facilityentity.activated_at, entity.activation_tx_id, entity.amount, entity.collateral_id, entity.collateralization, entity.completed_at, entity.customer_id, entity.id, entity.liquidation_trigger

Payment Events

EventDescriptionPayload Fields
DisbursalSettledA disbursal was settledentity.amount, entity.credit_facility_id, entity.id, entity.settlement, entity.status
AccrualPostedInterest accrual was postedentity.credit_facility_id, entity.due_at, entity.id, entity.period, entity.posting

Liquidation Events

EventDescriptionPayload Fields
PartialLiquidationInitiatedA partial liquidation was initiatedentity.activated_at, entity.activation_tx_id, entity.amount, entity.collateral_id, entity.collateralization, entity.completed_at, entity.customer_id, entity.id, entity.liquidation_trigger
EventDescriptionPayload Fields
FacilityProposalConcludedNo description availableentity.amount, entity.created_at, entity.customer_id, entity.id, entity.status, entity.terms
PendingCreditFacilityCompletedNo description availableentity.amount, entity.collateralization, entity.completed_at, entity.created_at, entity.customer_id, entity.id, entity.status, entity.terms
DisbursalApprovalConcludedNo description availableentity.amount, entity.credit_facility_id, entity.id, entity.settlement, entity.status

Custody Events

Events related to Bitcoin custody and wallet management.

EventDescriptionPayload Fields
WalletBalanceUpdatedNo description availableentity.address, entity.balance, entity.id, entity.network

Customer Events

Events related to customer lifecycle and KYC.

EventDescriptionPayload Fields
CustomerCreatedA new customer was createdentity.id, entity.kyc_verification, entity.party_id
CustomerKycUpdatedNo description availableentity.id, entity.kyc_verification, entity.party_id
PartyCreatedNo description availableentity.customer_type, entity.email, entity.id
PartyEmailUpdatedNo description availableentity.customer_type, entity.email, entity.id
ProspectCreatedNo description availableentity.id, entity.kyc_status, entity.party_id, entity.stage, entity.status
ProspectKycStartedNo description availableentity.id, entity.kyc_status, entity.party_id, entity.stage, entity.status
ProspectKycPendingNo description availableentity.id, entity.kyc_status, entity.party_id, entity.stage, entity.status
ProspectKycDeclinedNo description availableentity.id, entity.kyc_status, entity.party_id, entity.stage, entity.status
ProspectConvertedNo description availableentity.id, entity.kyc_status, entity.party_id, entity.stage, entity.status
ProspectClosedNo description availableentity.id, entity.kyc_status, entity.party_id, entity.stage, entity.status

Deposit Events

Events related to deposit accounts and transactions.

EventDescriptionPayload Fields
DepositAccountCreatedA deposit account was createdentity.account_holder_id, entity.id
DepositInitializedA deposit was initializedentity.amount, entity.deposit_account_id, entity.id
WithdrawalConfirmedA withdrawal was confirmedentity.amount, entity.deposit_account_id, entity.id, entity.status
WithdrawalApprovalConcludedNo description availableentity.amount, entity.deposit_account_id, entity.id, entity.status
DepositRevertedA deposit was revertedentity.amount, entity.deposit_account_id, entity.id

Price Events

Events related to BTC/USD price updates.

EventDescriptionPayload Fields
PriceUpdatedBTC/USD price was updatedprice, timestamp

Report Events

Events related to report generation.

EventDescriptionPayload Fields
ReportRunCreatedA report run was initiatedentity
ReportRunStateUpdatedA report run state changedentity

Governance Events

Events related to approval workflows.

EventDescriptionPayload Fields
ApprovalProcessConcludedAn approval process was concludedentity.id, entity.process_type, entity.status, entity.target_ref

Event Types Reference

All event types follow the naming convention: core.<module>.<event-name>

ModuleEvent Type Prefix
Accesscore.access.*
Creditcore.credit.*
Custodycore.custody.*
Customercore.customer.*
Depositcore.deposit.*
Pricecore.price.*
Reportcore.report.*
Governancegovernance.*

Consuming Events

Events are published via the transactional outbox and can be consumed through:

  1. Direct database polling - Query the outbox table
  2. Event streaming - Integration with message queues (implementation dependent)
  3. ETL pipelines - Via Meltano extraction

For integration details, contact the platform team.