Import
Intake parses two attested synthetic pipe-delimited files on the server, then creates or refreshes one review by business identity.
Input contract
Both file strings require the exact comment line
# SYNTHETIC QCCRM SNAP-NEGATIVE FIXTURE. Each data row has 42 columns (A–AP),
preserving empty positions. Optional headers must match BIS_HEADERS in order
and precede data. The confirmed layout is documented in
BIS Negative input.
Closed/suspended files supply C/S actions and five-digit 60/61 review numbers. Rejected files supply A actions and six-digit 65/66 numbers. The parser checks record type, required identity fields, dates, duplicate business identities, and source/action consistency. Individual records are rejected. Source filename, row number, and raw text are retained as lineage.
Preview and promotion
Client Inspect
flush pending work → GET /api/reviews for identity/version rows
parseSnapNegativeBatch → cases + findings
POST /api/imports/snap-negative
{ files, identity: { program, fiscalYear, reviewNumber },
expectedVersion: number | null, requestId: UUID }
authorize import role → parse files again → reject batch findings
match selected business identity → findRequest / findBusiness
new: allocate UUIDv7 and bind policy
refresh: keep UUID, saved policy and calc/check bindings
appendReview → return StoredReview
Program manager, admin, and statistics may import. File strings are limited to 1,000,000 characters each. Parsed preview cases have no durable UUID; a new UUID is allocated at promotion. Business keys match rows/maps only and must never be used as review URLs.
Refresh consequences
Refresh replaces examiner completion with imported identity/action facts, empty household
and computation inputs, and state new_active. It retains prior activity and
snapshot history; a dropped review cannot refresh. Expected version and requestId protect
against stale previews and duplicate submissions. Navigate using the returned UUID, not a
review number or a generated fixture key.