_platform.tenant_id tenant_id | TEXT No | Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. Constraint: Required on every persisted CASE row. Stored as text to match the JWT tenantId claim; clients never send it inside CASE JSON. Invalid when: Missing, blank, or different from the token tenantId. A cross-tenant join is invalid even when identifiers match. Inherited platform contract: Inherits platform_audit_provenance and platform_single_deploy_tenant_scoped. | reviewer-case |
_platform.import_batch_id import_batch_id | TEXT No | Audit handle for the write or CFPackage import that produced the row. Constraint: Set by the API for per-resource writes and by CFPackage import for package rows. Same batch id may touch many CASE tables. Invalid when: Null, blank, or reused for two package imports with different canonical package hashes. Inherited platform contract: Architecture requires _platform.import_batch_id sidecar metadata on every persisted row. | imp_01jz8t6m4v8q3f0x5e2n9p7r6s |
_platform.created_at created_at | TIMESTAMPTZ No | Server timestamp when platform3 first stored this row for the tenant. Constraint: Generated by the service, UTC ISO 8601 when serialized, never accepted from client payloads. Invalid when: Client-supplied timestamps, local-time strings without offset, or values earlier than the import batch start. Inherited platform contract: Platform audit provenance. | 2026-05-27T12:00:00Z |
_platform.updated_at updated_at | TIMESTAMPTZ No | Server timestamp for the most recent accepted mutation of this row. Constraint: Generated by the service. Used by updatedSince polling and ETag recalculation. Invalid when: Older than created_at, supplied by the client, or not advanced after a mutable field changes. Inherited platform contract: Pollable update filters and HTTP validators. | 2026-05-27T12:05:00Z |
_platform.retired_at retired_at | TIMESTAMPTZ Yes | Soft-retirement timestamp for CASE resources that should disappear from default reads and spec-pure package export while remaining auditable. Constraint: Null means active. Non-null rows are excluded from default list/detail/export responses. Setting non-null is blocked by active child CFItems, CFAssociations, Alignments, or CASE-local component references; opaque registry KC extension refs do not block CASE retirement. Invalid when: Set while active same-tenant rows still reference the item; the API must return case:resource_referenced and the trigger raises pg 23503 with the blocker path. TimeBack gap fill: CASE does not define platform retention; platform3 pins soft-retire semantics for CFDocument, CFItem, and CFAssociation. | null |
identifier | UUID No | Synthetic globally unique CASE identifier for this item. Constraint: Must match CASE UUID pattern and be unique per tenant. Invalid when: Duplicate in tenant, missing, not UUID, or changed after associations point to it. 1EdTech pass-through: CFItemDType.required.identifier. | 59e8f77c-f1aa-4326-87d8-4b86fa6f7e6f |
fullStatement full_statement | TEXT No | Complete statement text for the standard, competency, or grouping node. Constraint: Required string. Preserve source markup/LaTeX; sanitize only when rendered by a browser app. Invalid when: Blank, stripped of markup needed for meaning, or stored as trusted HTML. 1EdTech pass-through: CFItemDType.required.fullStatement; String in CASE 1.1. | Interpret products of whole numbers, e.g., interpret 5 x 7 as the total number of objects in 5 groups of 7 objects each. |
alternativeLabel alternative_label | TEXT Yes | Publisher's alternate term for competency, such as outcome or objective. Constraint: Normalized string when present. Invalid when: Used to rename platform fields or override CFItemType. 1EdTech pass-through: CFItemDType.alternativeLabel. | Learning Objective |
CFItemType cf_item_type | TEXT Yes | Text label for the class of statement as named by the publisher. Constraint: Normalized string. Prefer CFItemTypeURI when the package defines typed item-type records. Invalid when: Invented by platform3 when the publisher did not supply a type. 1EdTech pass-through: CFItemDType.CFItemType. | Content Standard |
uri | TEXT URI No | Network-resolvable URI identifying this CFItem in CASE exchange. Constraint: Required absolute URI. Unique per tenant. Invalid when: Relative URL, malformed URI, or points to a different identifier. 1EdTech pass-through: CFItemDType.required.uri. | https://standards.example.org/case/cfitems/59e8f77c-f1aa-4326-87d8-4b86fa6f7e6f |
humanCodingScheme human_coding_scheme | TEXT Yes | Human-referenceable publisher code shown in standards browsers. Constraint: Normalized string; not globally unique unless the publisher makes it so. Query with CFDocument scope. Invalid when: Used as the primary key, stripped of punctuation, or assumed unique across frameworks. 1EdTech pass-through: CFItemDType.humanCodingScheme. | CCSS.MATH.CONTENT.3.OA.A.1 |
listEnumeration list_enumeration | TEXT Yes | Publisher list-position text for display ordering. Constraint: Normalized string. sequence_number on isChildOf associations is preferred for tree ordering when both exist. Invalid when: Used as the only ordering mechanism when a structural CFAssociation sequenceNumber is present. 1EdTech pass-through: CFItemDType.listEnumeration. | A.1 |
abbreviatedStatement abbreviated_statement | TEXT Yes | Short display form of fullStatement. Constraint: Normalized string; may be null even when fullStatement is long. Invalid when: Used as a replacement for fullStatement in detail/export responses. 1EdTech pass-through: CFItemDType.abbreviatedStatement. | Interpret products of whole numbers. |
conceptKeywords concept_keywords | TEXT[] Yes | Free-text keywords and phrases describing the item's concepts. Constraint: Array of strings. Preserve publisher terms and order. Invalid when: Stored as one pipe-delimited string in API JSON or lowercased when publisher case matters. 1EdTech pass-through: CFItemDType.conceptKeywords. | ["multiplication","equal groups"] |
conceptKeywordsURI concept_keywords_uri | JSONB LinkURIDType Yes | CASE link object pointing to the authoritative CFConcept referenced by this row. Constraint: When present, the object must include title, identifier, and uri; identifier is a CASE UUID and uri is a valid absolute URI. Relation: Nullable belongs-to-one link to CFConcept; not a separate table unless the target is persisted by this dictionary. Invalid when: Missing title/identifier/uri, invalid URI, or identifier not scoped to the same tenant when the target is persisted locally. 1EdTech pass-through: CASE LinkURIDType. | {"title":"Example CFConcept","identifier":"11111111-1111-4111-8111-111111111111","uri":"https://standards.example.org/CFConcept/11111111-1111-4111-8111-111111111111"} |
notes | TEXT Yes | Information about derivation or editorial context for the item. Constraint: Source text. Preserve markup; sanitize only at render boundaries. Invalid when: Internal import notes mixed with publisher notes. 1EdTech pass-through: CFItemDType.notes. | Clarification examples are copied from the publisher release notes. |
subject | TEXT[] Yes | Subject labels for this item. Constraint: Array of normalized strings. May be narrower than the document subject. Invalid when: Comma-delimited string in API JSON or guessed subject not present in source. 1EdTech pass-through: CFItemDType.subject. | ["Mathematics","Operations and Algebraic Thinking"] |
subjectURI subject_uri | JSONB LinkURIDType[] Yes | CASE link collection pointing to authoritative CFSubject resources referenced by this row. Constraint: When present, store a JSON array of LinkURI objects; each object must include title, identifier, and uri, with identifier as a CASE UUID and uri as a valid absolute URI. Relation: Nullable zero-or-more link collection to CFSubject; each member resolves locally only when the target is persisted by this dictionary. Invalid when: Scalar JSON, object instead of array, missing title/identifier/uri on any member, invalid URI, or an identifier not scoped to the same tenant when the target is persisted locally. 1EdTech pass-through: CASE LinkURIDType. | [{"title":"Example CFSubject","identifier":"11111111-1111-4111-8111-111111111111","uri":"https://standards.example.org/CFSubject/11111111-1111-4111-8111-111111111111"}] |
language | TEXT Yes | Default language of the item text. Constraint: Use ISO 639-2 language code when supplied. Invalid when: Browser locale or guessed language when source is silent. 1EdTech pass-through: CFItemDType.language. | eng |
educationLevel education_level | TEXT[] Yes | Grade, level, or instructional level at which the item is intended. Constraint: Array of normalized strings from the publisher vocabulary; use filters exactly as stored. Invalid when: Stored as integer, comma string, or translated to local grade names during import. 1EdTech pass-through: CFItemDType.educationLevel. | ["03"] |
CFItemTypeURI cf_item_type_uri | JSONB LinkURIDType Yes | CASE link object pointing to the authoritative CFItemType referenced by this row. Constraint: When present, the object must include title, identifier, and uri; identifier is a CASE UUID and uri is a valid absolute URI. Relation: Nullable belongs-to-one link to CFItemType; not a separate table unless the target is persisted by this dictionary. Invalid when: Missing title/identifier/uri, invalid URI, or identifier not scoped to the same tenant when the target is persisted locally. 1EdTech pass-through: CASE LinkURIDType. | {"title":"Example CFItemType","identifier":"11111111-1111-4111-8111-111111111111","uri":"https://standards.example.org/CFItemType/11111111-1111-4111-8111-111111111111"} |
licenseURI license_uri | JSONB LinkURIDType Yes | CASE link object pointing to the authoritative CFLicense referenced by this row. Constraint: When present, the object must include title, identifier, and uri; identifier is a CASE UUID and uri is a valid absolute URI. Relation: Nullable belongs-to-one link to CFLicense; not a separate table unless the target is persisted by this dictionary. Invalid when: Missing title/identifier/uri, invalid URI, or identifier not scoped to the same tenant when the target is persisted locally. 1EdTech pass-through: CASE LinkURIDType. | {"title":"Example CFLicense","identifier":"11111111-1111-4111-8111-111111111111","uri":"https://standards.example.org/CFLicense/11111111-1111-4111-8111-111111111111"} |
statusStartDate status_start_date | DATE Yes | Date the publisher status for this item started. Constraint: ISO 8601 date without time. Invalid when: Timestamp or later than status_end_date. 1EdTech pass-through: CFItemDType.statusStartDate. | 2010-06-02 |
statusEndDate status_end_date | DATE Yes | Date the publisher status for this item ended or changed. Constraint: ISO 8601 date without time; null means no end date supplied. Invalid when: Used as platform retirement timestamp instead of retired_at. 1EdTech pass-through: CFItemDType.statusEndDate. | null |
lastChangeDateTime last_change_date_time | TIMESTAMPTZ No | Publisher/system timestamp for the most recent change to the CASE item record. Constraint: Required ISO 8601 date-time; distinct from platform updated_at. Invalid when: Missing or overwritten with platform updated_at. 1EdTech pass-through: CFItemDType.required.lastChangeDateTime. | 2026-01-15T09:31:00Z |
extensions | JSONB Yes | Proprietary CASE extension object for item data outside the core model. Under CITD-019 these values are opaque pass-through bytes; CASE preserves them without assigning Curriculum registry semantics. Constraint: JSON object when present. Preserve unknown keys exactly; do not store tenant-private Alignment data here. Invalid when: Array/scalar, platform metadata, or externalSystem/externalId links. 1EdTech pass-through: CFItemExtensionDType additionalProperties=true. | {"publisherExtension":{"depth":3}} |
CFDocumentURI cf_document_uri | JSONB LinkURIDType No | CASE link object pointing to the authoritative CFDocument referenced by this row. Constraint: Required on POST/PUT. The object must include title, identifier, and uri; identifier must resolve to an active same-tenant CFDocument. Relation: Required belongs-to-one link to an active same-tenant case.cf_document row by (tenant_id, id). Invalid when: Missing from a CFItem write body, lacks title/identifier/uri, has invalid URI, mismatches body->>'cfDocumentIdentifier', or does not resolve to the same tenant. Mixed pass-through plus gap fill: CASE LinkURIDType pass-through plus TimeBack write requiredness from the implementation contract. | {"title":"Example CFDocument","identifier":"11111111-1111-4111-8111-111111111111","uri":"https://standards.example.org/CFDocument/11111111-1111-4111-8111-111111111111"} |
cfDocumentIdentifier cf_document_identifier | TEXT No | Body-level document join key derived from CFDocumentURI.identifier for efficient tenant-scoped raw queries. Constraint: Must equal CFDocumentURI.identifier and reference an active or retained cf_document row in the same tenant. Relation: Belongs to one case.cf_document by (tenant_id, id). Invalid when: Differs from CFDocumentURI.identifier or points across tenant. TimeBack gap fill: Derived body field persisted in body->>'cfDocumentIdentifier'. | 3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48 |
parentIdentifier parent_identifier | TEXT No | Required body-level structural parent for tree navigation; points to either the owning CFDocument root or another CFItem. Constraint: Required on POST/PUT. Null is never valid for an active CFItem; the value is checked against the same-document parent invariant. Relation: References case.cf_document.id or case.cf_item.id in same tenant. Invalid when: Missing parentIdentifier, multiple active parents, cycle, or parent from another CFDocument. TimeBack gap fill: TimeBack invariant over CASE associations and implementation write contract. | 3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48 |