--- 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 state_hub_workstream_id: "46704d45-5ee2-5f8d-a0e7-ddeb931ffa27" --- # 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 T01–T06 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 state_hub_task_id: "2df0deb2-0e99-591d-9de1-36c98789c741" ``` 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] state_hub_task_id: "6f2369e8-aa52-5540-9362-19d558a17637" ``` 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] state_hub_task_id: "18f3c81f-5f52-5635-bd75-9748c748e49b" ``` 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] state_hub_task_id: "975de5c5-61a3-5efb-b97c-fcaa0792fd85" ``` - `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] state_hub_task_id: "299c534b-627f-5072-840c-1c209a615af7" ``` - 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] state_hub_task_id: "1364d9f5-8ff8-59dc-bb8c-c5683add4b66" ``` - 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.