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:
pub enum CreditScorecardBand {
Prime,
Standard,
Guarded,
Probationary,
Restricted,
}| Band | Typical posture |
|---|---|
Prime | High score, full settlement discipline, no loss pressure. Largest facility ceilings. |
Standard | Healthy default tier. Normal facility terms. |
Guarded | Mild signals of stress (slow settlement, mixed-currency book, modest loss pressure). |
Probationary | Sparse history, sparse day coverage, or low confidence. Conservative ceilings, frequent re-evaluation. |
Restricted | Persistent 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:
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>,
}| Dimension | What it scores |
|---|---|
ReputationSupport | The composite reputation score for the subject, attenuated by imported-trust dependencies. |
SettlementDiscipline | Pending vs failed settlement counts on the subject's receipts. |
LossPressure | Outstanding provisional loss amounts not yet recovered. |
ExposureStewardship | Concentration, currency mix, and reserve-aware utilization patterns. |
Confidence
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:
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:
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:
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
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
LocalReputationScorecardfor the subject (see Reputation Scoring), with imported-signal acceptance counted. - Exposure: an
ExposureLedgerReport(schemachio.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
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
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:
| Band | Facility ceiling | Bond requirement | Approval path |
|---|---|---|---|
Prime | Largest configured ceiling | Smallest reserve ratio | Auto-grant via decision policy |
Standard | Standard ceiling | Standard reserve ratio | Auto-grant |
Guarded | Reduced ceiling | Higher reserve ratio | Auto-grant or manual review depending on findings |
Probationary | Conservative ceiling | Mandatory bond | Manual review or stepped grant |
Restricted | No facility | Not applicable | Deny with reason codes |
Operator policy fills in the numbers
Related Reading
- Reputation Scoring · the composite that feeds
ReputationSupport - Credit & Underwriting · how facilities, bonds, and bonded execution sit on top of the scorecard
- Agent Passports · how scorecard-grade evidence is exported across organizational boundaries