MoonBit ISO 20022 payment lifecycle validator and reconciliation toolkit.
scripts/check.sh
# Or run the commands directly:
moon check
moon test
moon run cmd/main -- fixtures/valid_pain001.xml
moon run cmd/main -- --format json fixtures/valid_pain001.xml
moon run cmd/main -- --format markdown fixtures/invalid_pain001.xml
moon run cmd/main -- fixtures/valid_pain002.xml
moon run cmd/main -- fixtures/valid_camt053.xml
moon run cmd/main -- reconcile fixtures/valid_pain001.xml fixtures/valid_pain002.xml
moon run cmd/main -- --list-rules
moon run cmd/main -- lifecycle fixtures/lifecycle_pain001.xml fixtures/lifecycle_pain002.xml fixtures/lifecycle_camt053.xml
moon run cmd/main -- audit fixtures/balanced_camt053.xml
moon run cmd/main -- audit fixtures/balance_mismatch_camt053.xml --format json
moon run cmd/main -- audit fixtures/duplicate_camt053.xml --format markdownpub(all) suberror XmlParseError {
XmlParseError(String)
}pub struct Decimal {
minor_units : Int
scale : Int
}pub struct Diagnostic {
code : String
path : String
message : String
}pub struct DuplicateStatementEntry {
end_to_end_id : String
amount : Decimal
currency : String
account_iban : String?
credit_debit : String
reversal : Bool
occurrences : Int
}pub struct LifecycleCase {
end_to_end_id : String
amount : Decimal
currency : String
debtor_iban : String?
creditor_iban : String?
status : String?
statement_role : String
net_posted : Decimal?
reversal_count : Int
state : LifecycleState
action : String
}pub struct LifecycleReport {
cases : Array[LifecycleCase]
orphan_statuses : Array[String]
orphan_statements : Array[String]
}pub(all) enum LifecycleState {
Settled
SettledNotPosted
Rejected
Pending
MissingStatus
StatementMismatch
StatementBeforeFinalStatus
PartiallyRefunded
FullyRefunded
AccountUnmatched
}pub struct MessageInfo {
kind : MessageKind
message_id : String?
creation_datetime : String?
original_message_id : String?
entry_count : Int
}pub(all) enum MessageKind {
Pain001
Pain002
Pacs008
Pacs002
Camt053
Unknown
}pub struct Pain001Summary {
message_id : String?
creation_datetime : String?
payment_instruction_count : Int
transaction_count : Int
}pub struct PaymentRecord {
end_to_end_id : String
amount : Decimal
currency : String
debtor_iban : String?
creditor_iban : String?
}pub struct StatementAuditReport {
account_iban : String?
account_count : Int
entry_count : Int
total_credits : Decimal
total_debits : Decimal
net_movement : Decimal
opening_balance : StatementBalance?
closing_balance : StatementBalance?
expected_closing : Decimal?
closing_difference : Decimal?
balance_status : StatementBalanceStatus
duplicate_entries : Array[DuplicateStatementEntry]
diagnostics : Array[Diagnostic]
}pub(all) enum StatementBalanceStatus {
Balanced
BalanceMismatch
BalanceIncomplete
}pub struct StatementRecord {
end_to_end_id : String
amount : Decimal
currency : String
account_iban : String?
credit_debit : String
reversal : Bool
}fn lifecycle_report(pain_xml : String, status_xml : String, statement_xml : String) -> LifecycleReport raise XmlParseErrorfn reconcile_pain001_status(pain_xml : String, status_xml : String) -> ReconciliationReport raise XmlParseErrorInstall
Download zipMoonBit ISO 20022 payment lifecycle validator and reconciliation toolkit.