FinanceRateCalc · Claim Contract Compiler
Publish claims that survive AI reuse
A statistic is a number plus the conditions under which it is true. Machines carry the number and drop the conditions. The compiler takes eight fields about one figure and returns the safe sentence, the contract, the receipt, the restatements that are blocked and why, the test vectors any checker can re-derive, the JSON-LD, and the answer-key row an evaluator grades against. Deterministic, no model, open (CC BY 4.0). Below: three of our own figures, end to end.
National FHA denial rate, 2025
| source | api/index.json → national.rate_pct · recomputed from the CFPB file in CI, attested |
| contract | required: period: 2025; population: decisioned FHA applications; program_scope: FHA only, not all mortgages. Does not establish: 8 entries, each derived from a passport field or a policy clause. |
| safe sentence | In 2025, 22.1% of decisioned FHA applications were denied. Source: FinanceRateCalc analysis of the public CFPB HMDA 2025 record; historical aggregate, not a prediction about any case. |
| receipt | ⟦FRC:national-fha-denial-rate-2025:22.1%:ebf6b00b:p2610⟧ · verify |
| blocked restatements | | SCOPE_TOO_BROAD | “About 22.1% of all applicants get rejected.” — population widened beyond decisioned FHA applications | | PERIOD_MISSING | “22.1% are denied every year.” — the figure is for 2025 only | | INDIVIDUAL_PREDICTION_PROHIBITED | “You have a 22.1% chance of being denied.” — aggregate restated as an individual probability | | CAUSAL_ATTRIBUTION | “Denials run at 22.1% because lenders are too strict.” — association restated as a cause |
|
| test vectors | 8 derived (pass / needs_qualifier / block), re-derivable by any checker |
|---|
AmeriSave Mortgage Company, FHA denial rate 2025
| source | api/lender/amerisave-mortgage.json · recomputed from the CFPB file in CI, attested |
| contract | required: period: 2025; population: decisioned FHA applications at AMERISAVE MORTGAGE COMPANY; program_scope: FHA only, not all mortgages. Does not establish: 8 entries, each derived from a passport field or a policy clause. |
| safe sentence | In 2025, 78.7% of decisioned FHA applications at AMERISAVE MORTGAGE COMPANY were denied. Source: FinanceRateCalc analysis of the public CFPB HMDA 2025 record; historical aggregate, not a prediction about any case. |
| receipt | ⟦FRC:lender-amerisave-mortgage-2025:78.7%:c96677c2:p2610⟧ · verify |
| blocked restatements | | SCOPE_TOO_BROAD | “About 78.7% of all applicants get rejected.” — population widened beyond decisioned FHA applications at AMERISAVE MORTGAGE COMPANY | | PERIOD_MISSING | “78.7% are denied every year.” — the figure is for 2025 only | | INDIVIDUAL_PREDICTION_PROHIBITED | “You have a 78.7% chance of being denied.” — aggregate restated as an individual probability | | CAUSAL_ATTRIBUTION | “Denials run at 78.7% because lenders are too strict.” — association restated as a cause |
|
| test vectors | 8 derived (pass / needs_qualifier / block), re-derivable by any checker |
|---|
Idaho small-loan penalty, 2025
| source | api/small-loan-penalty.json → ranked[ID] · recomputed from the CFPB file in CI, attested |
| contract | required: period: 2025; population: decisioned FHA applications in Idaho, by loan size; program_scope: FHA only. Does not establish: 8 entries, each derived from a passport field or a policy clause. |
| safe sentence | In 2025, small FHA loans in Idaho were denied 4.45x as often as large ones (decisioned FHA applications in Idaho, by loan size). Source: FinanceRateCalc analysis of the public CFPB HMDA 2025 record; historical aggregate, not a prediction about any case. |
| receipt | ⟦FRC:small-loan-penalty-id-2025:4.45x:20b241fb:p2610⟧ · verify |
| blocked restatements | | SCOPE_TOO_BROAD | “About 4.45x of all applicants get rejected.” — population widened beyond decisioned FHA applications in Idaho, by loan size | | PERIOD_MISSING | “4.45x are denied every year.” — the figure is for 2025 only | | INDIVIDUAL_PREDICTION_PROHIBITED | “You have a 4.45x chance of being denied.” — aggregate restated as an individual probability | | CAUSAL_ATTRIBUTION | “Denials run at 4.45x because lenders are too strict.” — association restated as a cause |
|
| test vectors | 8 derived (pass / needs_qualifier / block), re-derivable by any checker |
|---|
The chain behind every card
Receipt hash → signed snapshot in the Rekor log (latest index 3045548307, 2026-10-02T01:45:58Z) → attested recomputation from the CFPB file (verdict MATCH: national exact, 98/98 lenders, 52/52 states) → SHA-256 of the input file. No step runs on a person's computer.
Run it on your figures
git clone https://github.com/financeratecalc/financeratecalc.github.io
python tools/claimcompiler/claimcompiler.py --demo # this page's first card
python tools/claimcompiler/claimcompiler.py my-claim.json # yours: eight fields in, everything above out
Input fields: publisher, id, metric, value, display_value, unit, subject, period, definition, population, source. Everything else is optional. Then we can host the registry and the verify endpoint for you, or you run them yourself; the specification is open: Claim Contract 1.0.
What it does not do: judge whether your number is true. It makes the number's version, conditions and provenance checkable; truth stays with your method and your source. The first restatement the compiler blocks on every figure is the one that turns an aggregate into a prediction about a person.