feat(sp29): inbox rejected-row 999 ack chips + per-row Resubmit

- backend: _ack_summary_for_claims helper attaches claim_acks payload
  to inbox rejected-lane rows (3 tests)
- frontend: InboxRow renders newest 3 AK2 chips + '+N more' overflow
  under the rejection reason, with '999 not linked' marker when an
  ack couldn't be linked to a claim
- frontend: per-row Resubmit button downloads a single corrected 837
  via api.serializeClaim837 (no bulk modal, no zip — one click, one
  .x12 file)
- frontend: 2 new tests for the chip rendering and the per-row
  download flow
This commit is contained in:
Nora
2026-07-02 13:16:38 -06:00
parent 9cc13e7940
commit ffacfd8665
8 changed files with 596 additions and 8 deletions
+22
View File
@@ -54,6 +54,28 @@ export type InboxClaimRow = {
payer_rejected_by_277ca_id?: string | null;
payer_rejected_acknowledged_at?: string | null;
payer_rejected_acknowledged_actor?: string | null;
// SP29: present on `rejected`-lane rows (999 envelope rejects).
// Newest 5 AK2 set-responses for this claim plus a `total` /
// `rejected` summary. `null` when the claim has zero linked
// 999 acks. Filtered to ack_kind='999' only — the
// `payer_rejected` lane carries 277CA evidence separately.
claim_acks?: InboxClaimAckSummary | null;
};
/**
* SP29: per-claim 999 ack-evidence summary for the Inbox
* `rejected`-lane drill. Newest-first; up to 5 items.
*/
export type InboxClaimAckSummary = {
total: number;
rejected: number;
items: Array<{
ack_id: number;
set_control_number: string;
set_accept_reject_code: string;
ak2_index: number;
linked_at: string;
}>;
};
export type InboxCandidateRow = {