55 lines
2.5 KiB
TypeScript
55 lines
2.5 KiB
TypeScript
// The module's closed vocabularies, in a file with no import: the schemas build their enums from
|
|
// these, and a browser bundle can take them without loading the data layer the schemas live beside.
|
|
|
|
export const DOCUMENT_STATUSES = ["processing", "extracted", "failed"] as const
|
|
export type DocumentStatus = (typeof DOCUMENT_STATUSES)[number]
|
|
|
|
/** Why a document failed, as a code. A reason carrying document text would be a customer's value in a log. */
|
|
export const FAILURE_CODES = [
|
|
"file_missing",
|
|
"file_changed",
|
|
"ocr_failed",
|
|
"extraction_refused",
|
|
"extraction_truncated",
|
|
"extraction_invalid",
|
|
] as const
|
|
export type FailureCode = (typeof FAILURE_CODES)[number]
|
|
|
|
/**
|
|
* Whether the words an extractor quoted were found on the page they cite. A line whose quote is not
|
|
* there is not dropped and not trusted: it is `needs_review`, and says so to the reviewer.
|
|
*/
|
|
export const LINE_VERIFICATIONS = ["verified", "needs_review"] as const
|
|
export type LineVerification = (typeof LINE_VERIFICATIONS)[number]
|
|
|
|
/**
|
|
* What kind of page the reader found, from its own signals (ocr-service OCR3.15): `text` a born-digital
|
|
* text layer, `table`, `drawing` (a technical sheet: a few labels or hundreds of short fragments),
|
|
* `scan` (a recognised text page) and `empty`.
|
|
*/
|
|
export const PAGE_CLASSES = ["text", "table", "drawing", "scan", "empty"] as const
|
|
export type PageClass = (typeof PAGE_CLASSES)[number]
|
|
|
|
/** The page classes named, or the first name that is not one: a deployment's list is checked once, where it is read. */
|
|
export function pageClassesOf(names: readonly string[]): PageClass[] {
|
|
return names.map((name) => {
|
|
if (!(PAGE_CLASSES as readonly string[]).includes(name)) {
|
|
throw new Error(`"${name}" is not a page class: expected one of ${PAGE_CLASSES.join(", ")}`)
|
|
}
|
|
return name as PageClass
|
|
})
|
|
}
|
|
|
|
/** The page classes the extraction leaves out unless the deployment says otherwise: nothing on them is a specification. */
|
|
export const DEFAULT_EXCLUDED_PAGE_CLASSES: readonly PageClass[] = ["drawing", "empty"]
|
|
|
|
/**
|
|
* Why a reviewer should look at a line besides an unfound quote. `scanned_quote`: the words come from
|
|
* the image of a scanned page, and could not be found in its recognised text, so only the page image can vouch for them.
|
|
*/
|
|
export const LINE_NOTES = ["scanned_quote"] as const
|
|
export type LineNote = (typeof LINE_NOTES)[number]
|
|
|
|
export const LINE_STATUSES = ["pending", "approved", "rejected"] as const
|
|
export type LineStatus = (typeof LINE_STATUSES)[number]
|