citation-evidence/workplans/CE-WP-0012-attribute-value-types.md

185 lines
4.8 KiB
Markdown
Raw Normal View History

---
id: CE-WP-0012
type: workplan
title: "Attribute value types — time, datetime, amount, one-of, some-of"
domain: infotech
repo: citation-evidence
repo_id: a677c189-b4e2-4f2a-9e48-faa482c277e6
topic_slug: citation_evidence_mvp
topic_id: cee7bedf-2b48-46ef-8601-006474f2ad7a
status: finished
owner: codex
created: "2026-07-30"
updated: "2026-07-30"
depends_on_workplan: CE-WP-0011
planning_order: 12
planning_priority: high
spec_refs:
- wiki/AttributeValueTypes-proposal.md
- workplans/CE-WP-0010-annotate-attributes-ux.md
- ../info-tech-canon/seeds/InfoTechCanonDataModel_RC1_seed.md
---
# CE-WP-0012 — Attribute Value Types
Extend Capture attributes beyond `text` / `textarea` / `date` with the types
needed for real evidence work, aligned with a **canonical AttributeValueType
catalog** (proposed under InfoTechCanon; interim consumer profile in
`wiki/AttributeValueTypes-proposal.md`).
## Research summary (locked finding)
InfoTechCanon **Data Model** already defines **Attribute**, **Field**,
**DataType**, **Representation**, and **CodeList**, but **DataType is a stub**
and there is **no closed catalog** of application value types. Representation
only lists open examples (`string`, `date`, `timestamp`, `code`, …).
Therefore: establish the catalog in InfoTechCanon (ITC-WP-0013), implement UI
and persistence here as a **consumer**.
## User-requested types (MVP slice)
| Type | Purpose |
|------|---------|
| `time` | Clock time without date |
| `datetime` | Date + time |
| `amount` | Quantity with currency (or unit) |
| `one-of` | Single choice from options |
| `some-of` | Multi choice from options |
Keep existing: `text`, `textarea` (alias `text-long`), `date`.
## Goals
1. Schema + UI support for the MVP types above.
2. Option lists for `one-of` / `some-of` editable in Capture.
3. Wire encoding documented and round-tripped in capture-state + tests.
4. No fork of type ids: prefer names from `wiki/AttributeValueTypes-proposal.md`
once ITC catalog exists; until then use the proposal as interim canon.
## Non-goals
- Full ISO 11179 registry product.
- Arbitrary JSON Schema forms.
- Server-side validation service.
- Publishing a shared npm package in this workplan (may follow).
## Dependency order
```
T01 (decide wire encodings + finalize interim catalog in wiki)
└─ T02 (extend FormFieldSchema + FieldDefinitionForm types)
└─ T03 (widgets: time, datetime, amount)
└─ T04 (widgets: one-of, some-of + options editor)
└─ T05 (persist options; migrate legacy textarea if needed)
└─ T06 (tests + demo schema examples)
```
Parallel: **ITC-WP-0013** formalizes the catalog in info-tech-canon; CE may
ship T01T06 against the wiki proposal and remap ids if ITC renames.
---
## T01 — Finalize interim catalog + encodings
```task
id: CE-WP-0012-T01
status: done
priority: high
```
Resolve decision asks in `wiki/AttributeValueTypes-proposal.md` §8 with
operator; freeze MVP wire forms for amount / one-of / some-of.
**Acceptance:** proposal §4 marked “accepted for CE MVP” (or amended).
---
## T02 — Schema extension
```task
id: CE-WP-0012-T02
status: done
priority: high
depends_on: [T01]
```
Extend `FormFieldSchema` / `FieldType` in evidence-binder:
- add `time`, `datetime`, `amount`, `one-of`, `some-of`
- optional `options?: { id, label }[]` for choice types
- optional amount metadata (default currency) if needed
**Acceptance:** typecheck green; FieldDefinitionForm lists new types.
---
## T03 — Scalar widgets (time, datetime, amount)
```task
id: CE-WP-0012-T03
status: done
priority: high
depends_on: [T02]
```
Render HTML `time`, `datetime-local` (or split date+time), and amount UI.
Values persist as strings (or structured JSON for amount per T01).
**Acceptance:** add/edit/value round-trip for each type in DOM tests.
---
## T04 — Choice widgets (one-of, some-of)
```task
id: CE-WP-0012-T04
status: done
priority: high
depends_on: [T02]
```
- `one-of`: select or radio
- `some-of`: checkbox group
- options editor when defining the attribute
**Acceptance:** create attribute with options, select values, persist.
---
## T05 — Capture-state compatibility
```task
id: CE-WP-0012-T05
status: done
priority: medium
depends_on: [T03, T04]
```
- load/save options in capture-state
- accept legacy sessions without options
- document amount/some-of JSON in capture-persistence comments
---
## T06 — Tests + demo attributes
```task
id: CE-WP-0012-T06
status: done
priority: medium
depends_on: [T05]
```
- unit/DOM coverage for new types
- optional demo schema fields exercising amount + one-of
- `pnpm test` green
---
## Out of scope / follow-ups
- Align TypeScript const enum with published ITC YAML.
- Evidence extraction helpers that suggest amount/date from PDF quotes.
- Validation constraints (min/max, regex) as first-class UI.