8.3 KiB
Person User Journey
Purpose: Define how a user should interact with the UI to create and manage a Person record, including expected inputs, validation, outcomes, and links to Document relationships.
Scope: This document describes intended user interaction for the Person UI. It is the UX contract for the Person entity.
Companion schema mapping: schema-mapping.md Companion acceptance criteria: acceptance-criteria.md
1. Overview
A Person represents a historical individual who may be associated with one or more Documents.
Managing a Person is a profile-first workflow:
- The user opens the Person page.
- The user selects Create new person.
- The user enters known biographical fields.
- The system creates the Person record.
- The user can later associate the Person with one or more Documents through DocumentPerson links.
2. User Goal
The user wants to:
- create and maintain historical person records
- reuse the same Person across multiple Documents
- record both precise and approximate date values where certainty is limited
- link people to documents as author or recipient in future flows
3. Page Model
3.1 Person Page
The Person page is the general UI surface where users manage people.
It should support:
- listing or locating existing people
- starting the Create new person flow
- navigating into a specific Person after it exists
3.2 Person Detail Page
The Person detail page is the page for one specific Person after creation.
It should show:
- core identity fields
- biographical metadata
- related Documents section
- empty state when no linked documents exist yet
4. Entry Point
Entry point: Person page
Primary action: Create new person
Expected UI affordance:
- a visible action labeled Create new person
- activation opens a dedicated form view, modal, or detail panel
Preferred first implementation:
- dedicated Person create page or panel
- simple labeled form controls
- text inputs are acceptable for first release
5. Create Person Form
5.1 Required Fields
| UI Label | Schema Field | Input Type | Required | Notes |
|---|---|---|---|---|
| Full name | full_name | Text input | Yes | Canonical identity field |
5.2 Optional Name Fields
| UI Label | Schema Field | Input Type | Required | Notes |
|---|---|---|---|---|
| Display name | display_name | Text input | No | Friendly or abbreviated display |
| Maiden name | maiden_name | Text input | No | Historical alternate surname |
5.3 Birth and Death Date Fields
| UI Label | Schema Field | Input Type | Required | Notes |
|---|---|---|---|---|
| Birth date | birth_date | Date input | No | Exact known date |
| Birth date (approximate/raw) | birth_date_raw | Text input | No | Approximate or uncertain value |
| Death date | death_date | Date input | No | Exact known date |
| Death date (approximate/raw) | death_date_raw | Text input | No | Approximate or uncertain value |
Date handling rule:
- exact and raw values may both be entered
- exact date is canonical when present
- raw date is retained as historical context
5.4 Optional Biographical Fields
| UI Label | Schema Field | Input Type | Required | Notes |
|---|---|---|---|---|
| Birth place | birth_place | Text input | No | Free text |
| Death place | death_place | Text input | No | Free text |
| Biography | biography | Text area | No | Narrative context |
| Portrait path | portrait_path | Text input | No | File or resource path |
| Metadata | metadata_ | Hidden or advanced JSON editor | No | Prefer hidden in first release |
5.5 System Fields
| Schema Field | User Editable | Notes |
|---|---|---|
| id | No | System-generated |
| created_at | No | System-generated |
| updated_at | No | System-managed |
6. Validation Rules
6.1 Required Validation
- full_name is required
- save is blocked when full_name is empty
6.2 Date Validation
- birth_date and birth_date_raw may coexist
- death_date and death_date_raw may coexist
- exact date fields are canonical when present
- raw fields remain descriptive context
6.3 Integrity Validation
- form accepts unknown values for optional fields
- missing birth or death data does not block creation
7. Submission Behavior
On submit:
- system validates required fields
- system creates Person record
- system returns user to Person detail page
- system shows success message
Recommended transactional behavior:
- Person writes are atomic
- no partial save state should be persisted
8. Expected Result After Success
After successful creation:
- user sees Person detail page for the new record
- full_name is visible in the header or summary
- empty Related Documents section is shown if no links exist
- user can proceed to link this person from Document workflows
9. Expected Result After Failure
If creation fails:
- show clear error message
- show field-level feedback for validation failures
- preserve entered data where possible
- do not show false success messaging
10. Read Person Journey
10.1 User Intent
The user wants to open a Person and quickly understand:
- identity and key biography fields
- whether this person is linked to any documents
- what next action to take
10.2 Read Surfaces
The Person detail page should show:
- full_name and display fields
- birth and death fields
- biography summary
- related documents list or empty state
10.3 Read Empty State
If no linked documents exist:
- show No linked documents yet
- provide guidance to link from Document workflow
11. Update Person Journey
11.1 User Intent
The user wants to correct or enrich person metadata over time.
11.2 Editable Fields
Editable:
- full_name
- display_name
- maiden_name
- birth_date
- birth_date_raw
- birth_place
- death_date
- death_date_raw
- death_place
- biography
- portrait_path
System-managed:
- id
- created_at
- updated_at
- metadata_ can remain hidden in first release
11.3 Update Save Behavior
On save:
- validate required fields
- persist updates
- refresh updated_at by system policy
- show confirmation
- keep user on Person detail page
11.4 Update Failure Behavior
- show clear error feedback
- preserve form state where possible
- allow retry
12. Delete Person Journey
12.1 User Intent
The user wants to remove incorrect or duplicate person records safely.
12.2 Delete Guardrails
Delete is allowed when:
- Person has no required retained relationships
Delete is blocked when:
- Person is linked to one or more Documents via DocumentPerson and unlink policy requires cleanup first
12.3 Blocked Delete UX
- explain that linked Document relationships exist
- show link count or list
- provide cleanup path
12.4 Allowed Delete UX
- show confirmation dialog
- confirm permanent action
- delete Person
- return to Person list with success message
13. Relationship to Other Workflows
This Person workflow integrates with:
- Document create and update workflows through person lookup and linking
- DocumentPerson mapping for role assignments
- future recipient and multi-person enhancements
14. Relationship to Schema Mapping
The companion schema-mapping document should specify:
- field visibility per CRUD action
- current implementation status
- intended behavior
- gap-to-target items
15. Deferred Items
Deferred to future revisions:
- advanced metadata_ editing UI
- multi-person role editing in the Person UI itself
- richer relationship timeline views
- bulk merge or dedup workflows
- structured name fields migration (first_name, middle_name, last_name, optional suffix)
15.1 Structured Name Fields Migration Note
For now, full_name remains the canonical required name field.
Future revision intent:
- introduce structured fields such as first_name, middle_name, last_name, and optional suffix
- keep full_name during transition for backward compatibility and historical formatting
- define normalization and formatting rules for display and sorting
- update search and dedup workflows to use both structured and canonical forms during migration
Migration considerations:
- schema migration and backfill strategy for existing Person records
- validation updates for create and update forms
- compatibility for existing APIs and UI components that currently rely on full_name
- clear precedence and reconciliation rules when structured fields and full_name differ