Credit Scorecards
Read a credit scorecard's band, confidence, and anomalies, and see the facility terms each band produces.
On this page
From the receipts, reputation, and settlement history an operator already keeps, a credit scorecard signs one classification of an agent: a band, the confidence behind it, and the anomalies that explain both. The band sizes the agent's credit by deciding what a credit facility may grant.
The running example is a captured export for an agent with three clean receipts, which scores as probationary because three receipts are too little history to support more.
Three clean receipts stay probationary
The captured subject has three governed receipts and one underwriting decision. That history meets neither target_receipt_count nor target_span_days, so confidence is Low and the band is Probationary. The facility report routes a probationary subject to ManualReview and builds no terms.
chio.credit.scorecard.v1 report: three local sources scored into a band and a confidence level, and the facility disposition the band leads to. The thin-history view follows the captured export; dimension weights, evidence references, and facility terms are left out.Three clean receipts still score as probationary
The captured agent holds three allowed receipts on one tool server, ledger, each for settle_invoice with a governed ceiling of 2,500 minor units ($25), plus one underwriting decision. The export reads them from the receipt store and signs the result with the authority seed.
$ chio --receipt-db ./receipts.db trust credit-scorecard export \
--agent fixer \
--authority-seed-file ./authority.seedschema: chio.credit.scorecard.v1 generated_at: 1788542733 signer_key: fb4d4902815fd5db1e628702eeb87c48271872ac2fde57298767c3f8c04f9402 subject_key: 3b9ed9e1a200eec3b3fcc461f54ca1cf8af94e7ab205751d0d330320afedcb41 overall_score: 0.6000 confidence: Low band: Probationary probationary: true matching_receipts: 3 matching_decisions: 1 anomaly_count: 1
You should see eleven aligned lines: the schema, the generation time, the key that signed the export, the subject, and the summary fields that decide the band. Three receipts clear neither target_receipt_count nor target_span_days, so probationary is true, confidence is Low, and the band is Probationary even though every receipt settled cleanly. The single anomaly is the one low confidence raises.
Inspect the source receipts and the signed summary
The three receipts the export scores, with the governed amount each one carried:
$ chio --receipt-db ./receipts.db receipt list --admin-all \
| jq -r '[.decision.verdict, .tool_server, .tool_name, .metadata.governed_transaction.max_amount.units] | @tsv'allow ledger settle_invoice 2500 allow ledger settle_invoice 2500 allow ledger settle_invoice 2500
With --json, the same run emits a SignedExportEnvelope: a body holding the report, a signerKey, and a signature over the canonical JSON of the body, with deny_unknown_fields and camelCase keys. Piped through jq '.body.summary', the camelCase keys and snake_case enum values are the wire form of the summary struct.
$ chio --receipt-db ./receipts.db --json trust credit-scorecard export \
--agent fixer \
--authority-seed-file ./authority.seed \
| jq '.body.summary'{
"matchingReceipts": 3,
"returnedReceipts": 3,
"matchingDecisions": 1,
"returnedDecisions": 1,
"currencies": [
"USD"
],
"mixedCurrencyBook": false,
"confidence": "low",
"band": "probationary",
"overallScore": 0.6,
"anomalyCount": 1,
"probationary": true
}Confidence caps what a strong record can earn
Every scorecard resolves to one of five ordinal bands, from most permissive to most restrictive: Prime, Standard, Guarded, Probationary, Restricted. A band is a categorical output. It follows from the reason codes, the anomalies, and the confidence the evidence supports, and chio-credit encodes no score threshold per band.
The reasoning is spread across four scored dimensions. Each carries an optional score from 0.0 to 1.0, a weight, a description, and evidence references back to the receipts, decisions, or attestations behind it:
ReputationSupportscores the subject's composite reputation, attenuated by imported-trust dependencies.SettlementDisciplineweighs pending against failed settlement counts on the subject's receipts.LossPressuremeasures provisional loss amounts still outstanding against the subject.ExposureStewardshipreads concentration, currency mix, and reserve-aware utilization.
Sample size sets confidence (Low, Medium, or High), and confidence caps the band. An agent with a strong reputation score and 12 receipts cannot reach the band of an agent with the same score and 12,000. The subject stays probationary while receipt_count < target_receipt_count or span_days < target_span_days, and the reason codes SparseReceiptHistory and SparseDayHistory name the target it misses.
Read more in Reputation Scoring, which builds the composite behind ReputationSupport.
A critical anomaly outweighs a clean reputation
An anomaly is a typed reason the band would otherwise sit too high for the underlying signal. It reuses the reason-code enum and adds a severity of Info, Warning, or Critical, with a description and its own evidence references.
Severity moves the band. A scorecard with a strong composite score and a FailedSettlementBacklog anomaly at Critical shifts toward Restricted, however clean the reputation looks. The other reason codes cover the remaining pressures: pending settlement backlog, provisional loss, a mixed-currency book, low reputation, imported trust, and missing decision coverage.
The export refuses to sign a scorecard it cannot ground
A scorecard needs a signing key, receipts for the subject, and money on those receipts. A missing prerequisite exits 1 with an empty stdout instead of producing an empty scorecard. Without a signing key:
$ chio --receipt-db ./receipts.db trust credit-scorecard export --agent fixererror[CHIO-CLI-SIGNING-KEY-REQUIRED]: the export is signed, and no signing key was given help: pass --authority-seed-file <path> or --authority-db <path> code: urn:chio:error:cli:signing-key-required docs: https://chio.computer/docs/reference/errors#error-cli-signing-key-required
With a key, against a store that holds no receipt for the subject:
$ chio --receipt-db ./empty.db trust credit-scorecard export \
--agent fixer \
--authority-seed-file ./authority.seederror[CHIO-ECONOMY-SCORECARD-EMPTY]: no governed receipt in the store matches the selected agent help: point --receipt-db at the store that holds the agent's governed receipts, or run governed calls as the agent first code: urn:chio:error:economy:scorecard-empty docs: https://chio.computer/docs/reference/errors#error-economy-scorecard-empty
The third gate needs monetary exposure. credit_scorecard_position_denominator returns a value only when governed exposure, or settled plus pending plus failed units, is above zero. A subject whose receipts carry no governed_transaction.max_amount and no charged cost has receipts to count and nothing to score, and the export answers credit scorecard requires monetary exposure in the requested window.
The local reputation scorer returns Unknown metrics against an empty store. The credit export signs nothing at all, so every scorecard an operator reads rests on governed spend.
The band sets a facility's limit and terms
A scorecard is an evaluation report and mints no capital. The credit facility report carries its summary in a scorecard field, derives a disposition from it, and builds terms only when that disposition is Grant:
Denywhen the band isRestricted, the subject misses the minimum runtime assurance tier, or the tool server requires certification and none is active.ManualReviewwhen the book is mixed-currency, the scorecard carriesFailedSettlementBacklogorPendingSettlementBacklog, the subject is probationary, or runtime-assurance evidence came from more than one verifier family.Grantotherwise.
The credit limit is the subject's own exposure scaled by the band and then by confidence, and floored: floor(base_units × band_factor × confidence_factor). The confidence factor is 1.0 for High, 0.9 for Medium, and 0.75 for Low.
| Band | Limit factor | Utilization ceiling | Reserve ratio | Concentration cap | Term |
|---|---|---|---|---|---|
Prime | 1.0 | 9000 bps | 1000 bps | 3500 bps | 30 days |
Standard | 0.85 | 8000 bps | 1500 bps | 3000 bps | 14 days |
Guarded | 0.65 | 6500 bps | 2500 bps | 2000 bps | 7 days |
Probationary | 0.40 | No terms | No terms | No terms | No terms |
Restricted | 0.0 | No facility | No facility | No facility | No facility |
For a Probationary band the terms builder returns None, and the disposition is ManualReview regardless. A Restricted band is denied. The two weakest bands also demand the strongest attestation: credit_facility_minimum_runtime_assurance_tier asks RuntimeAssuranceTier::Attested of Prime, Standard, and Guarded, and Verified of Probationary and Restricted. A thin history without verified runtime attestation is denied on that prerequisite before the band is weighed.
Terms carry their own ttl_seconds, which expires a granted facility. A report without terms falls back to seven days for Grant and ManualReview and one day for Deny. Every granted facility is stamped CreditFacilityCapitalSource::OperatorInternal: the capital behind it is the operator's own.
Read more in Credit Facilities, which follows a granted facility through allocation, bonds, and loss.
Scorecard report fields and enums
Search for SparseDayHistory, ExposureStewardship, or --receipt-limit.
The types below are defined in crates/economy/chio-credit/src/lib.rs.
Report shape
pub struct CreditScorecardReport {
pub schema: String,
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>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub anomalies: Vec<CreditScorecardAnomaly>,
}schema is CREDIT_SCORECARD_SCHEMA, chio.credit.scorecard.v1. The summary collapses the whole book into one row:
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,
}Each report carries a CreditScorecardSupportBoundary declaring what it authoritatively covers. The default is subject_scoped_only = true, with cross-currency netting, capital allocation, and facility policy support turned off.
Bands
pub enum CreditScorecardBand {
Prime,
Standard,
Guarded,
Probationary,
Restricted,
}Prime: high score, clean settlement record, no loss pressure.Standard: the healthy default tier.Guarded: mild signals of stress, such as slow settlement, a mixed-currency book, or modest loss pressure.Probationary: sparse receipt history, sparse day coverage, or low confidence.Restricted: persistent failed settlements, outstanding provisional losses, or low reputation.
Dimensions
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>,
}Confidence
pub enum CreditScorecardConfidence {
Low,
Medium,
High,
}Probation status
The probation block makes the receipt-count and time-span targets 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,
}Reason codes
pub enum CreditScorecardReasonCode {
SparseReceiptHistory,
SparseDayHistory,
LowConfidence,
PendingSettlementBacklog,
FailedSettlementBacklog,
ProvisionalLossPressure,
MixedCurrencyBook,
LowReputation,
ImportedTrustDependency,
MissingDecisionCoverage,
}Anomalies and severity
pub enum CreditScorecardAnomalySeverity {
Info,
Warning,
Critical,
}
pub struct CreditScorecardAnomaly {
pub code: CreditScorecardReasonCode,
pub severity: CreditScorecardAnomalySeverity,
pub description: String,
pub evidence_refs: Vec<CreditScorecardEvidenceReference>,
}Sources, command, and route
A scorecard is built from three local sources 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, and the rest) drives both the settlement-discipline and loss-pressure dimensions.
Export a scorecard with chio trust credit-scorecard export, or read the same signed report from the trust control plane at GET /v1/reports/credit-scorecard. The export resolves against a local receipt store (--receipt-db) or a remote trust control plane (--control-url). --since and --until narrow the window; --receipt-limit (default 100) and --decision-limit (default 50) bound the rows read.
Facility records built on a scorecard
A CreditFacilityReport (schema chio.credit.facility-report.v1) carries the scorecard summary in its scorecard field and adds a disposition, prerequisites, terms, and findings. The CreditFacilityArtifact (schema chio.credit.facility.v1) wraps that report with a facility id, an expiry, and a lifecycle state.