Chio/Docs

Credit Scorecards

A credit scorecard is the structured artifact a credit underwriter actually reads. The chio-credit crate produces a CreditScorecardReport (schema chio.credit.scorecard.v1) by combining the local reputation scorecard with subject-scoped exposure data, settlement history, and provisional loss signals.


Five Bands

Every scorecard resolves to one of five bands. Bands are ordinal, from most permissive to most restrictive:

Credit scorecard bandsDimensions feeding the scorePrime : high score, full settlement discipline, no loss pressure; largest facility ceilingsPrimestrongest tier | auto ApproveStandard : healthy default tier; normal facility termsStandardhealthy default | auto ApproveGuarded : mild signals of stress (slow settlement, mixed-currency book, modest loss pressure)Guardedmild stress signals | ReduceCeilingProbationary : sparse history, sparse day coverage, or low confidence; conservative ceilingsProbationarysparse history or low confidence | StepUp / manual reviewRestricted : persistent failed settlements, outstanding provisional losses, or low reputation; credit generally deniedRestrictedfailed settlement or low reputation | DenyReputationSupport : the composite reputation score for the subjectReputationSupportcomposite reputation, attenuated by importsSettlementDiscipline : pending vs failed settlement counts on receiptsSettlementDisciplinepending vs failed settlement countsLossPressure : outstanding provisional loss amounts not yet recoveredLossPressureoutstanding provisional lossExposureStewardship : concentration, currency mix, and reserve-aware utilization patternsExposureStewardshipconcentration, currency mix, reservesfeedsfeedsfeedsfeedsauto-approve cutscore >= 0.6 · policy thresholdmanual-review zone0.25 <= score < 0.6 · ReduceCeiling or StepUpauto-deny cutscore < 0.25 · policy floordecision cuts · configurable in the underwriting policybands · most permissive on topdimensions feeding the composite scoreconfidence (Low / Medium / High) is an orthogonal axissample size determines confidence · confidence in turn caps the banddashed = dimension feeds composite score
Credit scorecard bands. Bands map score ranges to default dispositions; the 4 dimensions on the right feed the composite score. Auto-approve and auto-deny cuts are configurable in the underwriting policy.
chio-credit/src/scorecard.rs
pub enum CreditScorecardBand {
    Prime,
    Standard,
    Guarded,
    Probationary,
    Restricted,
}
BandTypical posture
PrimeHigh score, full settlement discipline, no loss pressure. Largest facility ceilings.
StandardHealthy default tier. Normal facility terms.
GuardedMild signals of stress (slow settlement, mixed-currency book, modest loss pressure).
ProbationarySparse history, sparse day coverage, or low confidence. Conservative ceilings, frequent re-evaluation.
RestrictedPersistent failed settlements, outstanding provisional losses, or low reputation. Credit generally denied.

Four Dimensions

A scorecard exposes the band's reasoning across four scored dimensions. Each dimension carries an optional 0.0 to 1.0 score, a weight, a description, and evidence references back to the receipts, decisions, or attestations that justify it:

chio-credit/src/scorecard.rs
pub enum CreditScorecardDimensionKind {
    ReputationSupport,
    SettlementDiscipline,
    LossPressure,
    ExposureStewardship,
}

pub struct CreditScorecardDimension {
    pub kind: CreditScorecardDimensionKind,
    pub score: Option<f64>,
    pub weight: f64,
    pub description: String,
    pub evidence_refs: Vec<CreditScorecardEvidenceReference>,
}
DimensionWhat it scores
ReputationSupportThe composite reputation score for the subject, attenuated by imported-trust dependencies.
SettlementDisciplinePending vs failed settlement counts on the subject's receipts.
LossPressureOutstanding provisional loss amounts not yet recovered.
ExposureStewardshipConcentration, currency mix, and reserve-aware utilization patterns.

Confidence

chio-credit/src/scorecard.rs
pub enum CreditScorecardConfidence {
    Low,
    Medium,
    High,
}

Confidence is a hedge: it captures whether the scorecard has enough evidence to support its band. An agent with a strong reputation score but only 12 receipts cannot get the same band as an agent with the same score and 12000 receipts. Sample size determines confidence; confidence in turn caps the band.

The probation block on the report makes the receipt-count and time-span thresholds explicit:

chio-credit/src/scorecard.rs
pub struct CreditScorecardProbationStatus {
    pub probationary: bool,
    pub reasons: Vec<CreditScorecardReasonCode>,
    pub receipt_count: u64,
    pub span_days: u64,
    pub target_receipt_count: u64,
    pub target_span_days: u64,
}

While receipt_count < target_receipt_count or span_days < target_span_days, the subject is probationary. The reason codes attached to the status say which threshold is missing:

chio-credit/src/scorecard.rs
pub enum CreditScorecardReasonCode {
    SparseReceiptHistory,
    SparseDayHistory,
    LowConfidence,
    PendingSettlementBacklog,
    FailedSettlementBacklog,
    ProvisionalLossPressure,
    MixedCurrencyBook,
    LowReputation,
    ImportedTrustDependency,
    MissingDecisionCoverage,
}

Anomalies and Severity

Anomalies are typed reasons the band would otherwise be too high for the underlying signal. They reuse the same reason-code enum and attach a severity:

chio-credit/src/scorecard.rs
pub enum CreditScorecardAnomalySeverity {
    Info,
    Warning,
    Critical,
}

pub struct CreditScorecardAnomaly {
    pub code: CreditScorecardReasonCode,
    pub severity: CreditScorecardAnomalySeverity,
    pub description: String,
    pub evidence_refs: Vec<CreditScorecardEvidenceReference>,
}

A scorecard with a strong composite score but a FailedSettlementBacklog anomaly at Critical severity will be band-shifted toward Restricted regardless of how clean the reputation looks.


Report Shape

chio-credit/src/scorecard.rs
pub struct CreditScorecardReport {
    pub schema: String,                          // chio.credit.scorecard.v1
    pub generated_at: u64,
    pub filters: ExposureLedgerQuery,
    pub support_boundary: CreditScorecardSupportBoundary,
    pub summary: CreditScorecardSummary,
    pub reputation: CreditScorecardReputationContext,
    pub positions: Vec<ExposureLedgerCurrencyPosition>,
    pub probation: CreditScorecardProbationStatus,
    pub dimensions: Vec<CreditScorecardDimension>,
    pub anomalies: Vec<CreditScorecardAnomaly>,
}

pub struct CreditScorecardSummary {
    pub matching_receipts: u64,
    pub returned_receipts: u64,
    pub matching_decisions: u64,
    pub returned_decisions: u64,
    pub currencies: Vec<String>,
    pub mixed_currency_book: bool,
    pub confidence: CreditScorecardConfidence,
    pub band: CreditScorecardBand,
    pub overall_score: f64,
    pub anomaly_count: u64,
    pub probationary: bool,
}

The CreditScorecardSupportBoundary on every report explicitly declares what the artifact does and does not authoritatively cover. The default boundary is subject_scoped_only = true with cross-currency netting, capital allocation, and facility policy support all turned off.


How a Scorecard Is Produced

A scorecard is built from three local sources, all of which the operator already maintains:

  • Reputation: a LocalReputationScorecard for the subject (see Reputation Scoring), with imported-signal acceptance counted.
  • Exposure: an ExposureLedgerReport (schema chio.credit.exposure-ledger.v1) covering the subject's receipts and underwriting decisions in the window.
  • Settlement: per-receipt SettlementStatus (Pending, Failed, Settled, etc.) drives both settlement discipline and loss pressure dimensions.

The scorecard does not mint capital. It is an evaluation artifact. Capital decisions happen in the credit facility report (schema chio.credit.facility.v1) which embeds the scorecard summary as input.


Worked Examples

Low-volume agent

scorecard-low-volume.txt
Subject: did:chio:11...
Window: 21 days
Receipts: 84 (target: 1000)
Span: 21 days (target: 30)
Reputation composite: 0.79
Pending settlements: 0
Failed settlements: 0
Provisional losses: 0
Currencies: ["USD"]

Probation:
  probationary: true
  reasons: [SparseReceiptHistory, SparseDayHistory]

Confidence: Low
Band:       Probationary
Score:      ~0.79

Dimensions (selected):
  ReputationSupport: score 0.79
  SettlementDiscipline: score 1.00
  LossPressure: score 1.00
  ExposureStewardship: score 0.85

Anomalies:
  - LowConfidence (Info)

The reputation is healthy, but the receipt count and time span haven't cleared the targets. Confidence is Low, the probation block is set, and the band lands at Probationary. A facility may still be granted (the reputation is good), but with a tight ceiling and mandatory re-evaluation after the window grows.

High-volume agent

scorecard-high-volume.txt
Subject: did:chio:22...
Window: 60 days
Receipts: 22_400 (target: 1000)
Span: 60 days (target: 30)
Reputation composite: 0.82
Pending settlements: 12 (against 22_400 receipts)
Failed settlements: 0
Provisional losses: 0
Currencies: ["USD"]

Probation:
  probationary: false
  reasons: []

Confidence: High
Band:       Standard
Score:      ~0.82

Dimensions (selected):
  ReputationSupport: score 0.82
  SettlementDiscipline: score 0.98 (small Pending backlog)
  LossPressure: score 1.00
  ExposureStewardship: score 0.91

Anomalies: []

Same composite reputation, but radically different posture: the history is deep enough for Confidence::High, no probation flags fire, and the band resolves to Standard. A facility built on this scorecard gets normal terms.


Per-Band Consequences

The credit facility layer (schema chio.credit.facility.v1) reads the scorecard and produces terms. The general shape of the consequences:

BandFacility ceilingBond requirementApproval path
PrimeLargest configured ceilingSmallest reserve ratioAuto-grant via decision policy
StandardStandard ceilingStandard reserve ratioAuto-grant
GuardedReduced ceilingHigher reserve ratioAuto-grant or manual review depending on findings
ProbationaryConservative ceilingMandatory bondManual review or stepped grant
RestrictedNo facilityNot applicableDeny with reason codes

Operator policy fills in the numbers

The exact ceiling, reserve ratio, and concentration cap for each band come from the operator's decision policy, not the scorecard. The scorecard provides the band; the policy provides the translation.