///|
pub fn print_banner() -> Unit {
println(
"==========================================================================",
)
println(
" MoonBit 国际贸易单证规范化与互校验库 (moonbit-tradedocs) v0.1.0",
)
println(
" MoonBit International Trade Documents Normalization & Cross-Validation",
)
println(" Deterministic validation toolkit for trade-document workflows")
println(
"==========================================================================",
)
}
///|
pub fn print_help() -> Unit {
print_banner()
println("\nUsage:")
println(" moonbit-tradedocs [options]\n")
println("Commands:")
println(" check Run document internal validation rules")
println(
" cross-check Run multi-document cross-validation engine",
)
println(
" normalize Normalize dates, currencies, and country codes",
)
println(
" anonymize Desensitize trade document set into test fixture",
)
println(
" demo Run sample international trade cross-validation demo",
)
println(" version Print tool version and build information")
println(" help Print this help menu\n")
}
///|
pub fn run_demo() -> Unit {
print_banner()
println("\n[1/5] Constructing Sample Trade Document Set...")
let seller = @types.Party::new(
id="SEL-888",
name="Shenzhen Tech Exports Ltd.",
role=@types.PartyRole::Seller,
tax_id=Some(
@types.TaxIdentifier::new(
country="CN",
tax_id_type="VAT",
number="91440300MA5F1234",
),
),
address=@types.Address::new(
street_address="High-Tech Park",
city="Shenzhen",
country_code="CN",
),
)
let buyer = @types.Party::new(
id="BUY-999",
name="Global Trading Corp",
role=@types.PartyRole::Buyer,
tax_id=Some(
@types.TaxIdentifier::new(
country="US",
tax_id_type="EIN",
number="12-3456789",
),
),
address=@types.Address::new(
street_address="100 Market St",
city="San Francisco",
country_code="US",
),
)
let inv_header = @types.InvoiceHeader::new(
invoice_number="INV-2026-0811",
invoice_date="2026-08-11",
po_number="PO-2026-99",
seller~,
buyer~,
incoterms=@types.Incoterms::FOB,
currency=@types.CurrencyCode::USD,
)
let item1 = @types.LineItem::new(
item_number="1",
sku="SKU-MICRO-01",
description="Microcontroller Development Board",
hs_code=Some(@types.HSCode::from_string("8542.31.00")),
quantity=1000.0,
unit=@types.QuantityUnit::PCS,
unit_price=@types.Money::new(15.0, @types.CurrencyCode::USD),
country_of_origin="CN",
)
let inv_summary = @types.InvoiceSummary::new(
subtotal=@types.Money::new(15000.0, @types.CurrencyCode::USD),
freight=@types.Money::zero(@types.CurrencyCode::USD),
insurance=@types.Money::zero(@types.CurrencyCode::USD),
tax=@types.Money::zero(@types.CurrencyCode::USD),
total_amount=@types.Money::new(15000.0, @types.CurrencyCode::USD),
)
let invoice = @types.CommercialInvoice::new(
header=inv_header,
items=[item1],
summary=inv_summary,
)
println("[2/5] Running Internal Invoice Validation...")
let inv_diags = @single.validate_commercial_invoice(invoice)
println(" Internal Issues Count: " + inv_diags.length().to_string())
println("[3/5] Constructing PO and Cross-Checking...")
let po_header = @types.POHeader::new(
po_number="PO-2026-99",
po_date="2026-08-01",
buyer~,
seller~,
currency=@types.CurrencyCode::USD,
)
let po_item = @types.POItem::new(
item_number=1,
sku="SKU-MICRO-01",
description="Microcontroller Development Board",
quantity=1000.0,
unit=@types.QuantityUnit::PCS,
unit_price=@types.Money::new(15.0, @types.CurrencyCode::USD),
)
let po_summary = @types.POSummary::new(
subtotal=@types.Money::new(15000.0, @types.CurrencyCode::USD),
tax=@types.Money::zero(@types.CurrencyCode::USD),
total_amount=@types.Money::new(15000.0, @types.CurrencyCode::USD),
)
let po = @types.PurchaseOrder::new(
header=po_header,
items=[po_item],
summary=po_summary,
)
let doc_set = @types.DocumentSet::new(
set_id="SET-2026",
invoice=Some(invoice),
purchase_order=Some(po),
)
let report = @cross_check.validate_document_set(doc_set)
let trust = @cross_check.evaluate_document_set_trust(doc_set, report)
println(
" Document Set Trust Score: " +
trust.score.to_string() +
"/100 (Risk Tier: " +
trust.risk_tier.to_string() +
")",
)
println("[4/5] Generating Diagnostic Markdown Report...")
let md_report = report.to_markdown()
println(md_report)
println("[5/5] Demonstrating Anonymizer & JSON Export...")
let anon_inv = @anonymizer.anonymize_invoice(
invoice,
@anonymizer.AnonymizeConfig::default(),
)
let json_str = @adapters.invoice_to_json(anon_inv)
println(json_str)
println("\n✅ Demo execution finished successfully!")
}