feat(ocr): discard abandoned capture batches
A bad scan, the wrong PDFs or a duplicate upload used to leave a batch sitting in READY_FOR_REVIEW forever, because the only exits were confirm (posts to the books) or rejecting every page one at a time. Add a DISCARDED terminal status to both OCR domains and a single endpoint per domain that rejects every page still pending in one shot. Discarding is refused once anything has landed: statements once a page is POSTED, policies once a page is APPLIED. Those batches did real work and have to be settled page by page. - POST /statements/batches/:id/discard - POST /policy-ocr/batches/:id/discard - shared DiscardBatchCard on both review screens, gated the same way
This commit is contained in:
@@ -27,6 +27,7 @@ import type {
|
||||
CreateBankInput,
|
||||
CreateBankMovementInput,
|
||||
CreateMovementInput,
|
||||
DiscardBatchResult,
|
||||
UpdateBankAccountInput,
|
||||
ResolveOutstandingInput,
|
||||
ReviewDocumentInput,
|
||||
@@ -1079,6 +1080,11 @@ export function confirmStatementBatch(
|
||||
});
|
||||
}
|
||||
|
||||
/** Abandon a batch pending review; rejects every page that is not posted. */
|
||||
export function discardStatementBatch(batchId: string): Promise<DiscardBatchResult> {
|
||||
return apiFetch(`/statements/batches/${batchId}/discard`, { method: "POST" });
|
||||
}
|
||||
|
||||
/** The rendered page image. A plain <img src> — the cookie rides along. */
|
||||
export function statementPageUrl(documentId: string): string {
|
||||
return `${API_ORIGIN}/statements/documents/${documentId}/page`;
|
||||
@@ -1168,6 +1174,11 @@ export function confirmPolicyOcrBatch(
|
||||
});
|
||||
}
|
||||
|
||||
/** Abandon a batch pending review; rejects every page that is not applied. */
|
||||
export function discardPolicyOcrBatch(batchId: string): Promise<DiscardBatchResult> {
|
||||
return apiFetch(`/policy-ocr/batches/${batchId}/discard`, { method: "POST" });
|
||||
}
|
||||
|
||||
/**
|
||||
* URL for the source PDF of a parsed policy document. The endpoint returns
|
||||
* the original upload (one PDF = one parsed policy), not a rendered page
|
||||
|
||||
@@ -1217,7 +1217,9 @@ export type StatementBatchStatus =
|
||||
| "PROCESSING"
|
||||
| "READY_FOR_REVIEW"
|
||||
| "COMPLETED"
|
||||
| "FAILED";
|
||||
| "FAILED"
|
||||
/** Abandoned by staff before anything was posted. */
|
||||
| "DISCARDED";
|
||||
|
||||
export type StatementDocumentStatus =
|
||||
| "PENDING_OCR"
|
||||
@@ -1296,6 +1298,12 @@ export interface ConfirmBatchResult {
|
||||
checkNumber: string;
|
||||
}
|
||||
|
||||
/** Shared by both OCR domains: how many pages the discard rejected. */
|
||||
export interface DiscardBatchResult {
|
||||
batchId: string;
|
||||
rejected: number;
|
||||
}
|
||||
|
||||
/* ------------------------------------------ Policy OCR intake (GMX) */
|
||||
|
||||
export type PolicyOcrBatchStatus =
|
||||
@@ -1303,7 +1311,9 @@ export type PolicyOcrBatchStatus =
|
||||
| "PROCESSING"
|
||||
| "READY_FOR_REVIEW"
|
||||
| "COMPLETED"
|
||||
| "FAILED";
|
||||
| "FAILED"
|
||||
/** Abandoned by staff before anything was applied. */
|
||||
| "DISCARDED";
|
||||
|
||||
export type PolicyOcrDocumentStatus =
|
||||
| "PENDING_OCR"
|
||||
|
||||
Reference in New Issue
Block a user