generated from john/python-template
106 lines
4.5 KiB
Markdown
106 lines
4.5 KiB
Markdown
# Documents Page Contract
|
|
|
|
## Purpose
|
|
|
|
Documents manages the archival record for each historical artifact independently of its source files and transcription jobs. A Document can be created first, linked to people in one or more roles, and used later as the parent for Sources and Jobs.
|
|
|
|
## Routes
|
|
|
|
| Route | Purpose |
|
|
| --- | --- |
|
|
| `/documents` | Searchable archival Document list. |
|
|
| `/documents/new` | Create a Document. |
|
|
| `/documents/{document_id}` | View one Document and its related records. |
|
|
| `/documents/{document_id}/edit` | Edit metadata and people-by-role links. |
|
|
| `/documents/{document_id}/delete` | Confirm or block deletion. |
|
|
| `/documents/{document_id}/jobs` | Show Jobs belonging to the Document. |
|
|
| `/documents/{document_id}/sources` | Redirect to the Document-filtered Sources list. |
|
|
|
|
## List Behavior
|
|
|
|
- The title is **Archival Documents**.
|
|
- **Create new document** opens the create route.
|
|
- The table defaults to Document Title order and supports search and column sorting.
|
|
- Columns are Document Title, Type, Author, Document Date, and Archive Ref.
|
|
- Document Title is left-aligned; the remaining columns are centered.
|
|
- Author lists all linked people in the `author` role.
|
|
- Date display prefers exact date, then approximate date, then `Unknown`.
|
|
- Selecting a row opens Document Detail.
|
|
- No records displays `No documents found in repository.`
|
|
|
|
## Create and Edit Behavior
|
|
|
|
Required:
|
|
|
|
- Document name.
|
|
- Document type selected from the Document Type registry.
|
|
|
|
Optional:
|
|
|
|
- Exact date.
|
|
- Approximate date.
|
|
- Document location.
|
|
- Archive identifier.
|
|
- Notes.
|
|
- Multiple people for every configured Person Role.
|
|
|
|
Rules:
|
|
|
|
- Exact date must parse as `YYYY-MM-DD`; browser presentation may follow locale.
|
|
- Existing people appear with disambiguating labels.
|
|
- **Create new person** opens Person creation.
|
|
- `person_id` may preselect that Person in the author role on Document creation.
|
|
- An invalid requested Person produces a warning rather than a broken form.
|
|
- `return_to=jobs_new` returns a successful create to Job creation with the new Document selected.
|
|
- Edit includes active and inactive Document Types so historical values remain maintainable.
|
|
- Save success returns to Document Detail.
|
|
|
|
## Detail Behavior
|
|
|
|
- The heading shows name, type, and internal ID.
|
|
- The first Source, when present, appears in the dark-room viewer.
|
|
- Archival Metadata shows authors, compact Document date, location, and archive identifier. Notes appear in a separate archival-notes block within the same card.
|
|
- System Logistics shows created and updated timestamps.
|
|
- Related People are grouped by role and link to Person Detail.
|
|
- **Sources & Pipeline Jobs** shows counts and actions for filtered Sources, Document Jobs, and adding a Job.
|
|
- **Edit Document** and **Delete** are available from the header.
|
|
- Invalid IDs and missing Documents produce explicit states without rendering a partial page.
|
|
|
|
## Document Jobs Behavior
|
|
|
|
- The page lists the Document's Jobs newest first with status and Job ID.
|
|
- **Open Job** navigates to Job Detail.
|
|
- **Create Job** opens Job creation with the Document selected.
|
|
- No jobs displays an explicit empty state.
|
|
|
|
## Delete Behavior
|
|
|
|
- Deletion is blocked while any Source or Job belongs to the Document.
|
|
- The blocked state names the dependency categories and provides navigation back and to Jobs.
|
|
- An unlinked Document requires an explicit permanent-delete action.
|
|
- Success returns to the Documents list.
|
|
|
|
## Acceptance Checklist
|
|
|
|
- List columns, alignment, search, sorting, date fallback, and row navigation match this contract.
|
|
- Create/edit enforce name, registered type, and valid exact-date input.
|
|
- Multiple people can be selected independently for each configured role.
|
|
- Person-first Document creation preselects the requested Person as author.
|
|
- Detail links people, Sources, and Jobs to the correct records.
|
|
- Delete never removes a Document with Source or Job dependencies.
|
|
- Service failures use the shared error presenter and never report false success.
|
|
|
|
## Implementation Anchors
|
|
|
|
- `src/transcription/ui/pages/documents_page.py`
|
|
- `src/transcription/ui/components/table/documents.py`
|
|
- `src/transcription/services/documents.py`
|
|
- `src/transcription/services/people.py`
|
|
- `tests/ui/test_documents_page.py`
|
|
- `tests/services/test_document_service.py`
|
|
|
|
## Known Limitations and Deferred Work
|
|
|
|
- Document creation persists the Document before adding relationship links; a later link failure is surfaced but is not currently one atomic write.
|
|
- Source ordering controls are deferred to the [draft V4.3 scope](../../ver4.3/scope_boundary_v4_3.md).
|