FQHC audited-statements payload: the contract (astrelis.fqhc_audit/3)
This page is the contract document the audited-statements section, its twin and its JSON-LD cite, rendered from docs/FQHC_AUDIT_PAYLOAD_CONTRACT.md in the site's repository at build time. The source itself is registered on the data-sources page as SRC-FAC-001.
WEB-05, 2026-10-21 (supersedes astrelis.fqhc_audit/2 of FAC-05, 2026-10-12, and /1 of WEB-02 D5). The health center template renders an "Audited financial statements" section above its Medicare cost-report appendix when, and only when, a file data/generated/fqhc_audit/<id>.json exists for the page's id (the CCN the profile is keyed by). The file is built by scripts/build-fqhc-audit.mjs (quarterly.mjs stage 6n) from the frozen FAC-11 template snapshot under data/sources/fac_audits_fac11/ (written by scripts/_fac11_snapshot.mjs from the fac-audits repository, read only; every source file's sha256 and the fac-audits commit are in its MANIFEST.json); the site reads it with lib/fqhcAudit.ts and computes nothing from it. A file that does not parse, whose schema is not astrelis.fqhc_audit/3, or that carries no organization, is treated as absent.
The reader is one implementation; the twin (<profile URL>.md), the JSON-LD and the page all read the same file through it, and every code the template carries is turned into words in that one file (D-38: a client page prints labels only).
What changed from version 2
- The section reads the FAC-11 template tables themselves (the organization's crosswalk row, its organization row, its three newest non-superseded reports with their status columns, every statement line of those reports, every ratio with its plausibility status, and the cohort medians at every n), not a sixteen-bucket extraction.
- No figure is withheld. Version 2 hid a filing whose extraction did not reconcile to its own totals. Version 3 prints every report's lines beside the report's tie status, every ratio beside its plausibility status, and every median with its n. The owner's ruling of 2026-10-20 (OPEN 25): nothing suppressed, everything labeled.
- Every status column is shown. The organization's cohort status (direct award, pass-through only, no award rows, unresolved), its governmental-unit status, and per report: tie status, reconciliation status, award status on the report, the printed column-year tests for both statements, the net-assets basis, the governmental unit, the units multiplier.
- Matched by name. A crosswalk row whose
identity_statusisNAME_INFERRED(the FACRT-03 name-and-state and own-name profile rows, and the FACLAND rows with no EIN to check) carries the label "matched by name" on the page, in the twin and in the JSON-LD. An identifier-verified row says so; a shared CCN lists every claiming organization; an identifier conflict says so. Inferred is never labeled verified. - One file can carry several organizations (a shared CCN); each renders its own block.
- The FAC-05 sentence "checked against the statements' own totals and the filed pages by Astrelis" is gone; the sentence that replaced it is
TEMPLATE_SENTENCEinlib/fqhcAudit.ts.
Top level
| Field | Type | Meaning |
|---|---|---|
schema | string, exactly astrelis.fqhc_audit/3 | the contract version; any other value makes the file invisible |
id | string | the profile id the file is keyed by (the FQHC CCN); must equal the file name |
source.system | string | Federal Audit Clearinghouse (FAC), single audits as filed |
source.template | string | names the FAC-11 template and the orders applied to it |
source.fac_audits_commit | string or null | the fac-audits commit the snapshot was taken from |
source.snapshot | object | path, frozen_at, and files (the sha256 of every snapshot file) |
source.built_at | ISO date | the day the payload was built |
organizations | array | one object per crosswalk row that attaches this profile, identifier-verified rows first |
Organization object
| Field | Type | Meaning |
|---|---|---|
key | string | the template's organization key: the filed EIN, else UEI:<uei>, else REPORT:<report_id> |
name, state | string | the filed auditee name and state |
basis | string | NONPROFIT, GOVERNMENTAL or NONPROFIT_AS_FILED (printed in words) |
entity_scope | string or null | NONPROFIT_ENTITY or PART_OF_GOVERNMENT (printed in words) |
crosswalk.match_status | string | the template's match status (MATCHED on every row the payload carries) |
crosswalk.match_method | string or null | the tier or rule, in the template's own words (exact name and state (FACLAND tier 1), name and state, own name, ...) |
crosswalk.identity_status | string | IDENTIFIER_VERIFIED, NAME_INFERRED (the page prints "matched by name"), SHARED_CCN, IDENTIFIER_CONFLICT |
crosswalk.profile_attachment | string or null | PROFILE on a row FACRT-03 added for one profile by name |
crosswalk.ein_check, dataset_ein_confidence, candidate_count, ccn_claimed_by_organizations, formula, provider_source | as the template carries them | the evidence behind the match |
status.cohort_status | string or null | DIRECT_AWARD, PASS_THROUGH_ONLY, NO_FQHC_AWARD_ROWS, UNRESOLVED |
status.governmental_unit_status | string or null | NOT_APPLICABLE, HEALTH_UNIT, NON_HEALTH_UNIT, NO_UNIT_SELECTED |
status.hrsa_grant_number, latest_tie_status, latest_audit_year, years_on_file, ties_full_years, holds_a_ties_full_year_in_the_last_three, organization_key_label, cohort_status_basis | as the template carries them | the organization row |
reports | array | the three newest non-superseded reports, newest first |
medians | object or null | basis, audit_year (the newest report's) and rows: every median row for that basis and year (ratio, population, n, value, label, reason, n_non_health_unit) |
Report object
| Field | Type | Meaning |
|---|---|---|
report_id | string | the FAC report id; fac_url is https://app.fac.gov/dissemination/summary/<report_id> |
audit_year, fy_end_date, entity_scope, basis, source | as filed | the report's own fields |
status.tie_status | string | TIES_FULL, TIES_BOTH_NOT_LINKED, TIES_BALANCE_ONLY, TIES_INCOME_ONLY, DOES_NOT_TIE, NO_STATEMENT_READ (printed in words) |
status.reconciliation_status | string or null | ARITHMETICALLY_RECONCILED or NOT_ARITHMETICALLY_RECONCILED |
status.report_award_status | string or null | DIRECT, PASS_THROUGH_ONLY, NOT_FQHC_COHORT, AWARD_ROWS_NOT_IN_LAYER |
status.balance_period_column_status, income_period_column_status | string or null | the printed column-header year test |
status.net_assets_total_basis | string or null | what total net assets was read from |
status.governmental_unit_status, governmental_unit_status_basis | string or null | the unit the governmental statements were read for |
status.units_multiplier, tolerance, first_failing_test, reason | as the template carries them | the tie test's parameters |
lines | array | every template line of the report in template order |
ratios | array | every template ratio of the report |
Line object
| Field | Type | Meaning |
|---|---|---|
line_id | string | the template line id (B01..B19 and I01..I20 for nonprofit bases; G01..G17 for governmental); never printed |
template_line | string | the line's name as the template prints it (printed) |
statement, section | string | balance or income, and the template's section |
value | number or null | dollars as the statement prints them, the units multiplier applied; null when absent |
label | string | EXTRACTED (read from a statement line), DERIVED (summed from extracted lines, formula on file), ABSENT (reason on file) |
members, footing_remainder | number or null | a derived line's member count and remainder |
page, line_label_verbatim, line_source, formula, reason | as the template carries them | the evidence: the PDF page, the caption as printed, native text or OCR, the formula, the absence reason |
Ratio object
ratio (printed in words), value, label, reason, formula, plausibility_status (PLAUSIBLE, OUT_OF_RANGE with plausible_range printed, NOT_COMPUTED), as the template carries them. A ratio out of its possible range is kept as computed and says so.
What the page prints, and what it never does
- The section prints the organization (one or several), the match in words, the organization's status columns, one status row per report, every line of every report with its label state and page, every ratio with its plausibility status beside the cohort medians at every n, and the link to each audit as filed.
- It never computes a figure, never sums parts, never fills a blank, and never withholds a figure the template carries. "Not audited by Astrelis" prints on every section.
- The WR-003 identity rule stands: a profile whose UDS organization is "not established" renders no section.