- surface
- 1edtech
- deliverable
- data_dictionary
- title
- TimeBack OneRoster 1EdTech Data Dictionary
- generatedAt
- 2026-05-28T15:53:51Z
- canonicalUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/
- architectureUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/
- platformDictionaryUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- benchmarkUrl
- https://platform3-24kpiksyo-andymontgomery-9773s-projects.vercel.app/data_dictionary
Contract overview
Tables and fields
platform.tenant · Tenant (inherited)
- purpose
- A tenant is the platform-wide owner of content, learner runtime records, integrations, and API access. QTI used qti.tenant as the first-module pattern; this table promotes that boundary so QTI, OneRoster, Caliper, CASE, and future modules all point to the same customer/workspace row. In this OneRoster surface, the table is inherited upstream and linked so tenant, idempotency, and audit semantics do not drift.
- lifecycle
- Created in provisioning before any module writes tenant-scoped data. Moves to active when authentication and operational setup are complete, suspended when writes must pause, and archived when the workspace is retained for history but closed to ordinary writes. Learner-runtime deletion is handled by module tables, not by deleting the tenant row. OneRoster does not create a duplicate table; it uses the approved platform table.
- sourceClass
- Inherited platform shared table
- sourceBasis
- Approved upstream platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- qtiReconciliation
- Supersedes qti.tenant as cross-module truth. The platform implementation must either migrate qti.tenant rows into platform.tenant and add QTI foreign keys, or expose qti.tenant as a compatibility view over platform.tenant before claiming full platform/QTI conformance.
- primaryKey
- tenant_id
- ddl
- create table platform.tenant ( tenant_id uuid primary key default gen_random_uuid(), tenant_key text not null unique, display_name text not null, status text not null default 'provisioning', metadata jsonb not null default '{}'::jsonb, created_at timestamptz not null default now(), updated_at timestamptz not null default now(), constraint tenant_key_format_ck check (tenant_key ~ '^[a-z0-9]([a-z0-9-]{1,62}[a-z0-9])$'), constraint tenant_display_name_present_ck check (length(btrim(display_name)) between 1 and 160), constraint tenant_status_ck check (status in ('provisioning', 'active', 'suspended', 'archived')), constraint tenant_metadata_object_ck check (jsonb_typeof(metadata) = 'object'), constraint tenant_updated_after_created_ck check (updated_at >= created_at) ); create index tenant_status_idx on platform.tenant(status); create index tenant_updated_at_idx on platform.tenant(updated_at);
- anchor
- table-platform-tenant
- sqlComments
- comment on table platform.tenant is 'A tenant is the platform-wide owner of content, learner runtime records, integrations, and API access. QTI used qti.tenant as the first-module pattern; this table promotes that boundary so QTI, OneRoster, Caliper, CASE, and future modules all point to the same customer/workspace row.'; comment on column platform.tenant.tenant_id is 'Stable database identifier for one customer/workspace boundary. This is the value module tables reference and tenant-scoped JWTs must match.'; comment on column platform.tenant.tenant_key is 'Human-stable lookup key for routes, local tooling, logs, and examples. It is a convenience key, not an authorization secret.'; comment on column platform.tenant.display_name is 'Customer-facing label shown in admin tools and documentation examples.'; comment on column platform.tenant.status is 'Tenant lifecycle state that tells modules whether ordinary tenant-scoped writes may proceed.'; comment on column platform.tenant.metadata is 'Small redacted operational facts about the tenant that do not deserve first-class columns yet.'; comment on column platform.tenant.created_at is 'Timestamp when the tenant row was inserted.'; comment on column platform.tenant.updated_at is 'Timestamp when the tenant row was last changed.';
- fileName
- approved platform data dictionary
itds
[
{
"id": "PITD-002",
"title": "Platform schema boundaries",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture/#pitd-002-module-schema-boundaries"
},
{
"id": "OITD-004",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
}
]relationships
[ "Parent of platform.idempotency_key through platform.idempotency_key.tenant_id.", "Parent of platform.audit_log through platform.audit_log.tenant_id.", "Future module tenant-scoped tables must reference platform.tenant(tenant_id) rather than creating module-local tenant tables.", "QTI predecessor: qti.tenant(tenant_id) is reconciled to this table by migration or compatibility view." ]
constraints
[ "tenant_key is unique and stable across platform.tenant.", "status must be one of tenant_status.", "metadata must be a JSON object and must not contain direct learner/parent PII, credentials, Bearer tokens, raw JWTs, or contact details.", "updated_at must be greater than or equal to created_at." ]
indexes
[ "primary key (tenant_id)", "unique (tenant_key)", "index (status)", "index (updated_at)" ]
invalidExamples
[ "tenant_key = 'North Valley' because keys must be lowercase slug values.", "metadata contains a student email, parent phone number, raw JWT subject, access token, or SIS identifier.", "status = 'enabled' because the only active state is active.", "A module table references qti.tenant instead of platform.tenant after the platform compatibility bridge exists." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"tenant_key": "north-valley",
"display_name": "North Valley School District",
"status": "active",
"metadata": {
"region": "us-east",
"externalRefs": [
{
"system": "crm",
"ref": "acct_7x9"
}
]
},
"created_at": "2026-05-21T12:00:00Z",
"updated_at": "2026-05-21T12:00:00Z"
}queries
[
"select tenant_id, status from platform.tenant where tenant_key = $1;",
"insert into platform.tenant (tenant_key, display_name, status, metadata) values ($1, $2, 'provisioning', '{}'::jsonb) returning tenant_id;",
"select t.tenant_key, count(a.audit_log_id) from platform.tenant t left join platform.audit_log a using (tenant_id) where t.status = 'active' group by t.tenant_key;"
]Fields (7)
tenant_id
- type
- uuid
- required
- Yes
- default
- gen_random_uuid()
- key
- Primary key
- meaning
- Stable database identifier for one customer/workspace boundary. This is the value module tables reference and tenant-scoped JWTs must match.
- constraints
- Must be a valid PostgreSQL UUID and unique as the primary key.
- relationship
- Referenced by platform.idempotency_key.tenant_id, platform.audit_log.tenant_id, and future module tenant_id fields. One tenant has many module records.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Not parseable as UUID, reused by another tenant, copied into learner-facing content as identity text, or replaced by tenant_key in foreign keys.
- edgeCases
- QTI reconciliation must preserve existing qti.tenant tenant_id values or provide a deterministic mapping table during migration.
- anchor
- field-platform-tenant-tenant-id
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- tenant_id uuid not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- Inherited platform referential action; OneRoster must not override it.
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-003 required tenant_id in platform.tenant.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-003-shared-tenant-model"
}itds
[
{
"id": "Platform shared",
"title": "PITD-003 required tenant_id in platform.tenant.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-003-shared-tenant-model"
}
]tenant_key
- type
- text
- required
- Yes
- default
- key
- Unique
- meaning
- Human-stable lookup key for routes, local tooling, logs, and examples. It is a convenience key, not an authorization secret.
- constraints
- 3 to 64 characters. Lowercase ASCII letters, digits, and hyphens only. Must start and end with a letter or digit. Unique across platform.tenant.
- relationship
- No foreign keys should point at tenant_key; use tenant_id for joins.
- example
- north-valley
- invalidWhen
- Blank, uppercase, contains spaces, contains an email/domain secret, duplicates another tenant, or is used as proof of authorization.
- edgeCases
- A renamed school may keep its tenant_key stable and update display_name instead; changing tenant_key is a migration because URLs and examples may depend on it.
- anchor
- field-platform-tenant-tenant-key
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- tenant_key text not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "QTI's qti.tenant.tenant_key pattern promoted into platform tenant lookup.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-003-shared-tenant-model"
}itds
[
{
"id": "Platform shared",
"title": "QTI's qti.tenant.tenant_key pattern promoted into platform tenant lookup.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-003-shared-tenant-model"
}
]display_name
- type
- text
- required
- Yes
- default
- key
- meaning
- Customer-facing label shown in admin tools and documentation examples.
- constraints
- 1 to 160 visible characters after trimming. Required. Must not be used for uniqueness, routing, authorization, or joins.
- relationship
- None. It describes the tenant row and can change without changing tenant_id.
- example
- North Valley School District
- invalidWhen
- Null, blank, over 160 characters, used as an authorization key, or copied into module records instead of joining to platform.tenant.
- edgeCases
- The name may contain a school or district name. Do not store student, parent, or teacher contact details here.
- anchor
- field-platform-tenant-display-name
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- display_name text not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-003 required display_name in platform.tenant.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-003-shared-tenant-model"
}itds
[
{
"id": "Platform shared",
"title": "PITD-003 required display_name in platform.tenant.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-003-shared-tenant-model"
}
]status
- type
- text
- required
- Yes
- default
- 'provisioning'
- key
- meaning
- Tenant lifecycle state that tells modules whether ordinary tenant-scoped writes may proceed.
- constraints
- Must satisfy tenant_status_allowed: provisioning, active, suspended, or archived.
- relationship
- No foreign key. Modules read this before accepting customer writes.
- example
- active
- invalidWhen
- Outside tenant_status, null, or manually changed without an audit row explaining the administrative action.
- edgeCases
- Suspended and archived tenants can still be read by authorized support or export flows if the customer website documents that behavior.
- anchor
- field-platform-tenant-status
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- status text not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[
{
"value": "provisioning",
"meaning": "The tenant row exists, but required setup such as auth, domains, or integrations is not complete.",
"useWhen": "Create this before the tenant can ingest content, launch learner activity, or receive production traffic.",
"invalidWhen": "Used for a tenant that is already accepting module writes.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum tenant_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-003-shared-tenant-model"
}
},
{
"value": "active",
"meaning": "Normal customer state. Tenant-scoped reads and writes may proceed when the JWT tenant claim and role checks pass.",
"useWhen": "The tenant is fully configured and in good standing.",
"invalidWhen": "Used while required onboarding, suspension, or archival conditions are unresolved.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum tenant_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-003-shared-tenant-model"
}
},
{
"value": "suspended",
"meaning": "The tenant is known but temporarily blocked from ordinary customer writes.",
"useWhen": "Billing, security, contract, or incident response requires stopping writes without deleting history.",
"invalidWhen": "Used to hide a tenant that should be permanently archived or deleted through a documented retention flow.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum tenant_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-003-shared-tenant-model"
}
},
{
"value": "archived",
"meaning": "The tenant is retained for history and audit, but new module writes are rejected except explicit maintenance or export flows.",
"useWhen": "A customer relationship ended or a workspace was retired and records must remain queryable for retention.",
"invalidWhen": "Used as a soft substitute for learner-runtime deletion, which belongs to module-specific learner data flows.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum tenant_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-003-shared-tenant-model"
}
}
]provenance
{
"label": "Platform shared",
"basis": "PITD-003 left status to the data dictionary; PITD-005 and PITD-009 require auditable tenant scope.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-003-shared-tenant-model"
}itds
[
{
"id": "Platform shared",
"title": "PITD-003 left status to the data dictionary; PITD-005 and PITD-009 require auditable tenant scope.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-003-shared-tenant-model"
}
]metadata
- type
- jsonb
- required
- Yes
- default
- '{}'::jsonb
- key
- meaning
- Small redacted operational facts about the tenant that do not deserve first-class columns yet.
- constraints
- Must be a JSON object. Recommended top-level keys are region, externalRefs, notes, and featureFlags. Must not contain secrets, raw JWTs, direct learner/parent PII, raw package bytes, IP addresses, or user agents.
- relationship
- None. External references inside metadata are diagnostic and cannot replace tenant_id joins.
- example
- {"region":"us-east","externalRefs":[{"system":"crm","ref":"acct_7x9"}]}
- invalidWhen
- Null, non-object JSON, stores a student email/phone/name/SIS ID, stores credentials, or becomes the only place a required module relationship is recorded.
- edgeCases
- If a metadata key becomes required for authorization, billing, or module behavior, promote it to a typed column through a new data-dictionary attempt and migration.
- anchor
- field-platform-tenant-metadata
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- metadata jsonb not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- Inherited platform referential action; OneRoster must not override it.
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-003 required metadata; PITD-008 limits PII in shared tables.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-008-privacy-pii-student-data"
}itds
[
{
"id": "Platform shared",
"title": "PITD-003 required metadata; PITD-008 limits PII in shared tables.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-008-privacy-pii-student-data"
}
]created_at
- type
- timestamptz
- required
- Yes
- default
- now()
- key
- meaning
- Timestamp when the tenant row was inserted.
- constraints
- Required timestamp with time zone. Stored in UTC by PostgreSQL/Supabase conventions.
- relationship
- None.
- example
- 2026-05-21T12:00:00Z
- invalidWhen
- Null, manually backdated without migration evidence, or compared as local wall time.
- edgeCases
- Bulk migrations from qti.tenant may preserve an older source created_at only when the migration notes explain the source.
- anchor
- field-platform-tenant-created-at
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- created_at timestamptz not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-017 requires DDL comments and lifecycle timestamps.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-017-migrations-and-ddl-discipline"
}itds
[
{
"id": "Platform shared",
"title": "PITD-017 requires DDL comments and lifecycle timestamps.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-017-migrations-and-ddl-discipline"
}
]updated_at
- type
- timestamptz
- required
- Yes
- default
- now()
- key
- meaning
- Timestamp when the tenant row was last changed.
- constraints
- Required timestamp with time zone. Must be greater than or equal to created_at. Updated on every display_name, status, or metadata change.
- relationship
- None.
- example
- 2026-05-21T12:00:00Z
- invalidWhen
- Null, earlier than created_at, or left unchanged after a tenant status or metadata mutation.
- edgeCases
- Audit rows remain the detailed history; updated_at is only the latest-row freshness indicator.
- anchor
- field-platform-tenant-updated-at
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- updated_at timestamptz not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-017 requires forward-only migrations and observable shared state.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-017-migrations-and-ddl-discipline"
}itds
[
{
"id": "Platform shared",
"title": "PITD-017 requires forward-only migrations and observable shared state.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-017-migrations-and-ddl-discipline"
}
]platform.idempotency_key · Idempotency key (inherited)
- purpose
- This table records the first request to claim an Idempotency-Key within a precise tenant/module/surface/operation scope. Later requests with the same scope and request hash replay the original safe result; later requests with the same key but a different request hash return 409 instead of duplicating work. In this OneRoster surface, the table is inherited upstream and linked so tenant, idempotency, and audit semantics do not drift.
- lifecycle
- Inserted as in_progress before a mutation performs side effects. Updated to completed or failed_permanent when a replayable final outcome exists, failed_transient when no stable result can be replayed, and expired after the documented replay window. Cleanup may retain expired rows for audit while making them non-replayable. OneRoster does not create a duplicate table; it uses the approved platform table.
- sourceClass
- Inherited platform shared table
- sourceBasis
- Approved upstream platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- qtiReconciliation
- Promotes qti.content_package.idempotency_key from a package-specific field into a reusable platform ledger. QTI package rows may keep their package-specific key copy for query compatibility, but replay and conflict behavior belongs to platform.idempotency_key.
- primaryKey
- idempotency_key_id
- ddl
- create table platform.idempotency_key ( idempotency_key_id uuid primary key default gen_random_uuid(), tenant_id uuid not null references platform.tenant(tenant_id), module text not null, surface text not null, method text not null, route_template text not null, operation_id text not null, idempotency_key text not null, request_hash text not null, status text not null default 'in_progress', response_status integer, response_body jsonb, resource_type text, resource_id text, first_request_id text not null, locked_until timestamptz, expires_at timestamptz not null, created_at timestamptz not null default now(), updated_at timestamptz not null default now(), constraint idempotency_module_ck check (module in ('platform', 'qti', 'oneroster', 'caliper', 'case')), constraint idempotency_surface_ck check (surface in ('platform', '1edtech', 'alpha')), constraint idempotency_method_ck check (method in ('POST', 'PUT', 'PATCH', 'DELETE')), constraint idempotency_route_template_ck check (route_template like '/%' and position('?' in route_template) = 0), constraint idempotency_operation_id_ck check (operation_id ~ '^[a-z0-9][a-z0-9._-]{0,119}$'), constraint idempotency_key_length_ck check (length(btrim(idempotency_key)) between 1 and 128), constraint idempotency_request_hash_ck check (request_hash ~ '^sha256:[0-9a-f]{64}$'), constraint idempotency_status_ck check (status in ('in_progress', 'completed', 'failed_permanent', 'failed_transient', 'expired')), constraint idempotency_response_status_ck check (response_status is null or response_status between 100 and 599), constraint idempotency_response_body_shape_ck check (response_body is null or jsonb_typeof(response_body) in ('object', 'array')), constraint idempotency_expires_after_created_ck check (expires_at > created_at), constraint idempotency_updated_after_created_ck check (updated_at >= created_at), unique (tenant_id, module, surface, method, route_template, operation_id, idempotency_key) ); create index idempotency_tenant_expires_idx on platform.idempotency_key(tenant_id, expires_at); create index idempotency_status_lock_idx on platform.idempotency_key(status, locked_until); create index idempotency_request_hash_idx on platform.idempotency_key(request_hash);
- anchor
- table-platform-idempotency-key
- sqlComments
- comment on table platform.idempotency_key is 'This table records the first request to claim an Idempotency-Key within a precise tenant/module/surface/operation scope. Later requests with the same scope and request hash replay the original safe result; later requests with the same key but a different request hash return 409 instead of duplicating work.'; comment on column platform.idempotency_key.idempotency_key_id is 'Stable identifier for the retry ledger row. Audit rows refer to this value rather than repeating replay internals.'; comment on column platform.idempotency_key.tenant_id is 'Tenant that owns the retry scope and the mutation being protected.'; comment on column platform.idempotency_key.module is 'Module namespace whose operation claimed the idempotency key.'; comment on column platform.idempotency_key.surface is 'Surface whose API contract produced the retryable operation.'; comment on column platform.idempotency_key.method is 'HTTP method for the mutation protected by the key.'; comment on column platform.idempotency_key.route_template is 'Stable route pattern from the customer website or OpenAPI operation, with variable path segments expressed as braces.'; comment on column platform.idempotency_key.operation_id is 'Stable operation identifier used by docs, OpenAPI, logs, audit, and idempotency middleware.'; comment on column platform.idempotency_key.idempotency_key is 'Opaque customer-supplied Idempotency-Key header value for one retryable operation.'; comment on column platform.idempotency_key.request_hash is 'Digest of the canonical replay identity for the first request. It lets middleware distinguish a safe retry from key reuse with different content.'; comment on column platform.idempotency_key.status is 'Replay lifecycle state of the idempotency row.'; comment on column platform.idempotency_key.response_status is 'HTTP status originally returned for a final replayable outcome.'; comment on column platform.idempotency_key.response_body is 'Redacted JSON body safe to replay to the same tenant for completed or failed_permanent outcomes.'; comment on column platform.idempotency_key.resource_type is 'Optional type of resource created, imported, deleted, or accepted by the operation.'; comment on column platform.idempotency_key.resource_id is 'Optional identifier of the primary resource associated with the replayable outcome.'; comment on column platform.idempotency_key.first_request_id is 'Request identifier of the first request that claimed this key.'; comment on column platform.idempotency_key.locked_until is 'Temporary lock deadline used while an in-progress operation is executing.'; comment on column platform.idempotency_key.expires_at is 'Timestamp after which the key is no longer promised to replay the original response.'; comment on column platform.idempotency_key.created_at is 'Timestamp when the first request claimed the idempotency key.'; comment on column platform.idempotency_key.updated_at is 'Timestamp when the row last changed status, replay body, lock, or expiry.';
- fileName
- approved platform data dictionary
itds
[
{
"id": "PITD-002",
"title": "Platform schema boundaries",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture/#pitd-002-module-schema-boundaries"
},
{
"id": "OITD-004",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
}
]relationships
[ "Belongs to one platform.tenant.", "May be referenced by many platform.audit_log rows through platform.audit_log.idempotency_key_id.", "Module-specific rows may store their own resource identifier; this table records retry state and safe replay data, not the source of record for module resources." ]
constraints
[ "Unique scope: tenant_id, module, surface, method, route_template, operation_id, idempotency_key.", "request_hash must be sha256:<64 lowercase hex characters>.", "response_status must be null while status is in_progress and between 100 and 599 when present.", "response_body must be null or a redacted JSON object safe to replay to the same tenant.", "expires_at must be later than created_at." ]
indexes
[ "primary key (idempotency_key_id)", "unique (tenant_id, module, surface, method, route_template, operation_id, idempotency_key)", "index (tenant_id, expires_at)", "index (status, locked_until)", "index (request_hash)" ]
invalidExamples
[
"Same scope and key with a different request_hash is a 409 idempotency conflict, not a second mutation.",
"response_body includes raw package bytes, JWTs, headers, IP addresses, user agents, learner PII, or unredacted Problem details.",
"route_template stores a concrete path like /tenants/0d4.../qti/packages instead of /tenants/{tenant_id}/qti/packages.",
"expires_at is null or earlier than created_at."
]example
{
"idempotency_key_id": "b81db6f4-c7ea-4757-b5aa-87570f7ad119",
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"module": "qti",
"surface": "1edtech",
"method": "POST",
"route_template": "/tenants/{tenant_id}/qti/packages",
"operation_id": "qti.packages.import",
"idempotency_key": "pkg-upload-2026-05-21-001",
"request_hash": "sha256:3d9f7a3a4e3c7ff4a2dcb2de9339f3c5a9b4f7d58f0a20d6f127f452e4f7e8b1",
"status": "completed",
"response_status": 201,
"response_body": {
"packageId": "7f2e4dd2-c147-49ea-af77-41a6fdd70980",
"importStatus": "imported"
},
"resource_type": "qti.content_package",
"resource_id": "7f2e4dd2-c147-49ea-af77-41a6fdd70980",
"first_request_id": "req_20260521_0001",
"locked_until": null,
"expires_at": "2026-05-22T12:01:00Z",
"created_at": "2026-05-21T12:01:00Z",
"updated_at": "2026-05-21T12:01:08Z"
}queries
[ "select idempotency_key_id, request_hash, status, response_status, response_body from platform.idempotency_key where tenant_id = $1 and module = $2 and surface = $3 and method = $4 and route_template = $5 and operation_id = $6 and idempotency_key = $7 for update;", "insert into platform.idempotency_key (tenant_id, module, surface, method, route_template, operation_id, idempotency_key, request_hash, first_request_id, locked_until, expires_at) values ($1, $2, $3, $4, $5, $6, $7, $8, $9, now() + interval '30 seconds', now() + interval '24 hours') returning idempotency_key_id;", "update platform.idempotency_key set status = 'completed', response_status = $2, response_body = $3, resource_type = $4, resource_id = $5, locked_until = null, updated_at = now() where idempotency_key_id = $1;" ]
Fields (19)
idempotency_key_id
- type
- uuid
- required
- Yes
- default
- gen_random_uuid()
- key
- Primary key
- meaning
- Stable identifier for the retry ledger row. Audit rows refer to this value rather than repeating replay internals.
- constraints
- Must be a valid PostgreSQL UUID and unique as the primary key.
- relationship
- Referenced by platform.audit_log.idempotency_key_id. One idempotency row can explain many audit rows for retries and final outcomes.
- example
- b81db6f4-c7ea-4757-b5aa-87570f7ad119
- invalidWhen
- Not a UUID, reused across rows, or exposed as the customer Idempotency-Key header value.
- edgeCases
- This is an internal row id; the externally supplied key is idempotency_key.
- anchor
- field-platform-idempotency-key-idempotency-key-id
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- idempotency_key_id uuid not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- Inherited platform referential action; OneRoster must not override it.
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-007 requires a shared retry ledger.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}itds
[
{
"id": "Platform shared",
"title": "PITD-007 requires a shared retry ledger.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
]tenant_id
- type
- uuid
- required
- Yes
- default
- key
- Foreign key
- meaning
- Tenant that owns the retry scope and the mutation being protected.
- constraints
- Must reference platform.tenant(tenant_id).
- relationship
- Many idempotency rows belong to one platform.tenant.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Null, not found in platform.tenant, or different from the tenant_id claim in the Bearer JWT for a tenant-scoped route.
- edgeCases
- Platform-wide maintenance operations that do not have a tenant must not use this table unless the operation is deliberately scoped to a tenant row.
- anchor
- field-platform-idempotency-key-tenant-id
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- tenant_id uuid not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-007 defines tenant_id as part of idempotency scope.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}itds
[
{
"id": "Platform shared",
"title": "PITD-007 defines tenant_id as part of idempotency scope.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
]module
- type
- text
- required
- Yes
- default
- key
- Scope key
- meaning
- Module namespace whose operation claimed the idempotency key.
- constraints
- Must satisfy module_key_allowed: platform, qti, oneroster, caliper, or case. Additional future modules require a dictionary update before use.
- relationship
- Pairs with surface, route_template, and operation_id to define replay scope.
- example
- qti
- invalidWhen
- Null, outside module_key, used to store a route group instead of the module namespace, or used by /platform/modules as a release-status substitute.
- edgeCases
- module=qti remains valid identity for QTI-owned retry scopes while qti/1edtech is under_reconciliation. Public registries must separately expose module_release_status and must not advertise QTI 1EdTech as approved until loop/qti/state.json says the surface has re-approved.
- anchor
- field-platform-idempotency-key-module
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- module text not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[
{
"value": "platform",
"meaning": "Shared platform substrate, documentation, auth, idempotency, audit, and cross-module operations.",
"useWhen": "The operation belongs to the platform surface itself rather than a standards module.",
"invalidWhen": "Used for QTI, OneRoster, Caliper, or CASE resource mutations that should remain module-attributed.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum module_key.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}
},
{
"value": "qti",
"meaning": "Question and Test Interoperability module namespace. The namespace remains valid while the QTI 1EdTech surface is under reconciliation.",
"useWhen": "The operation touches QTI content, runtime, conformance, or Alpha assessment facade records and the calling surface is itself allowed by the current release state.",
"invalidWhen": "Used as a release-status signal, or used for OneRoster roster records, Caliper event records, CASE standards records, or platform-only administrative operations.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum module_key.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}
},
{
"value": "oneroster",
"meaning": "OneRoster module namespace for roster, enrollment, class, school, user, course, and academic-session contracts.",
"useWhen": "The operation touches OneRoster-owned roster data, import/export work, conformance evidence, or the OneRoster integration app.",
"invalidWhen": "Used for QTI assessment resources, Caliper event telemetry, or platform-only tenant administration.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum module_key.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}
},
{
"value": "caliper",
"meaning": "Caliper Analytics module namespace for event telemetry and metric-profile contracts.",
"useWhen": "The operation touches Caliper event ingest, metric-profile validation, event-store reads, or the Caliper integration app.",
"invalidWhen": "Used for QTI assessment content, OneRoster roster resources, or platform-only tenant administration.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum module_key.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}
},
{
"value": "case",
"meaning": "CASE module namespace for CFDocument, CFItem, CFAssociation, CFPackage, and Alignment contracts.",
"useWhen": "The operation touches CASE standards data, package import/export, graph reads, external-ID alignment, or the CASE integration app.",
"invalidWhen": "Used for QTI assessment content, OneRoster roster resources, Caliper telemetry, or platform-only tenant administration.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum module_key.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}
}
]provenance
{
"label": "Platform shared",
"basis": "PITD-002 requires module schemas and shared platform operational tables.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}itds
[
{
"id": "Platform shared",
"title": "PITD-002 requires module schemas and shared platform operational tables.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}
]surface
- type
- text
- required
- Yes
- default
- key
- Scope key
- meaning
- Surface whose API contract produced the retryable operation.
- constraints
- Must satisfy surface_code_allowed: platform, 1edtech, or alpha.
- relationship
- Pairs with module so qti/1edtech and qti/alpha operations can have different customer contracts over shared persistence.
- example
- 1edtech
- invalidWhen
- Null, outside surface_code, or used to hide whether an Alpha divergence changed operation behavior.
- edgeCases
- The platform surface uses module=platform and surface=platform.
- anchor
- field-platform-idempotency-key-surface
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- surface text not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[
{
"value": "platform",
"meaning": "The platform substrate surface.",
"useWhen": "The route, audit row, idempotency scope, or dictionary entry is cross-module rather than standard-specific.",
"invalidWhen": "Used to mask whether a QTI expert or Alpha customer endpoint produced a module action.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum surface_code.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-015-surface-model-and-derivation"
}
},
{
"value": "1edtech",
"meaning": "Expert standards surface that follows a 1EdTech specification exactly except documented gap fills.",
"useWhen": "The operation is on an expert API or documentation surface for a 1EdTech standard.",
"invalidWhen": "Used for Alpha facade calls that rename, restrict, cut, or extend standard language.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum surface_code.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-015-surface-model-and-derivation"
}
},
{
"value": "alpha",
"meaning": "Plain-language customer and app-builder surface over the same persistence model.",
"useWhen": "The operation comes from an Alpha API or documentation surface.",
"invalidWhen": "Used for expert-only conformance mutation, standards package internals, or release tooling.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum surface_code.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-015-surface-model-and-derivation"
}
}
]provenance
{
"label": "Platform shared",
"basis": "PITD-015 defines platform, 1EdTech, and Alpha surfaces.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-015-surface-model-and-derivation"
}itds
[
{
"id": "Platform shared",
"title": "PITD-015 defines platform, 1EdTech, and Alpha surfaces.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-015-surface-model-and-derivation"
}
]method
- type
- text
- required
- Yes
- default
- key
- Scope key
- meaning
- HTTP method for the mutation protected by the key.
- constraints
- Must satisfy mutation_http_method_allowed: POST, PUT, PATCH, or DELETE.
- relationship
- Part of the unique retry scope. Same route and key under different mutation methods are distinct scopes.
- example
- POST
- invalidWhen
- Null, GET, lowercase if the implementation normalizes to uppercase, or method does not match the documented endpoint.
- edgeCases
- PUT/PATCH operations that can overwrite user work still need If-Match or an equivalent validator; idempotency does not replace optimistic concurrency.
- anchor
- field-platform-idempotency-key-method
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- method text not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[
{
"value": "POST",
"meaning": "Create, import, upload, command, or async job operation where a network retry might duplicate work.",
"useWhen": "The route creates work or resources and the customer site documents Idempotency-Key.",
"invalidWhen": "Used for a read-only GET.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum mutation_http_method.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
},
{
"value": "PUT",
"meaning": "Full replacement mutation that may be retried by a client.",
"useWhen": "The route is documented as retryable and uses If-Match or another validator if it can overwrite user work.",
"invalidWhen": "Used without a request hash and concurrency rule.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum mutation_http_method.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
},
{
"value": "PATCH",
"meaning": "Partial update mutation that may be retried by a client.",
"useWhen": "The route is documented as retryable and a duplicate patch must not apply twice.",
"invalidWhen": "Used for non-repeatable patch semantics that the customer site has not made idempotent.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum mutation_http_method.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
},
{
"value": "DELETE",
"meaning": "Delete or redaction command where retrying should not produce a second distinct deletion event.",
"useWhen": "The route documents retry behavior and audit requirements.",
"invalidWhen": "Used for implicit retention cleanup that is not customer-visible or not keyed by Idempotency-Key.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum mutation_http_method.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
}
]provenance
{
"label": "Platform shared",
"basis": "PITD-007 defines retryable create, upload, import, export-job, and command operations.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}itds
[
{
"id": "Platform shared",
"title": "PITD-007 defines retryable create, upload, import, export-job, and command operations.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
]route_template
- type
- text
- required
- Yes
- default
- key
- Scope key
- meaning
- Stable route pattern from the customer website or OpenAPI operation, with variable path segments expressed as braces.
- constraints
- Must start with /. Must not contain a query string. Path variables use {name}. Must not include concrete tenant IDs, resource IDs, learner refs, or secrets.
- relationship
- Part of the unique retry scope; links the row back to a documented endpoint.
- example
- /tenants/{tenant_id}/qti/packages
- invalidWhen
- Contains concrete UUIDs, query strings, raw learner refs, access tokens, or an undocumented internal route.
- edgeCases
- If the Alpha route names the tenant as workspaceId, the template still uses the public Alpha route name documented by that surface.
- anchor
- field-platform-idempotency-key-route-template
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- route_template text not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-006 requires endpoint-local contracts and PITD-007 requires route template scope.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}itds
[
{
"id": "Platform shared",
"title": "PITD-006 requires endpoint-local contracts and PITD-007 requires route template scope.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
]operation_id
- type
- text
- required
- Yes
- default
- key
- Scope key
- meaning
- Stable operation identifier used by docs, OpenAPI, logs, audit, and idempotency middleware.
- constraints
- 1 to 120 characters. Lowercase letters, digits, dots, underscores, and hyphens. Must be stable across wording-only documentation edits.
- relationship
- Part of the unique retry scope and repeated in audit rows.
- example
- qti.packages.import
- invalidWhen
- Blank, generated from a localized title, contains spaces, or changes without a customer-site and implementation update.
- edgeCases
- If two routes intentionally share replay behavior, they still need separate operation_id values unless the architecture explicitly declares them equivalent.
- anchor
- field-platform-idempotency-key-operation-id
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- operation_id text not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-010 and PITD-009 require shared operation_id fields.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-010-observability-and-slos"
}itds
[
{
"id": "Platform shared",
"title": "PITD-010 and PITD-009 require shared operation_id fields.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-010-observability-and-slos"
}
]idempotency_key
- type
- text
- required
- Yes
- default
- key
- Scope key
- meaning
- Opaque customer-supplied Idempotency-Key header value for one retryable operation.
- constraints
- 1 to 128 printable ASCII characters after trimming. Unique within the tenant/module/surface/method/route_template/operation_id scope. Must not be a token, password, email, phone number, student identifier, or raw request hash.
- relationship
- Part of the unique retry scope. Not a foreign key.
- example
- pkg-upload-2026-05-21-001
- invalidWhen
- Blank, reused for different request_hash in the same scope, contains credentials or direct learner PII, or exceeds the documented length.
- edgeCases
- Same key with same request_hash replays; same key with different request_hash returns 409.
- anchor
- field-platform-idempotency-key-idempotency-key
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- idempotency_key text not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "QTI package ingest used Idempotency-Key; PITD-007 promotes the rule.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}itds
[
{
"id": "Platform shared",
"title": "QTI package ingest used Idempotency-Key; PITD-007 promotes the rule.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
]request_hash
- type
- text
- required
- Yes
- default
- key
- meaning
- Digest of the canonical replay identity for the first request. It lets middleware distinguish a safe retry from key reuse with different content.
- constraints
- Must be sha256:<64 lowercase hex characters>. Hash input is method, normalized route template, canonical JSON/body digest, tenant_id, module, surface, operation_id, and any idempotency-relevant headers documented by the endpoint.
- relationship
- No foreign key. Compared with later requests in the same unique scope.
- example
- sha256:3d9f7a3a4e3c7ff4a2dcb2de9339f3c5a9b4f7d58f0a20d6f127f452e4f7e8b1
- invalidWhen
- Missing algorithm prefix, not sha256, uppercase/malformed hex, computed from non-canonical JSON, or includes raw secrets in a way that would be logged.
- edgeCases
- Large uploads hash normalized bytes or a precomputed payload hash, never raw bytes stored in this table.
- anchor
- field-platform-idempotency-key-request-hash
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- request_hash text not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-007 requires request hash conflict detection.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}itds
[
{
"id": "Platform shared",
"title": "PITD-007 requires request hash conflict detection.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
]status
- type
- text
- required
- Yes
- default
- 'in_progress'
- key
- meaning
- Replay lifecycle state of the idempotency row.
- constraints
- Must satisfy idempotency_status_allowed.
- relationship
- No foreign key. Determines whether middleware replays, rejects, waits, or allows takeover.
- example
- completed
- invalidWhen
- Outside idempotency_status, null, or incompatible with response_status/locked_until, such as completed with no final status.
- edgeCases
- failed_transient rows can be taken over after locked_until if no side effect committed; failed_permanent rows replay the safe Problem response.
- anchor
- field-platform-idempotency-key-status
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- status text not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[
{
"value": "in_progress",
"meaning": "The first request claimed the key and the operation has not reached a final replayable outcome.",
"useWhen": "The handler starts work and stores a lock before performing the mutation.",
"invalidWhen": "Retained after locked_until has passed without takeover, completion, or failure handling.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum idempotency_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
},
{
"value": "completed",
"meaning": "The operation reached a successful replayable outcome. Same key plus same request hash returns the stored response.",
"useWhen": "The mutation committed and response_status/response_body or resource pointers are safe to replay.",
"invalidWhen": "Used when the committed resource is unknown or the stored response contains secrets or learner PII.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum idempotency_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
},
{
"value": "failed_permanent",
"meaning": "The original request reached a final caller-fixable error such as validation, authorization, conflict, or precondition failure.",
"useWhen": "Replaying the same invalid request should return the same safe Problem response instead of re-running side effects.",
"invalidWhen": "Used for transient 5xx failures that should be retried after the lock expires.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum idempotency_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
},
{
"value": "failed_transient",
"meaning": "The first attempt failed before a stable outcome could be recorded.",
"useWhen": "A dependency or server failure prevents safe replay and the same request may take over after locked_until.",
"invalidWhen": "Used after a database mutation might have committed without a response.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum idempotency_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
},
{
"value": "expired",
"meaning": "The key is retained only for audit or conflict explanation after its replay window has ended.",
"useWhen": "expires_at has passed and the platform cleanup policy marks the row no longer replayable.",
"invalidWhen": "Used to avoid returning a known conflict inside the documented replay window.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum idempotency_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
}
]provenance
{
"label": "Platform shared",
"basis": "PITD-007 requires original outcome replay and conflict behavior.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}itds
[
{
"id": "Platform shared",
"title": "PITD-007 requires original outcome replay and conflict behavior.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
]response_status
- type
- integer
- required
- No
- default
- key
- meaning
- HTTP status originally returned for a final replayable outcome.
- constraints
- Nullable while in_progress or failed_transient. When present, must be an integer from 100 through 599 and match the stored response_body/resource outcome.
- relationship
- No foreign key. Used with response_body to replay the original result.
- example
- 201
- invalidWhen
- Present while status is in_progress, outside 100-599, or does not match the Problem/status or resource creation outcome.
- edgeCases
- 204 outcomes store response_status=204 and response_body=null.
- anchor
- field-platform-idempotency-key-response-status
- csvName
- csvFormat
- Platform shared field
- nullability
- Optional by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- response_status integer. Nullability: nullable; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-006 defines HTTP status policy and PITD-007 defines replay.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-006-http-envelope-and-errors"
}itds
[
{
"id": "Platform shared",
"title": "PITD-006 defines HTTP status policy and PITD-007 defines replay.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-006-http-envelope-and-errors"
}
]response_body
- type
- jsonb
- required
- No
- default
- key
- meaning
- Redacted JSON body safe to replay to the same tenant for completed or failed_permanent outcomes.
- constraints
- Nullable. When present, must be a JSON object or array that matches the documented response schema. Must not include secrets, raw package bytes, headers, access tokens, IP addresses, user agents, direct learner PII, or unredacted processing traces.
- relationship
- May contain resource identifiers that point into module tables, but the module table remains source of record.
- example
- {"packageId":"7f2e4dd2-c147-49ea-af77-41a6fdd70980","importStatus":"imported"}
- invalidWhen
- Stores raw request body, file bytes, secrets, PII, non-JSON text, or a body that cannot be returned to the authenticated tenant.
- edgeCases
- For async operations, response_body can be a 202 job resource even though final module processing continues elsewhere.
- anchor
- field-platform-idempotency-key-response-body
- csvName
- csvFormat
- Platform shared field
- nullability
- Optional by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- response_body jsonb. Nullability: nullable; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-006 requires redacted Problem/errors; PITD-007 requires replayable outcomes.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}itds
[
{
"id": "Platform shared",
"title": "PITD-006 requires redacted Problem/errors; PITD-007 requires replayable outcomes.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
]resource_type
- type
- text
- required
- No
- default
- key
- meaning
- Optional type of resource created, imported, deleted, or accepted by the operation.
- constraints
- Nullable. When present, use a stable table or API object path such as qti.content_package, qti.delivery_session, platform.tenant, or alpha.activity.
- relationship
- Pairs with resource_id for audit and support lookup. Does not enforce a foreign key because target tables vary by module.
- example
- qti.content_package
- invalidWhen
- Contains a display title, localized wording, raw URL, or path with tenant/resource IDs.
- edgeCases
- For operations that create multiple resources, store the primary customer-visible resource and put redacted counts in response_body or audit metadata.
- anchor
- field-platform-idempotency-key-resource-type
- csvName
- csvFormat
- Platform shared field
- nullability
- Optional by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- resource_type text. Nullability: nullable; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-009 uses resource_type in audit and replay support.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}itds
[
{
"id": "Platform shared",
"title": "PITD-009 uses resource_type in audit and replay support.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
]resource_id
- type
- text
- required
- No
- default
- key
- meaning
- Optional identifier of the primary resource associated with the replayable outcome.
- constraints
- Nullable. When present, must be the canonical resource identifier for resource_type and tenant_id.
- relationship
- Pairs with resource_type; target cardinality is many idempotency rows may point at one resource only when retries or aliases are documented.
- example
- 7f2e4dd2-c147-49ea-af77-41a6fdd70980
- invalidWhen
- Contains a student name, email, phone number, raw package path, or ID outside the tenant.
- edgeCases
- Async accepted work can use a job/run id here while the final content resource appears later in module tables.
- anchor
- field-platform-idempotency-key-resource-id
- csvName
- csvFormat
- Platform shared field
- nullability
- Optional by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- resource_id text. Nullability: nullable; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-009 requires resource identifiers for operational traceability.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}itds
[
{
"id": "Platform shared",
"title": "PITD-009 requires resource identifiers for operational traceability.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
]first_request_id
- type
- text
- required
- Yes
- default
- key
- meaning
- Request identifier of the first request that claimed this key.
- constraints
- Required non-empty text, 1 to 120 characters. Must be safe for logs and customer support. Must not contain tokens, IP addresses, user agents, or PII.
- relationship
- Should match platform.audit_log.request_id for the original attempt when that attempt is audited.
- example
- req_20260521_0001
- invalidWhen
- Null, blank, regenerated on replay, or includes sensitive request details.
- edgeCases
- Retry requests have their own request_id in access logs, but this field stays fixed to the first attempt.
- anchor
- field-platform-idempotency-key-first-request-id
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- first_request_id text not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-010 requires request_id in structured operational evidence.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-010-observability-and-slos"
}itds
[
{
"id": "Platform shared",
"title": "PITD-010 requires request_id in structured operational evidence.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-010-observability-and-slos"
}
]locked_until
- type
- timestamptz
- required
- No
- default
- key
- meaning
- Temporary lock deadline used while an in-progress operation is executing.
- constraints
- Nullable. When status is in_progress, should be a future timestamp. Must be null for completed and failed_permanent rows.
- relationship
- No foreign key. Used by middleware to decide whether another worker may take over a stale in-progress row.
- example
- 2026-05-21T12:01:30Z
- invalidWhen
- Expired while status remains in_progress without takeover logic, set on completed rows, or earlier than created_at.
- edgeCases
- Long-running async jobs should complete the idempotency row with a 202 response rather than hold this lock for the whole job.
- anchor
- field-platform-idempotency-key-locked-until
- csvName
- csvFormat
- Platform shared field
- nullability
- Optional by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- locked_until timestamptz. Nullability: nullable; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-007 centralizes replay and conflict behavior.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}itds
[
{
"id": "Platform shared",
"title": "PITD-007 centralizes replay and conflict behavior.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
]expires_at
- type
- timestamptz
- required
- Yes
- default
- key
- meaning
- Timestamp after which the key is no longer promised to replay the original response.
- constraints
- Required timestamp with time zone. Must be later than created_at. Default policy is at least 24 hours after first claim; modules may document longer windows for async jobs or exports.
- relationship
- Indexed for cleanup and expiry marking.
- example
- 2026-05-22T12:01:00Z
- invalidWhen
- Null, before created_at, shorter than the customer website promises, or extended without retention/audit reason.
- edgeCases
- Expired rows may remain queryable for audit but must not silently replay after the documented window.
- anchor
- field-platform-idempotency-key-expires-at
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- expires_at timestamptz not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-007 requires a shared idempotency policy rather than per-module drift.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}itds
[
{
"id": "Platform shared",
"title": "PITD-007 requires a shared idempotency policy rather than per-module drift.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
]created_at
- type
- timestamptz
- required
- Yes
- default
- now()
- key
- meaning
- Timestamp when the first request claimed the idempotency key.
- constraints
- Required timestamp with time zone.
- relationship
- None.
- example
- 2026-05-21T12:01:00Z
- invalidWhen
- Null, changed after insert, or compared without timezone normalization.
- edgeCases
- Use created_at plus expires_at for replay-window reporting.
- anchor
- field-platform-idempotency-key-created-at
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- created_at timestamptz not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-017 requires lifecycle timestamps.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-017-migrations-and-ddl-discipline"
}itds
[
{
"id": "Platform shared",
"title": "PITD-017 requires lifecycle timestamps.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-017-migrations-and-ddl-discipline"
}
]updated_at
- type
- timestamptz
- required
- Yes
- default
- now()
- key
- meaning
- Timestamp when the row last changed status, replay body, lock, or expiry.
- constraints
- Required timestamp with time zone. Must be greater than or equal to created_at.
- relationship
- None.
- example
- 2026-05-21T12:01:08Z
- invalidWhen
- Null, earlier than created_at, or left unchanged after finalizing the row.
- edgeCases
- Retries that merely read/replay do not need to update updated_at unless the implementation records replay counts elsewhere.
- anchor
- field-platform-idempotency-key-updated-at
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- updated_at timestamptz not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-017 requires DDL discipline and auditability.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-017-migrations-and-ddl-discipline"
}itds
[
{
"id": "Platform shared",
"title": "PITD-017 requires DDL discipline and auditability.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-017-migrations-and-ddl-discipline"
}
]platform.audit_log · Audit log (inherited)
- purpose
- This table gives support, compliance, release, and future AI agents one durable account of who did what, under which tenant and module, with what result. Module tables remain the source of record for domain state; audit rows are the redacted narrative that explains sensitive platform actions across modules. In this OneRoster surface, the table is inherited upstream and linked so tenant, idempotency, and audit semantics do not drift.
- lifecycle
- Inserted once by shared audit middleware at the end of a high-risk operation or authorization decision. Rows are append-only: corrections are represented by a later compensating audit row, not by updating or deleting the original. Retention cleanup requires a named maintenance action and its own audit row. OneRoster does not create a duplicate table; it uses the approved platform table.
- sourceClass
- Inherited platform shared table
- sourceBasis
- Approved upstream platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- qtiReconciliation
- Adds a shared operational table that QTI did not have. QTI import, authoring, delivery deletion, service-role, conformance, and trust-status operations must emit rows here once the platform shared library is integrated.
- primaryKey
- audit_log_id
- ddl
- create table platform.audit_log ( audit_log_id uuid primary key default gen_random_uuid(), tenant_id uuid not null references platform.tenant(tenant_id), module text not null, surface text not null, operation_id text not null, actor_subject text not null, actor_roles text[] not null default '{}'::text[], resource_type text not null, resource_id text not null, action text not null, outcome text not null, http_status integer not null, request_id text not null, trace_id text not null, idempotency_key_id uuid references platform.idempotency_key(idempotency_key_id) on delete set null, occurred_at timestamptz not null default now(), redacted_metadata jsonb not null default '{}'::jsonb, constraint audit_module_ck check (module in ('platform', 'qti', 'oneroster', 'caliper', 'case')), constraint audit_surface_ck check (surface in ('platform', '1edtech', 'alpha')), constraint audit_action_ck check (action in ('create', 'update', 'delete', 'import', 'export', 'read_privileged', 'runtime_delete', 'conformance_change', 'trust_change', 'authz_denied', 'maintenance')), constraint audit_outcome_ck check (outcome in ('accepted', 'succeeded', 'failed_validation', 'failed_authorization', 'failed_conflict', 'failed_not_found', 'failed_server')), constraint audit_http_status_ck check (http_status between 100 and 599), constraint audit_metadata_object_ck check (jsonb_typeof(redacted_metadata) = 'object'), constraint audit_required_text_ck check ( length(btrim(operation_id)) > 0 and length(btrim(actor_subject)) > 0 and length(btrim(resource_type)) > 0 and length(btrim(resource_id)) > 0 and length(btrim(request_id)) > 0 and length(btrim(trace_id)) > 0 ) ); create index audit_tenant_time_idx on platform.audit_log(tenant_id, occurred_at desc); create index audit_resource_idx on platform.audit_log(tenant_id, resource_type, resource_id, occurred_at desc); create index audit_request_idx on platform.audit_log(request_id); create index audit_trace_idx on platform.audit_log(trace_id); create index audit_operation_idx on platform.audit_log(module, surface, operation_id, occurred_at desc); create index audit_idempotency_idx on platform.audit_log(idempotency_key_id);
- anchor
- table-platform-audit-log
- sqlComments
- comment on table platform.audit_log is 'This table gives support, compliance, release, and future AI agents one durable account of who did what, under which tenant and module, with what result. Module tables remain the source of record for domain state; audit rows are the redacted narrative that explains sensitive platform actions across modules.'; comment on column platform.audit_log.audit_log_id is 'Stable identifier for one append-only audit event.'; comment on column platform.audit_log.tenant_id is 'Tenant affected by the audited action.'; comment on column platform.audit_log.module is 'Module responsible for the operation being audited.'; comment on column platform.audit_log.surface is 'Surface through which the action was initiated or exposed.'; comment on column platform.audit_log.operation_id is 'Stable operation identifier from the customer website, OpenAPI, or platform maintenance command.'; comment on column platform.audit_log.actor_subject is 'Pseudonymous actor identifier for the user, service, or release process that attempted the action.'; comment on column platform.audit_log.actor_roles is 'Roles or scopes that justified the action or explain why authorization failed.'; comment on column platform.audit_log.resource_type is 'Stable resource class affected by the action.'; comment on column platform.audit_log.resource_id is 'Identifier of the primary resource affected by the action, or a documented sentinel when authorization failed before resource resolution.'; comment on column platform.audit_log.action is 'Behavioral category of the audited action.'; comment on column platform.audit_log.outcome is 'Final result category for the action.'; comment on column platform.audit_log.http_status is 'HTTP status returned for the request or the HTTP-equivalent status assigned to a background/service operation.'; comment on column platform.audit_log.request_id is 'Per-request identifier exposed in Problem responses and support logs.'; comment on column platform.audit_log.trace_id is 'Trace identifier that links logs, metrics, audit rows, and downstream spans for one request or job.'; comment on column platform.audit_log.idempotency_key_id is 'Optional link to the idempotency row that governed the audited operation.'; comment on column platform.audit_log.occurred_at is 'Timestamp when the audited action reached the recorded outcome.'; comment on column platform.audit_log.redacted_metadata is 'Small, safe, structured context that helps explain the audit event without storing raw sensitive data.';
- fileName
- approved platform data dictionary
itds
[
{
"id": "PITD-002",
"title": "Platform schema boundaries",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture/#pitd-002-module-schema-boundaries"
},
{
"id": "OITD-004",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
}
]relationships
[ "Belongs to one platform.tenant.", "May reference one platform.idempotency_key row when the audited operation used Idempotency-Key.", "Refers to module resources by resource_type and resource_id instead of foreign keys because target tables vary by module.", "One request_id or trace_id can appear in multiple audit rows when a command touches multiple resources." ]
constraints
[ "Rows are append-only; ordinary application roles cannot update or delete them.", "tenant_id must reference platform.tenant. Cross-tenant maintenance writes one row per affected tenant.", "module, surface, action, and outcome must use documented allowed values.", "redacted_metadata must be a JSON object and must not include raw request bodies, tokens, learner names, emails, phone numbers, package bytes, IP addresses, or user agents.", "http_status must be an integer from 100 through 599." ]
indexes
[ "primary key (audit_log_id)", "index (tenant_id, occurred_at desc)", "index (tenant_id, resource_type, resource_id, occurred_at desc)", "index (request_id)", "index (trace_id)", "index (module, surface, operation_id, occurred_at desc)", "index (idempotency_key_id)" ]
invalidExamples
[ "actor_subject = 'teacher@example.org' because actor subjects must be pseudonymous or hashed.", "redacted_metadata stores raw QTI package bytes, processing traces with student identity, request headers, IP address, or access token.", "A service-role tenant suspension changes platform.tenant.status without an audit row.", "action = 'changed' or outcome = 'ok' because allowed values must be behaviorally explained." ]
example
{
"audit_log_id": "a597b7de-b1dd-4c9e-93a3-9623cb90bc34",
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"module": "qti",
"surface": "1edtech",
"operation_id": "qti.packages.import",
"actor_subject": "userhash:1bd7b5bd0d77",
"actor_roles": [
"teacher",
"content-admin"
],
"resource_type": "qti.content_package",
"resource_id": "7f2e4dd2-c147-49ea-af77-41a6fdd70980",
"action": "import",
"outcome": "succeeded",
"http_status": 201,
"request_id": "req_20260521_0001",
"trace_id": "trace_20260521_a1f4",
"idempotency_key_id": "b81db6f4-c7ea-4757-b5aa-87570f7ad119",
"occurred_at": "2026-05-21T12:01:08Z",
"redacted_metadata": {
"packageHash": "sha256:6a8c1f58c16f4b0b4f0a0d8c6be8d226e3d5d80f0b2f7d2f49e6d7d9e9d4f1cb",
"resourceCount": 18,
"fileCount": 42
}
}queries
[ "insert into platform.audit_log (tenant_id, module, surface, operation_id, actor_subject, actor_roles, resource_type, resource_id, action, outcome, http_status, request_id, trace_id, idempotency_key_id, redacted_metadata) values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15);", "select occurred_at, actor_subject, action, outcome, http_status from platform.audit_log where tenant_id = $1 and resource_type = $2 and resource_id = $3 order by occurred_at desc;", "select module, surface, operation_id, outcome, count(*) from platform.audit_log where tenant_id = $1 and occurred_at >= now() - interval '7 days' group by module, surface, operation_id, outcome order by count(*) desc;" ]
Fields (17)
audit_log_id
- type
- uuid
- required
- Yes
- default
- gen_random_uuid()
- key
- Primary key
- meaning
- Stable identifier for one append-only audit event.
- constraints
- Must be a valid PostgreSQL UUID and unique as the primary key.
- relationship
- No child table in this dictionary; support tools and future evidence exports may reference it.
- example
- a597b7de-b1dd-4c9e-93a3-9623cb90bc34
- invalidWhen
- Not a UUID, reused, or generated outside the database without collision safeguards.
- edgeCases
- Corrections never update this row; write a later audit event that references the corrected resource.
- anchor
- field-platform-audit-log-audit-log-id
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- audit_log_id uuid not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- Inherited platform referential action; OneRoster must not override it.
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-009 required audit_log_id.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}itds
[
{
"id": "Platform shared",
"title": "PITD-009 required audit_log_id.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
]tenant_id
- type
- uuid
- required
- Yes
- default
- key
- Foreign key
- meaning
- Tenant affected by the audited action.
- constraints
- Must reference platform.tenant(tenant_id). Cross-tenant maintenance must emit one row per affected tenant rather than a tenantless row.
- relationship
- Many audit rows belong to one platform.tenant.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Null, not found, copied from an untrusted path without JWT tenant validation, or used to record a resource outside the tenant.
- edgeCases
- Authenticated authorization denials should use the route tenant after checking it is a real platform.tenant row; missing-auth events stay in security logs, not tenant audit rows.
- anchor
- field-platform-audit-log-tenant-id
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- tenant_id uuid not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-009 required tenant_id and PITD-005 requires tenant scope enforcement.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}itds
[
{
"id": "Platform shared",
"title": "PITD-009 required tenant_id and PITD-005 requires tenant scope enforcement.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
]module
- type
- text
- required
- Yes
- default
- key
- Audit dimension
- meaning
- Module responsible for the operation being audited.
- constraints
- Must satisfy module_key_allowed: platform, qti, oneroster, caliper, or case.
- relationship
- Pairs with surface and operation_id for operational reporting.
- example
- case
- invalidWhen
- Null, outside module_key, set to platform for module resource changes, or used by support tooling as proof that the module surface is approved.
- edgeCases
- Service-role maintenance that changes QTI records still uses module=qti even while qti/1edtech is under_reconciliation; release readiness belongs to module_release_status in the registry. CASE standards-browser maintenance still uses module=case unless the action changes only platform.* rows.
- anchor
- field-platform-audit-log-module
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- module text not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[
{
"value": "platform",
"meaning": "Shared platform substrate, documentation, auth, idempotency, audit, and cross-module operations.",
"useWhen": "The operation belongs to the platform surface itself rather than a standards module.",
"invalidWhen": "Used for QTI, OneRoster, Caliper, or CASE resource mutations that should remain module-attributed.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum module_key.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}
},
{
"value": "qti",
"meaning": "Question and Test Interoperability module namespace. The namespace remains valid while the QTI 1EdTech surface is under reconciliation.",
"useWhen": "The operation touches QTI content, runtime, conformance, or Alpha assessment facade records and the calling surface is itself allowed by the current release state.",
"invalidWhen": "Used as a release-status signal, or used for OneRoster roster records, Caliper event records, CASE standards records, or platform-only administrative operations.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum module_key.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}
},
{
"value": "oneroster",
"meaning": "OneRoster module namespace for roster, enrollment, class, school, user, course, and academic-session contracts.",
"useWhen": "The operation touches OneRoster-owned roster data, import/export work, conformance evidence, or the OneRoster integration app.",
"invalidWhen": "Used for QTI assessment resources, Caliper event telemetry, or platform-only tenant administration.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum module_key.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}
},
{
"value": "caliper",
"meaning": "Caliper Analytics module namespace for event telemetry and metric-profile contracts.",
"useWhen": "The operation touches Caliper event ingest, metric-profile validation, event-store reads, or the Caliper integration app.",
"invalidWhen": "Used for QTI assessment content, OneRoster roster resources, or platform-only tenant administration.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum module_key.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}
},
{
"value": "case",
"meaning": "CASE module namespace for CFDocument, CFItem, CFAssociation, CFPackage, and Alignment contracts.",
"useWhen": "The operation touches CASE standards data, package import/export, graph reads, external-ID alignment, or the CASE integration app.",
"invalidWhen": "Used for QTI assessment content, OneRoster roster resources, Caliper telemetry, or platform-only tenant administration.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum module_key.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}
}
]provenance
{
"label": "Platform shared",
"basis": "PITD-002 defines module boundaries and PITD-009 requires module in audit rows.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}itds
[
{
"id": "Platform shared",
"title": "PITD-002 defines module boundaries and PITD-009 requires module in audit rows.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}
]surface
- type
- text
- required
- Yes
- default
- key
- Audit dimension
- meaning
- Surface through which the action was initiated or exposed.
- constraints
- Must satisfy surface_code_allowed.
- relationship
- Pairs with module and operation_id.
- example
- 1edtech
- invalidWhen
- Null, outside surface_code, or set to alpha for expert-only conformance mutation.
- edgeCases
- Background jobs spawned by an Alpha request keep surface=alpha if the customer contract and audit trail originate there.
- anchor
- field-platform-audit-log-surface
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- surface text not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[
{
"value": "platform",
"meaning": "The platform substrate surface.",
"useWhen": "The route, audit row, idempotency scope, or dictionary entry is cross-module rather than standard-specific.",
"invalidWhen": "Used to mask whether a QTI expert or Alpha customer endpoint produced a module action.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum surface_code.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-015-surface-model-and-derivation"
}
},
{
"value": "1edtech",
"meaning": "Expert standards surface that follows a 1EdTech specification exactly except documented gap fills.",
"useWhen": "The operation is on an expert API or documentation surface for a 1EdTech standard.",
"invalidWhen": "Used for Alpha facade calls that rename, restrict, cut, or extend standard language.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum surface_code.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-015-surface-model-and-derivation"
}
},
{
"value": "alpha",
"meaning": "Plain-language customer and app-builder surface over the same persistence model.",
"useWhen": "The operation comes from an Alpha API or documentation surface.",
"invalidWhen": "Used for expert-only conformance mutation, standards package internals, or release tooling.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum surface_code.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-015-surface-model-and-derivation"
}
}
]provenance
{
"label": "Platform shared",
"basis": "PITD-015 defines surface model and derivation.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-015-surface-model-and-derivation"
}itds
[
{
"id": "Platform shared",
"title": "PITD-015 defines surface model and derivation.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-015-surface-model-and-derivation"
}
]operation_id
- type
- text
- required
- Yes
- default
- key
- Audit dimension
- meaning
- Stable operation identifier from the customer website, OpenAPI, or platform maintenance command.
- constraints
- 1 to 120 characters. Lowercase letters, digits, dots, underscores, and hyphens. Must match the documented operation whenever an API route triggered the row.
- relationship
- Same naming convention as platform.idempotency_key.operation_id.
- example
- qti.packages.import
- invalidWhen
- Blank, derived from localized prose, inconsistent with the endpoint that produced the event, or changed without docs and tests.
- edgeCases
- Maintenance operation IDs should be named, such as platform.tenants.backfill-qti-view, not generic maintenance.
- anchor
- field-platform-audit-log-operation-id
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- operation_id text not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-009 and PITD-010 require operation_id for audit and observability.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}itds
[
{
"id": "Platform shared",
"title": "PITD-009 and PITD-010 require operation_id for audit and observability.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
]actor_subject
- type
- text
- required
- Yes
- default
- key
- meaning
- Pseudonymous actor identifier for the user, service, or release process that attempted the action.
- constraints
- Required non-empty text. Use an HMAC/hash or stable opaque subject such as userhash:<hex> or service:<name>. Must not be a name, email, phone number, raw JWT subject, access token, SIS ID, or parent/student contact detail.
- relationship
- No foreign key. Correlates with auth logs only through redacted identity systems.
- example
- userhash:1bd7b5bd0d77
- invalidWhen
- Contains @, phone-like text, direct student/parent/teacher name, raw JWT sub, Bearer token, or service credentials.
- edgeCases
- For service-role operations use service:<operation-or-system>, and record narrow roles/scopes in actor_roles.
- anchor
- field-platform-audit-log-actor-subject
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- actor_subject text not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-008 requires pseudonymous learner/customer data in logs and audit rows.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-008-privacy-pii-student-data"
}itds
[
{
"id": "Platform shared",
"title": "PITD-008 requires pseudonymous learner/customer data in logs and audit rows.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-008-privacy-pii-student-data"
}
]actor_roles
- type
- text[]
- required
- Yes
- default
- '{}'::text[]
- key
- meaning
- Roles or scopes that justified the action or explain why authorization failed.
- constraints
- Required array. Values should be lowercase scope/role slugs. Must not include tokens, emails, names, or tenant secrets.
- relationship
- No foreign key in this dictionary; auth systems remain outside durable audit scope.
- example
- {teacher,content-admin}
- invalidWhen
- Null, contains raw JWT claims with PII, includes access tokens, or omits the service-role scope for privileged operations.
- edgeCases
- An empty array is allowed only when actor_subject is a known service identity and operation_id explains the maintenance path.
- anchor
- field-platform-audit-log-actor-roles
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- actor_roles text[] not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-005 requires explicit roles/scopes for privileged operations.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-005-auth-tenant-scope"
}itds
[
{
"id": "Platform shared",
"title": "PITD-005 requires explicit roles/scopes for privileged operations.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-005-auth-tenant-scope"
}
]resource_type
- type
- text
- required
- Yes
- default
- key
- Resource lookup
- meaning
- Stable resource class affected by the action.
- constraints
- Required text. Use a table path or public object path such as platform.tenant, qti.content_package, alpha.activity, or qti.conformance_run. Must not include concrete IDs.
- relationship
- Pairs with resource_id. No database foreign key because target resource tables vary.
- example
- qti.content_package
- invalidWhen
- Blank, localized title, raw URL, or includes tenant/resource IDs.
- edgeCases
- For collection-level denials use a collection type such as qti.content_package with resource_id='unresolved'.
- anchor
- field-platform-audit-log-resource-type
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- resource_type text not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-009 required resource_type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}itds
[
{
"id": "Platform shared",
"title": "PITD-009 required resource_type.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
]resource_id
- type
- text
- required
- Yes
- default
- key
- Resource lookup
- meaning
- Identifier of the primary resource affected by the action, or a documented sentinel when authorization failed before resource resolution.
- constraints
- Required text, 1 to 160 characters. Use the canonical resource ID for resource_type. Use unresolved only for authorization denials before a resource can be safely looked up.
- relationship
- Pairs with resource_type for support queries.
- example
- 7f2e4dd2-c147-49ea-af77-41a6fdd70980
- invalidWhen
- Blank, direct learner PII, access token, raw path with query secrets, or an ID from another tenant.
- edgeCases
- For import operations, resource_id may be the accepted package/job id while module tables later attach child resources.
- anchor
- field-platform-audit-log-resource-id
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- resource_id text not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-009 required resource_id.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}itds
[
{
"id": "Platform shared",
"title": "PITD-009 required resource_id.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
]action
- type
- text
- required
- Yes
- default
- key
- Audit dimension
- meaning
- Behavioral category of the audited action.
- constraints
- Must satisfy audit_action_allowed.
- relationship
- No foreign key. Used with outcome for reporting and incident review.
- example
- import
- invalidWhen
- Null, outside audit_action, or too vague to distinguish import from create, delete from runtime_delete, or read from read_privileged.
- edgeCases
- When one request performs multiple high-risk actions, write multiple audit rows rather than collapsing them into a generic action.
- anchor
- field-platform-audit-log-action
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- action text not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[
{
"value": "create",
"meaning": "A resource was created synchronously.",
"useWhen": "The operation inserts a module or platform row that customers can later read.",
"invalidWhen": "Used for import jobs that should be action=import.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_action.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "update",
"meaning": "An existing resource was changed.",
"useWhen": "A mutable customer or administrative field changes.",
"invalidWhen": "Used for append-only learner submission creation.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_action.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "delete",
"meaning": "A reusable resource or tenant-scoped object was deleted or archived.",
"useWhen": "The operation removes or retires content, settings, or a non-runtime record.",
"invalidWhen": "Used for learner-runtime deletion, which must be runtime_delete.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_action.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "import",
"meaning": "A package, roster, event batch, or standards bundle was accepted for ingest.",
"useWhen": "The operation takes external source material and projects it into module tables.",
"invalidWhen": "Used for manual object creation that has no source package or batch.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_action.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "export",
"meaning": "A customer or service-role actor generated an exportable data view.",
"useWhen": "The operation produces a file, report, or export job with customer data.",
"invalidWhen": "Used for ordinary API reads.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_action.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "read_privileged",
"meaning": "A read occurred through service-role, support, release, or other privileged authority.",
"useWhen": "The read would not be available to an ordinary tenant-scoped caller.",
"invalidWhen": "Used for normal customer GETs that are already covered by access logs.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_action.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "runtime_delete",
"meaning": "Learner runtime data was deleted or redacted under a student-data lifecycle rule.",
"useWhen": "A student, parent, school, or retention process removes learner-specific state.",
"invalidWhen": "Used for reusable content deletion.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_action.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "conformance_change",
"meaning": "A release or expert path changed conformance evidence.",
"useWhen": "A conformance run starts, finishes, fails, or changes trust-relevant assertions.",
"invalidWhen": "Used for read-only Alpha trust status views.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_action.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "trust_change",
"meaning": "Public trust status changed as a result of evidence, rollback, or release gating.",
"useWhen": "A customer-visible trust summary moves between trusted, degraded, failed, or unknown states.",
"invalidWhen": "Used for ordinary audit actions that do not change public trust.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_action.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "authz_denied",
"meaning": "An authenticated caller was denied by tenant, role, scope, service-role, or operation authorization.",
"useWhen": "The request had an authenticated subject but failed authorization.",
"invalidWhen": "Used for missing or invalid authentication; those are security logs, not tenant audit rows.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_action.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "maintenance",
"meaning": "A named platform or service-role maintenance operation touched durable state.",
"useWhen": "Backfills, compatibility migrations, cleanup, or incident response make controlled changes.",
"invalidWhen": "Used as a generic label when a more specific action exists.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_action.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
}
]provenance
{
"label": "Platform shared",
"basis": "PITD-009 defines action semantics.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}itds
[
{
"id": "Platform shared",
"title": "PITD-009 defines action semantics.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
]outcome
- type
- text
- required
- Yes
- default
- key
- Audit dimension
- meaning
- Final result category for the action.
- constraints
- Must satisfy audit_outcome_allowed.
- relationship
- No foreign key. Should align with http_status.
- example
- succeeded
- invalidWhen
- Null, outside audit_outcome, inconsistent with http_status, or hides authorization failure as validation failure.
- edgeCases
- Async operations start with accepted; later completion can be represented by a module state change and, when high-risk, another audit row.
- anchor
- field-platform-audit-log-outcome
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- outcome text not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[
{
"value": "accepted",
"meaning": "The platform accepted work for asynchronous processing and returned a trackable resource.",
"useWhen": "The HTTP status is usually 202 and later completion is represented by another row or resource state.",
"invalidWhen": "Used after the work has already succeeded or failed.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_outcome.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "succeeded",
"meaning": "The action completed successfully.",
"useWhen": "The HTTP status is 2xx and the intended state transition committed.",
"invalidWhen": "Used when only validation passed but async work is still pending.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_outcome.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "failed_validation",
"meaning": "The action was rejected because caller-supplied data was malformed or semantically invalid.",
"useWhen": "Use for typed 400 request-control validation and for typed 422 CSV package source-validation failures such as oneroster:source_validation_failed.",
"invalidWhen": "Invalid for authorization, not-found, conflict, or server failures; use the corresponding outcome value instead.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_outcome.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "failed_authorization",
"meaning": "The authenticated caller lacked tenant, role, scope, service-role, or operation authority.",
"useWhen": "The HTTP status is 403.",
"invalidWhen": "Used for missing Bearer token, which should not create a tenant audit row.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_outcome.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "failed_conflict",
"meaning": "The action conflicted with idempotency, uniqueness, state version, lifecycle, or resource state.",
"useWhen": "The HTTP status is 409, 412, or 428.",
"invalidWhen": "Used for not-found conditions.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_outcome.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "failed_not_found",
"meaning": "The resource was absent or not visible inside the authenticated tenant scope.",
"useWhen": "The HTTP status is 404 and the action was high-risk enough to audit.",
"invalidWhen": "Used to leak existence of resources outside the tenant.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_outcome.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "failed_server",
"meaning": "The action failed because of unexpected platform, dependency, runner, or storage behavior.",
"useWhen": "The HTTP status is 5xx or equivalent background-job failure.",
"invalidWhen": "Used for caller-fixable validation problems.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_outcome.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
}
]provenance
{
"label": "Platform shared",
"basis": "PITD-009 requires outcome and PITD-006 defines status/error policy.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}itds
[
{
"id": "Platform shared",
"title": "PITD-009 requires outcome and PITD-006 defines status/error policy.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
]http_status
- type
- integer
- required
- Yes
- default
- key
- meaning
- HTTP status returned for the request or the HTTP-equivalent status assigned to a background/service operation.
- constraints
- Required integer from 100 through 599. Must align with outcome: 2xx for accepted/succeeded, 403 for failed_authorization, 400 for failed_validation, 409/412/428 for failed_conflict, 404 for failed_not_found, and 5xx for failed_server.
- relationship
- No foreign key. Matches customer-visible Problem/status when the action came from an API route.
- example
- 201
- invalidWhen
- Null, outside 100-599, or inconsistent with outcome.
- edgeCases
- For non-HTTP maintenance, use the status the platform would return from the equivalent command API.
- anchor
- field-platform-audit-log-http-status
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- http_status integer not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-006 defines HTTP status policy; PITD-009 requires http_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-006-http-envelope-and-errors"
}itds
[
{
"id": "Platform shared",
"title": "PITD-006 defines HTTP status policy; PITD-009 requires http_status.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-006-http-envelope-and-errors"
}
]request_id
- type
- text
- required
- Yes
- default
- key
- Correlation
- meaning
- Per-request identifier exposed in Problem responses and support logs.
- constraints
- Required non-empty text, 1 to 120 characters. Must be safe to return to customers. Must not include IP addresses, user agents, auth headers, or PII.
- relationship
- May match platform.idempotency_key.first_request_id for first attempts.
- example
- req_20260521_0001
- invalidWhen
- Null, blank, contains request headers/secrets, or changes within the same request flow.
- edgeCases
- Retries have separate request_id values even when they reuse an idempotency row.
- anchor
- field-platform-audit-log-request-id
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- request_id text not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-006 requires requestId in Problem errors and PITD-010 requires structured logs.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-006-http-envelope-and-errors"
}itds
[
{
"id": "Platform shared",
"title": "PITD-006 requires requestId in Problem errors and PITD-010 requires structured logs.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-006-http-envelope-and-errors"
}
]trace_id
- type
- text
- required
- Yes
- default
- key
- Correlation
- meaning
- Trace identifier that links logs, metrics, audit rows, and downstream spans for one request or job.
- constraints
- Required non-empty text, 1 to 160 characters. Use W3C traceparent-derived or platform trace ids. Must not include secrets or direct identity data.
- relationship
- Can appear on multiple audit rows and logs in the same request/job.
- example
- trace_20260521_a1f4
- invalidWhen
- Null, blank, contains auth tokens, or is regenerated per row inside the same request flow.
- edgeCases
- If no distributed tracer is present, set trace_id equal to request_id until tracing is installed.
- anchor
- field-platform-audit-log-trace-id
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- trace_id text not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-010 requires trace_id in structured logs and audit evidence.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-010-observability-and-slos"
}itds
[
{
"id": "Platform shared",
"title": "PITD-010 requires trace_id in structured logs and audit evidence.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-010-observability-and-slos"
}
]idempotency_key_id
- type
- uuid
- required
- No
- default
- key
- Foreign key
- meaning
- Optional link to the idempotency row that governed the audited operation.
- constraints
- Nullable. When present, must reference platform.idempotency_key(idempotency_key_id). Set null for operations that do not use Idempotency-Key.
- relationship
- Many audit rows may refer to one platform.idempotency_key row.
- example
- b81db6f4-c7ea-4757-b5aa-87570f7ad119
- invalidWhen
- Not a UUID, points to a different tenant, or stores the customer-supplied header value instead of the internal row id.
- edgeCases
- On idempotency conflict, the audit row may point at the existing idempotency_key_id while outcome=failed_conflict.
- anchor
- field-platform-audit-log-idempotency-key-id
- csvName
- csvFormat
- Platform shared field
- nullability
- Optional by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- idempotency_key_id uuid. Nullability: nullable; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-007 and PITD-009 connect retry behavior to audit.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}itds
[
{
"id": "Platform shared",
"title": "PITD-007 and PITD-009 connect retry behavior to audit.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
]occurred_at
- type
- timestamptz
- required
- Yes
- default
- now()
- key
- Ordering
- meaning
- Timestamp when the audited action reached the recorded outcome.
- constraints
- Required timestamp with time zone. Stored in UTC by database convention.
- relationship
- Used with tenant_id and resource lookup indexes.
- example
- 2026-05-21T12:01:08Z
- invalidWhen
- Null, manually backdated without maintenance evidence, or compared as local time.
- edgeCases
- For async accepted work, occurred_at is acceptance time; final job completion has its own module state and possible audit row.
- anchor
- field-platform-audit-log-occurred-at
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- occurred_at timestamptz not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-009 required occurred_at.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}itds
[
{
"id": "Platform shared",
"title": "PITD-009 required occurred_at.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
]redacted_metadata
- type
- jsonb
- required
- Yes
- default
- '{}'::jsonb
- key
- meaning
- Small, safe, structured context that helps explain the audit event without storing raw sensitive data.
- constraints
- Must be a JSON object. Allowed content includes counts, hashes, profile names, version numbers, safe problem codes, and redacted summaries. Must not include raw request bodies, tokens, learner names, emails, phone numbers, SIS IDs, raw package bytes, IP addresses, user agents, or direct PII.
- relationship
- No foreign key. If a metadata field becomes query-critical, promote it to a typed column in a later dictionary attempt.
- example
- {"packageHash":"sha256:6a8c1f58c16f4b0b4f0a0d8c6be8d226e3d5d80f0b2f7d2f49e6d7d9e9d4f1cb","resourceCount":18}
- invalidWhen
- Null, non-object JSON, stores secrets/PII/raw bodies, or becomes the only place a required relationship is stored.
- edgeCases
- For validation failures, store safe error codes and field names, not the full rejected payload.
- anchor
- field-platform-audit-log-redacted-metadata
- csvName
- csvFormat
- Platform shared field
- nullability
- Required by approved platform data dictionary.
- pii
- See platform dictionary
- privacyTag
- PII: No
- ddl
- redacted_metadata jsonb not null. Nullability: NOT NULL; inherited from the approved platform migration.
- indexPolicy
- Inherited from the approved platform data dictionary; use the platform table-level indexes shown above rather than redefining them in oneroster.*.
- cascadePolicy
- multiValueExample
- sourceClass
- Inherited platform shared table
- sourceBasis
- Mirrored from approved platform data dictionary: https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
- sourceUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/
allowedValues
[]
provenance
{
"label": "Platform shared",
"basis": "PITD-008 and PITD-009 require redacted audit metadata.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-008-privacy-pii-student-data"
}itds
[
{
"id": "Platform shared",
"title": "PITD-008 and PITD-009 require redacted audit metadata.",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-008-privacy-pii-student-data"
}
]oneroster.import_batch · Import Batch
- fileName
- platform gap fill
- purpose
- Use this table to prove which package, mode, source system, hash, manifest version, and OneRoster version produced rows or exports.
- lifecycle
- Created when an import or export is accepted. Moves through accepted, validated, applied, rejected, or exported according to executed evidence.
- sourceClass
- Platform gap fill
- sourceBasis
- OneRoster defines CSV files but not TimeBack's durable import/export evidence. OITD-006 supplies the smallest platform gap fill.
- primaryKey
- (tenant_id, batch_id)
- anchor
- table-oneroster-import-batch
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-015-docs-release-evidence",
"title": "OITD-015 Hosted documentation and conformance claims require real evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-015-docs-release-evidence"
},
{
"id": "oitd-017-empty-tenant-bootstrap",
"title": "OITD-017 Fresh production tenants need a documented bootstrap path",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-017-empty-tenant-bootstrap"
}
]relationships
[ "Belongs to one platform.tenant through tenant_id.", "Parent of generated oneroster.* rows through (tenant_id, import_batch_id).", "Feeds audit and idempotency evidence through platform helpers rather than duplicating platform.audit_log or platform.idempotency_key." ]
constraints
[ "direction must be import or export.", "mode must be bulk or delta.", "status must be accepted, validated, applied, rejected, or exported.", "package_hash is required for imported packages and should use a sha256: prefix.", "completed_at must be null until the batch reaches a terminal state.", "A fresh tenant bootstrap import follows the OITD-017 dependency-safe order before verification reads." ]
indexes
[ "primary key (tenant_id, batch_id)", "index (tenant_id, created_at desc)", "index (tenant_id, status)" ]
invalidExamples
[ "direction = sync because the platform only records import or export.", "mode = full because OneRoster uses bulk, not full.", "status = done because terminal import state is applied and terminal export state is exported.", "package_hash contains raw package bytes or a non-hash label.", "completed_at is earlier than created_at." ]
example
{
"batch_id": "orbatch_20260522_001",
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"direction": "import",
"mode": "bulk",
"source_system_name": "North Valley SIS",
"source_system_code": "nvsis",
"package_hash": "sha256:6a8c1f58c16f4b0b4f0a0d8c6be8d226e3d5d80f0b2f7d2f49e6d7d9e9d4f1cb",
"manifest_version": "1.0",
"oneroster_version": "1.2",
"status": "applied",
"created_at": "2026-05-22T13:30:00Z",
"completed_at": "2026-05-22T13:31:10Z"
}queries
[ "select batch_id, status from oneroster.import_batch where tenant_id = $1 order by created_at desc limit 20;", "select count(*) from oneroster.users where tenant_id = $1 and import_batch_id = $2;" ]
Fields (12)
batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite primary key
- meaning
- Stable identifier for one OneRoster import or export evidence record.
- constraints
- Unique within tenant_id across oneroster.import_batch. Recommended format is an opaque id such as orbatch_YYYYMMDD_NNN.
- range
- Text domain pinned by this field's constraints.
- relationship
- Referenced by generated oneroster.* rows through (tenant_id, import_batch_id).
- ddl
- batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by this platform gap fill unless a table-level index names it.
- cascadePolicy
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Blank, reused for another package in the same tenant, or changed after rows have been linked to it.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 batch evidence identifier.
- anchor
- field-oneroster-import-batch-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
}
]allowedValues
[]
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite primary key + foreign key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-import-batch-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
direction
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Whether this batch records a package entering the platform or a package produced by export.
- constraints
- Allowed values are import and export.
- range
- Text domain pinned by this field's constraints.
- relationship
- No foreign key. Controls how package_hash and completed_at are interpreted.
- ddl
- direction text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by this platform gap fill unless a table-level index names it.
- cascadePolicy
- multiValueExample
- example
- import
- invalidWhen
- Anything other than import or export.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 distinguishes import and export evidence.
- anchor
- field-oneroster-import-batch-direction
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
]allowedValues
[
{
"value": "import",
"meaning": "A source package was accepted for validation and persistence.",
"useWhen": "Use for uploaded or received CSV packages.",
"invalidWhen": "Invalid for package files generated by the platform.",
"provenance": {
"label": "Platform gap fill",
"basis": "OITD-006 direction vocabulary.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
},
{
"value": "export",
"meaning": "The platform produced a OneRoster package as evidence or customer output.",
"useWhen": "Use for generated export packages.",
"invalidWhen": "Invalid for uploaded packages.",
"provenance": {
"label": "Platform gap fill",
"basis": "OITD-006 direction vocabulary.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
}
]mode
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- OneRoster package mode copied from manifest semantics: bulk is a full snapshot, delta is a change set.
- constraints
- Allowed values are bulk and delta.
- range
- Text domain pinned by this field's constraints.
- relationship
- No foreign key. Determines whether generated row status/dateLastModified fields are allowed or required.
- ddl
- mode text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by this platform gap fill unless a table-level index names it.
- cascadePolicy
- multiValueExample
- example
- bulk
- invalidWhen
- Outside bulk/delta or inconsistent with manifest file modes.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 records import/export mode and OITD-009 enforces bulk/delta validation.
- anchor
- field-oneroster-import-batch-mode
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "bulk",
"meaning": "Package is a full replacement snapshot for included files.",
"useWhen": "Use when import should compare complete files and mark missing records according to bulk behavior.",
"invalidWhen": "Invalid when rows include delta-only status/dateLastModified values.",
"provenance": {
"label": "Platform gap fill",
"basis": "OITD-006 mode vocabulary.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
},
{
"value": "delta",
"meaning": "Package is a set of changes whose rows use status/dateLastModified.",
"useWhen": "Use when import should apply row-level active/tobedeleted changes.",
"invalidWhen": "Invalid when delta rows omit required status/dateLastModified values.",
"provenance": {
"label": "Platform gap fill",
"basis": "OITD-006 mode vocabulary.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
}
]source_system_name
- csvName
- type
- text
- csvFormat
- Platform field
- required
- No
- nullability
- Optional platform persistence field.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Optional source.systemName from manifest.csv, stored with the batch so operators can identify the sender.
- constraints
- Text copied from manifest.csv. Must not contain credentials, tokens, or direct student/parent PII.
- range
- Text domain pinned by this field's constraints.
- relationship
- Copied from oneroster.manifest_entry.source_system_name when present.
- ddl
- source_system_name text. Nullability: nullable.
- indexPolicy
- No standalone index required by this platform gap fill unless a table-level index names it.
- cascadePolicy
- multiValueExample
- example
- North Valley SIS
- invalidWhen
- Contains a secret, raw token, or is treated as a tenant identifier.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 preserves source-system evidence.
- anchor
- field-oneroster-import-batch-source-system-name
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
source_system_code
- csvName
- type
- text
- csvFormat
- Platform field
- required
- No
- nullability
- Optional platform persistence field.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Optional source.systemCode from manifest.csv, stored with the batch as a machine-readable sender code.
- constraints
- Text copied from manifest.csv. Use as evidence, not as authorization.
- range
- Text domain pinned by this field's constraints.
- relationship
- Copied from oneroster.manifest_entry.source_system_code when present.
- ddl
- source_system_code text. Nullability: nullable.
- indexPolicy
- No standalone index required by this platform gap fill unless a table-level index names it.
- cascadePolicy
- multiValueExample
- example
- nvsis
- invalidWhen
- Used as a secret, tenant key, or replacement for tenant_id.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 preserves source-system evidence.
- anchor
- field-oneroster-import-batch-source-system-code
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
]allowedValues
[]
package_hash
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Cryptographic hash of the normalized package or exported payload used to prove which bytes were accepted or produced.
- constraints
- Use sha256:<hex> format for package evidence. Do not store raw package bytes here.
- range
- Text domain pinned by this field's constraints.
- relationship
- No foreign key. May be used with tenant_id to detect duplicate package imports.
- ddl
- package_hash text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by this platform gap fill unless a table-level index names it.
- cascadePolicy
- multiValueExample
- example
- sha256:6a8c1f58c16f4b0b4f0a0d8c6be8d226e3d5d80f0b2f7d2f49e6d7d9e9d4f1cb
- invalidWhen
- Missing for a completed import/export, not a hash, or computed from a non-normalized payload without documenting that fact.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 and OITD-015 require real evidence for imports, exports, and conformance claims.
- anchor
- field-oneroster-import-batch-package-hash
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-015-docs-release-evidence",
"title": "OITD-015 Hosted documentation and conformance claims require real evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-015-docs-release-evidence"
}
]allowedValues
[]
manifest_version
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Manifest version copied from manifest.csv for this batch.
- constraints
- For OneRoster 1.2 CSV Binding 1.2.1, the initial value must be 1.0.
- range
- Text domain pinned by this field's constraints.
- relationship
- Copied from oneroster.manifest_entry.manifest_version.
- ddl
- manifest_version text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by this platform gap fill unless a table-level index names it.
- cascadePolicy
- multiValueExample
- example
- 1.0
- invalidWhen
- Not 1.0 for this surface or inconsistent with the manifest row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- 1EdTech pass-through value recorded as batch evidence by OITD-006.
- anchor
- field-oneroster-import-batch-manifest-version
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
]allowedValues
[]
oneroster_version
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- OneRoster version declared by the manifest for this batch.
- constraints
- Must be 1.2 for this 1EdTech OneRoster surface.
- range
- Text domain pinned by this field's constraints.
- relationship
- Copied from oneroster.manifest_entry.oneroster_version.
- ddl
- oneroster_version text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by this platform gap fill unless a table-level index names it.
- cascadePolicy
- multiValueExample
- example
- 1.2
- invalidWhen
- Not 1.2 or inconsistent with the manifest row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- 1EdTech pass-through value recorded as batch evidence by OITD-006.
- anchor
- field-oneroster-import-batch-oneroster-version
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
]allowedValues
[]
status
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Execution state of the import/export batch.
- constraints
- Allowed values are accepted, validated, applied, rejected, and exported.
- range
- Text domain pinned by this field's constraints.
- relationship
- No foreign key. Controls whether generated rows can be trusted as applied evidence.
- ddl
- status text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by this platform gap fill unless a table-level index names it.
- cascadePolicy
- multiValueExample
- example
- applied
- invalidWhen
- Outside the documented batch lifecycle or advanced without executed validation/import/export evidence.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 and OITD-015 require real evidence for lifecycle claims.
- anchor
- field-oneroster-import-batch-status
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-015-docs-release-evidence",
"title": "OITD-015 Hosted documentation and conformance claims require real evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-015-docs-release-evidence"
}
]allowedValues
[
{
"value": "accepted",
"meaning": "The platform accepted the package/job but has not completed validation.",
"useWhen": "Use immediately after the upload or export request is accepted.",
"invalidWhen": "Invalid if no executed evidence supports this lifecycle state.",
"provenance": {
"label": "Platform gap fill",
"basis": "OITD-006 status vocabulary.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
},
{
"value": "validated",
"meaning": "CSV structure, required fields, allowed values, dependencies, and privacy checks passed.",
"useWhen": "Use only after validation has run and passed.",
"invalidWhen": "Invalid if no executed evidence supports this lifecycle state.",
"provenance": {
"label": "Platform gap fill",
"basis": "OITD-006 status vocabulary.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
},
{
"value": "applied",
"meaning": "A validated import committed generated OneRoster rows.",
"useWhen": "Use after the validated import writes the generated tables.",
"invalidWhen": "Invalid if no executed evidence supports this lifecycle state.",
"provenance": {
"label": "Platform gap fill",
"basis": "OITD-006 status vocabulary.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
},
{
"value": "rejected",
"meaning": "Validation or dependency checks failed; generated rows from this batch must not be trusted.",
"useWhen": "Use when validation or dependency checks fail.",
"invalidWhen": "Invalid if no executed evidence supports this lifecycle state.",
"provenance": {
"label": "Platform gap fill",
"basis": "OITD-006 status vocabulary.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
},
{
"value": "exported",
"meaning": "The platform produced an export package and recorded its evidence.",
"useWhen": "Use after an export package is produced and hashed.",
"invalidWhen": "Invalid if no executed evidence supports this lifecycle state.",
"provenance": {
"label": "Platform gap fill",
"basis": "OITD-006 status vocabulary.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
}
]created_at
- csvName
- type
- timestamptz
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Timestamp when the batch evidence row was created.
- constraints
- UTC timestamp with time zone. Must be present.
- range
- UTC timestamp with time zone.
- relationship
- No foreign key. Used for operational ordering.
- ddl
- created_at timestamptz not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by this platform gap fill unless a table-level index names it.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:30:00Z
- invalidWhen
- Null, unparsable, or later than completed_at.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 batch evidence timestamp.
- anchor
- field-oneroster-import-batch-created-at
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
]allowedValues
[]
completed_at
- csvName
- type
- timestamptz
- csvFormat
- Platform field
- required
- No
- nullability
- Optional platform persistence field.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Timestamp when a batch reached a terminal state.
- constraints
- UTC timestamp with time zone. Null while status is accepted or validated.
- range
- UTC timestamp with time zone.
- relationship
- No foreign key. Used for duration and evidence reporting.
- ddl
- completed_at timestamptz. Nullability: nullable.
- indexPolicy
- No standalone index required by this platform gap fill unless a table-level index names it.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:31:10Z
- invalidWhen
- Before created_at, present before the batch is terminal, or missing after applied/rejected/exported.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 batch evidence completion timestamp.
- anchor
- field-oneroster-import-batch-completed-at
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-015-docs-release-evidence",
"title": "OITD-015 Hosted documentation and conformance claims require real evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-015-docs-release-evidence"
}
]allowedValues
[]
oneroster.manifest_entry · Manifest Entry
- fileName
- manifest.csv
- schemaName
- Manifest
- sourceCaption
- Table 3.1 - Format for the contents of the 'manifest.csv' file.
- purpose
- Use this table to verify that an imported OneRoster package is structurally valid before any roster, resource, or gradebook rows are trusted.
- lifecycle
- Created once per import batch from manifest.csv. A valid package keeps exactly one manifest row per tenant and import_batch_id.
- sourceClass
- 1EdTech pass-through with generated platform projection fields
- sourceBasis
- CSV fields, names, requiredness, formats, and values come from manifest.csv in OneRoster CSV Binding 1.2.1. tenant_id and import_batch_id are platform3 gap fills.
- primaryKey
- (tenant_id, import_batch_id)
- anchor
- table-oneroster-manifest-entry
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-002-surface-boundary",
"title": "OITD-002 The 1EdTech surface is broad OneRoster",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-002-surface-boundary"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]relationships
[ "Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.", "Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows." ]
constraints
[ "Rows are tenant-scoped by tenant_id.", "Rows are evidence-scoped by import_batch_id.", "OneRoster source columns preserve exact CSV field names through csvName and snake_case SQL column names.", "metadata.* extension headers are allowed by OITD-009 when they use the metadata namespace.", "Allowed values preserve exact 1EdTech spelling, punctuation, and spaces.", "Tenant-scoped foreign keys use NO ACTION/RESTRICT by default; OneRoster lifecycle changes are represented through imports/status rather than ON DELETE CASCADE." ]
indexes
[ "primary key (tenant_id, import_batch_id)", "index (tenant_id, import_batch_id)", "index (tenant_id, oneroster_version)" ]
invalidExamples
[ "A row whose tenant_id differs from the JWT tenant_id claim.", "A generated row missing import_batch_id evidence.", "A required source field is blank in the mode where OneRoster requires it.", "An enum value differs by capitalization, spacing, or punctuation.", "A GUID Reference points to a row outside the tenant or absent from required files." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"import_batch_id": "orbatch_20260522_001",
"manifest_version": "1.0",
"oneroster_version": "1.2",
"file_academic_sessions": "bulk",
"file_categories": "bulk",
"file_classes": "bulk",
"file_class_resources": "bulk",
"file_courses": "bulk",
"file_course_resources": "bulk",
"file_demographics": "bulk",
"file_enrollments": "bulk",
"file_line_item_learning_objective_ids": "bulk",
"file_line_items": "bulk",
"file_line_item_score_scales": "bulk",
"file_orgs": "bulk",
"file_resources": "bulk",
"file_result_learning_objective_ids": "bulk",
"file_results": "bulk",
"file_result_score_scales": "bulk",
"file_roles": "bulk",
"file_score_scales": "bulk",
"file_user_profiles": "bulk",
"file_user_resources": "bulk",
"file_users": "bulk",
"source_system_name": "North Valley SIS",
"source_system_code": "source-systemcode-001"
}queries
[ "select * from oneroster.manifest_entry where tenant_id = $1 limit 20;", "select oneroster_version, file_users, file_classes from oneroster.manifest_entry where tenant_id = $1 and import_batch_id = $2;" ]
Fields (27)
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-manifest-entry-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
import_batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Import/export evidence row that produced this generated OneRoster projection row.
- constraints
- Must pair with tenant_id to reference oneroster.import_batch(tenant_id, batch_id) and should be stable for all rows created by the same validated package.
- range
- Text domain pinned by this field's constraints.
- relationship
- Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.
- ddl
- import_batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, import_batch_id) on generated OneRoster tables.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Missing, points to a batch owned by another tenant, or does not match the package that supplied this row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 makes import/export batch evidence first-class.
- anchor
- field-oneroster-manifest-entry-import-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
}
]allowedValues
[]
manifest_version
- csvName
- manifest.version
- type
- text
- csvFormat
- String
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The version of the manifest. For an initial value this must be "1.0".
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 0 to 255 visible characters unless the field-specific description narrows it; no ASCII control characters. Use a NOT NULL plus btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 255 visible characters unless the field-specific description narrows it; no ASCII control characters.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- manifest_version text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- 1.0
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-manifest-version
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
oneroster_version
- csvName
- oneroster.version
- type
- text
- csvFormat
- String
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The OneRoster version supported by this file set. This must be "1.2" for implementations of this version of the specification.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 0 to 255 visible characters unless the field-specific description narrows it; no ASCII control characters. Use a NOT NULL plus btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 255 visible characters unless the field-specific description narrows it; no ASCII control characters.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- oneroster_version text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- 1.2
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-oneroster-version
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
file_academic_sessions
- csvName
- file.academicSessions
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Manifest declaration for academicSessions.csv. It tells validation whether that file is absent, a bulk file, or a delta file in this package.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: absent, bulk, delta.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- file_academic_sessions text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- bulk
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- If a manifest marks a file as absent, the corresponding CSV must not appear in the package and dependent rows must still be semantically complete.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-file-academic-sessions
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_academic_sessions.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_academic_sessions.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_academic_sessions.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]file_categories
- csvName
- file.categories
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Manifest declaration for categories.csv. It tells validation whether that file is absent, a bulk file, or a delta file in this package.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: absent, bulk, delta.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- file_categories text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- bulk
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- If a manifest marks a file as absent, the corresponding CSV must not appear in the package and dependent rows must still be semantically complete.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-file-categories
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_categories.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_categories.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_categories.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]file_classes
- csvName
- file.classes
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Manifest declaration for classes.csv. It tells validation whether that file is absent, a bulk file, or a delta file in this package.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: absent, bulk, delta.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- file_classes text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- bulk
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- If a manifest marks a file as absent, the corresponding CSV must not appear in the package and dependent rows must still be semantically complete.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-file-classes
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_classes.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_classes.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_classes.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]file_class_resources
- csvName
- file.classResources
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Manifest declaration for classResources.csv. It tells validation whether that file is absent, a bulk file, or a delta file in this package.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: absent, bulk, delta.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- file_class_resources text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- bulk
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- If a manifest marks a file as absent, the corresponding CSV must not appear in the package and dependent rows must still be semantically complete.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-file-class-resources
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_class_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_class_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_class_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]file_courses
- csvName
- file.courses
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Manifest declaration for courses.csv. It tells validation whether that file is absent, a bulk file, or a delta file in this package.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: absent, bulk, delta.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- file_courses text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- bulk
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- If a manifest marks a file as absent, the corresponding CSV must not appear in the package and dependent rows must still be semantically complete.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-file-courses
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_courses.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_courses.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_courses.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]file_course_resources
- csvName
- file.courseResources
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Manifest declaration for courseResources.csv. It tells validation whether that file is absent, a bulk file, or a delta file in this package.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: absent, bulk, delta.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- file_course_resources text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- bulk
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- If a manifest marks a file as absent, the corresponding CSV must not appear in the package and dependent rows must still be semantically complete.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-file-course-resources
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_course_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_course_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_course_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]file_demographics
- csvName
- file.demographics
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Manifest declaration for demographics.csv. It tells validation whether that file is absent, a bulk file, or a delta file in this package.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: absent, bulk, delta.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- file_demographics text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- bulk
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- If a manifest marks a file as absent, the corresponding CSV must not appear in the package and dependent rows must still be semantically complete.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-file-demographics
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_demographics.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_demographics.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_demographics.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]file_enrollments
- csvName
- file.enrollments
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Manifest declaration for enrollments.csv. It tells validation whether that file is absent, a bulk file, or a delta file in this package.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: absent, bulk, delta.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- file_enrollments text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- bulk
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- If a manifest marks a file as absent, the corresponding CSV must not appear in the package and dependent rows must still be semantically complete.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-file-enrollments
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_enrollments.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_enrollments.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_enrollments.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]file_line_item_learning_objective_ids
- csvName
- file.lineItemLearningObjectiveIds
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Manifest declaration for lineItemLearningObjectiveIds.csv. It tells validation whether that file is absent, a bulk file, or a delta file in this package.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: absent, bulk, delta.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- file_line_item_learning_objective_ids text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- bulk
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- If a manifest marks a file as absent, the corresponding CSV must not appear in the package and dependent rows must still be semantically complete.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-file-line-item-learning-objective-ids
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_line_item_learning_objective_ids.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_line_item_learning_objective_ids.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_line_item_learning_objective_ids.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]file_line_items
- csvName
- file.lineItems
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Manifest declaration for lineItems.csv. It tells validation whether that file is absent, a bulk file, or a delta file in this package.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: absent, bulk, delta.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- file_line_items text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- bulk
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- If a manifest marks a file as absent, the corresponding CSV must not appear in the package and dependent rows must still be semantically complete.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-file-line-items
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_line_items.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_line_items.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_line_items.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]file_line_item_score_scales
- csvName
- file.lineItemScoreScales
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Manifest declaration for lineItemScoreScales.csv. It tells validation whether that file is absent, a bulk file, or a delta file in this package.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: absent, bulk, delta.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- file_line_item_score_scales text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- bulk
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- If a manifest marks a file as absent, the corresponding CSV must not appear in the package and dependent rows must still be semantically complete.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-file-line-item-score-scales
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_line_item_score_scales.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_line_item_score_scales.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_line_item_score_scales.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]file_orgs
- csvName
- file.orgs
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Manifest declaration for orgs.csv. It tells validation whether that file is absent, a bulk file, or a delta file in this package.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: absent, bulk, delta.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- file_orgs text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- bulk
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- If a manifest marks a file as absent, the corresponding CSV must not appear in the package and dependent rows must still be semantically complete.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-file-orgs
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_orgs.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_orgs.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_orgs.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]file_resources
- csvName
- file.resources
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Manifest declaration for resources.csv. It tells validation whether that file is absent, a bulk file, or a delta file in this package.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: absent, bulk, delta.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- file_resources text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- bulk
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- If a manifest marks a file as absent, the corresponding CSV must not appear in the package and dependent rows must still be semantically complete.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-file-resources
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]file_result_learning_objective_ids
- csvName
- file.resultLearningObjectiveIds
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Manifest declaration for resultLearningObjectiveIds.csv. It tells validation whether that file is absent, a bulk file, or a delta file in this package.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: absent, bulk, delta.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- file_result_learning_objective_ids text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- bulk
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- If a manifest marks a file as absent, the corresponding CSV must not appear in the package and dependent rows must still be semantically complete.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-file-result-learning-objective-ids
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_result_learning_objective_ids.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_result_learning_objective_ids.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_result_learning_objective_ids.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]file_results
- csvName
- file.results
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Manifest declaration for results.csv. It tells validation whether that file is absent, a bulk file, or a delta file in this package.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: absent, bulk, delta.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- file_results text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- bulk
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- If a manifest marks a file as absent, the corresponding CSV must not appear in the package and dependent rows must still be semantically complete.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-file-results
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_results.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_results.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_results.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]file_result_score_scales
- csvName
- file.resultScoreScales
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Manifest declaration for resultScoreScales.csv. It tells validation whether that file is absent, a bulk file, or a delta file in this package.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: absent, bulk, delta.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- file_result_score_scales text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- bulk
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- If a manifest marks a file as absent, the corresponding CSV must not appear in the package and dependent rows must still be semantically complete.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-file-result-score-scales
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_result_score_scales.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_result_score_scales.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_result_score_scales.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]file_roles
- csvName
- file.roles
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Manifest declaration for roles.csv. It tells validation whether that file is absent, a bulk file, or a delta file in this package.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: absent, bulk, delta.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- file_roles text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- bulk
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- If a manifest marks a file as absent, the corresponding CSV must not appear in the package and dependent rows must still be semantically complete.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-file-roles
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_roles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_roles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_roles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]file_score_scales
- csvName
- file.scoreScales
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Manifest declaration for scoreScales.csv. It tells validation whether that file is absent, a bulk file, or a delta file in this package.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: absent, bulk, delta.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- file_score_scales text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- bulk
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- If a manifest marks a file as absent, the corresponding CSV must not appear in the package and dependent rows must still be semantically complete.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-file-score-scales
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_score_scales.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_score_scales.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_score_scales.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]file_user_profiles
- csvName
- file.userProfiles
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Manifest declaration for userProfiles.csv. It tells validation whether that file is absent, a bulk file, or a delta file in this package.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: absent, bulk, delta.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- file_user_profiles text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- bulk
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- If a manifest marks a file as absent, the corresponding CSV must not appear in the package and dependent rows must still be semantically complete.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-file-user-profiles
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_user_profiles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_user_profiles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_user_profiles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]file_user_resources
- csvName
- file.userResources
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Manifest declaration for userResources.csv. It tells validation whether that file is absent, a bulk file, or a delta file in this package.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: absent, bulk, delta.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- file_user_resources text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- bulk
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- If a manifest marks a file as absent, the corresponding CSV must not appear in the package and dependent rows must still be semantically complete.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-file-user-resources
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_user_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_user_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_user_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]file_users
- csvName
- file.users
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Manifest declaration for users.csv. It tells validation whether that file is absent, a bulk file, or a delta file in this package.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: absent, bulk, delta.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- file_users text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- bulk
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- If a manifest marks a file as absent, the corresponding CSV must not appear in the package and dependent rows must still be semantically complete.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-file-users
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_users.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_users.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_users.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]source_system_name
- csvName
- source.systemName
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The name for the system producing the set of files.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 160 visible characters; must not contain credentials or learner PII. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 160 visible characters; must not contain credentials or learner PII.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- source_system_name text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- North Valley SIS
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-source-system-name
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
source_system_code
- csvName
- source.systemCode
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Identification code for the system producing the set of files.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 80 printable characters; use a sender code, not a secret. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 80 printable characters; use a sender code, not a secret.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- source_system_code text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- source-systemcode-001
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv.
- anchor
- field-oneroster-manifest-entry-source-system-code
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
oneroster.academic_sessions · Academic Sessions
- fileName
- academicSessions.csv
- schemaName
- AcademicSessions
- sourceCaption
- The academicSessions.csv file format and contents.
- purpose
- Use this table to answer which school calendar window a class, course, gradebook item, or score scale belongs to.
- lifecycle
- Loaded from academicSessions.csv before dependent classes, courses, line items, and score scales are accepted.
- sourceClass
- 1EdTech pass-through with generated platform projection fields
- sourceBasis
- CSV fields, names, requiredness, formats, and values come from academicSessions.csv in OneRoster CSV Binding 1.2.1. tenant_id and import_batch_id are platform3 gap fills.
- primaryKey
- (tenant_id, sourced_id)
- anchor
- table-oneroster-academic-sessions
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-002-surface-boundary",
"title": "OITD-002 The 1EdTech surface is broad OneRoster",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-002-surface-boundary"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]relationships
[ "Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.", "Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.", "Optional self-reference to one academic_sessions row in the same tenant; one parent session can have many child sessions." ]
constraints
[ "Rows are tenant-scoped by tenant_id.", "Rows are evidence-scoped by import_batch_id.", "OneRoster source columns preserve exact CSV field names through csvName and snake_case SQL column names.", "metadata.* extension headers are allowed by OITD-009 when they use the metadata namespace.", "Allowed values preserve exact 1EdTech spelling, punctuation, and spaces.", "Tenant-scoped foreign keys use NO ACTION/RESTRICT by default; OneRoster lifecycle changes are represented through imports/status rather than ON DELETE CASCADE." ]
indexes
[ "primary key (tenant_id, sourced_id)", "index (tenant_id, import_batch_id)", "index (tenant_id, sourced_id)", "index (tenant_id, status)", "index (tenant_id, date_last_modified)" ]
invalidExamples
[ "A row whose tenant_id differs from the JWT tenant_id claim.", "A generated row missing import_batch_id evidence.", "A required source field is blank in the mode where OneRoster requires it.", "An enum value differs by capitalization, spacing, or punctuation.", "A GUID Reference points to a row outside the tenant or absent from required files." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"import_batch_id": "orbatch_20260522_001",
"sourced_id": "academic_sessions-001",
"status": "active",
"date_last_modified": "2026-05-22T13:45:30.000Z",
"title": "Academic Sessions sample",
"type": "schoolYear",
"start_date": "2026-08-15",
"end_date": "2027-06-01",
"parent_sourced_id": "session-school-year-2027",
"school_year": "2027"
}queries
[ "select * from oneroster.academic_sessions where tenant_id = $1 limit 20;", "select * from oneroster.academic_sessions where tenant_id = $1 and sourced_id = $2;" ]
Fields (11)
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-academic-sessions-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
import_batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Import/export evidence row that produced this generated OneRoster projection row.
- constraints
- Must pair with tenant_id to reference oneroster.import_batch(tenant_id, batch_id) and should be stable for all rows created by the same validated package.
- range
- Text domain pinned by this field's constraints.
- relationship
- Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.
- ddl
- import_batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, import_batch_id) on generated OneRoster tables.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Missing, points to a batch owned by another tenant, or does not match the package that supplied this row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 makes import/export batch evidence first-class.
- anchor
- field-oneroster-academic-sessions-import-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
}
]allowedValues
[]
sourced_id
- csvName
- sourcedId
- type
- text
- csvFormat
- GUID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- Natural key within tenant and table
- meaning
- Tenant-scoped OneRoster identifier for this academic sessions row.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object. Enforce uniqueness within tenant and table.
- range
- 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object.
- relationship
- Tenant-scoped OneRoster identifier for this academic_sessions row. Other tables may reference it according to the CSV dependency matrix.
- ddl
- sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Part of primary key (tenant_id, sourced_id); this is the target column for same-tenant references into oneroster.academic_sessions.
- cascadePolicy
- multiValueExample
- example
- academic_sessions-001
- invalidWhen
- Blank, duplicated within the same tenant and table, or changed between imports for the same logical object.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for academicSessions.csv.
- anchor
- field-oneroster-academic-sessions-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
status
- csvName
- status
- type
- text
- csvFormat
- Enumeration
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Must be one of the documented allowed values, preserving exact spelling and spaces. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- Allowed values: active, tobedeleted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- status text; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, status) on high-volume tables that expose active/tobedeleted filtering; pair with date_last_modified for delta replay.
- cascadePolicy
- multiValueExample
- example
- active
- invalidWhen
- Provided in a bulk file, missing in a delta file, or outside active/tobedeleted.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for academicSessions.csv.
- anchor
- field-oneroster-academic-sessions-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for academic_sessions.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for academic_sessions.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]date_last_modified
- csvName
- dateLastModified
- type
- timestamptz
- csvFormat
- DateTime
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Use ISO 8601 UTC resolution YYYY-MM-DDTHH:MM:SS.sssZ. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- ISO 8601 UTC timestamp at millisecond resolution.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- date_last_modified timestamptz; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, date_last_modified) when serving modifiedSince or delta-audit reads.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:45:30.000Z
- invalidWhen
- Provided in a bulk file, missing in a delta file, not ISO 8601 UTC, or earlier than a previous delta for the same sourcedId.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for academicSessions.csv.
- anchor
- field-oneroster-academic-sessions-date-last-modified
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
title
- csvName
- title
- type
- text
- csvFormat
- String
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Name or title of the academic session.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 visible characters when required; 0 to 255 when optional. Use a NOT NULL plus btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 1 to 255 visible characters when required; 0 to 255 when optional.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- title text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- Academic Sessions sample
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for academicSessions.csv.
- anchor
- field-oneroster-academic-sessions-title
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
type
- csvName
- type
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Calendar-window type for the academic session. Courses usually point at schoolYear, classes usually list term or semester rows, and gradebook reporting can use gradingPeriod.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: gradingPeriod, semester, schoolYear, term.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- type text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- schoolYear
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for academicSessions.csv.
- anchor
- field-oneroster-academic-sessions-type
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "gradingPeriod",
"meaning": "An academic session used as a gradebook reporting period.",
"useWhen": "Use when line items or results need grading-period context.",
"invalidWhen": "Invalid for a session that spans an entire school year.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for academic_sessions.type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "semester",
"meaning": "An academic session representing a semester.",
"useWhen": "Use when the school calendar divides a year into semesters.",
"invalidWhen": "Invalid for a shorter term or grading period.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for academic_sessions.type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "schoolYear",
"meaning": "An academic session representing the school year.",
"useWhen": "Use for course schoolYearSourcedId and whole-year calendar context.",
"invalidWhen": "Invalid for a semester, term, or grading period.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for academic_sessions.type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "term",
"meaning": "An academic session representing a term.",
"useWhen": "Use for class termSourcedIds when the class runs during that term.",
"invalidWhen": "Invalid when a more specific gradingPeriod or semester is required.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for academic_sessions.type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]start_date
- csvName
- startDate
- type
- date
- csvFormat
- Date
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Inclusive end date for the academic session. ISO 8601 format [ISO8601].
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Use ISO 8601 calendar date YYYY-MM-DD.
- range
- ISO 8601 date.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- start_date date not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- 2026-08-15
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for academicSessions.csv.
- anchor
- field-oneroster-academic-sessions-start-date
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
end_date
- csvName
- endDate
- type
- date
- csvFormat
- Date
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Exclusive end date for the academic session. ISO 8601 format [ISO8601].
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Use ISO 8601 calendar date YYYY-MM-DD.
- range
- ISO 8601 date.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- end_date date not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required; include end_date in a composite index only for date-window queries such as active enrollments.
- cascadePolicy
- multiValueExample
- example
- 2027-06-01
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for academicSessions.csv.
- anchor
- field-oneroster-academic-sessions-end-date
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
parent_sourced_id
- csvName
- parentSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the parent of this academic session.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- Optional self-reference to one academic_sessions row in the same tenant; one parent session can have many child sessions.
- ddl
- parent_sourced_id text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- session-school-year-2027
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for academicSessions.csv.
- anchor
- field-oneroster-academic-sessions-parent-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
school_year
- csvName
- schoolYear
- type
- integer
- csvFormat
- Year
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The school year for which the academic session contributes. This year should be that in which the school year ends (Format is: YYYY).
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Use a four-digit year, normally the calendar year in which the school year ends.
- range
- 0000 through 9999, with OneRoster meaning tied to the year the school year ends.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- school_year integer not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- 2027
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for academicSessions.csv.
- anchor
- field-oneroster-academic-sessions-school-year
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
oneroster.categories · Categories
- fileName
- categories.csv
- schemaName
- Categories
- sourceCaption
- The categories.csv file format and contents.
- purpose
- Use this table to group line items and preserve the category weighting vocabulary from a source SIS or LMS.
- lifecycle
- Loaded from categories.csv before dependent lineItems.csv rows are accepted.
- sourceClass
- 1EdTech pass-through with generated platform projection fields
- sourceBasis
- CSV fields, names, requiredness, formats, and values come from categories.csv in OneRoster CSV Binding 1.2.1. tenant_id and import_batch_id are platform3 gap fills.
- primaryKey
- (tenant_id, sourced_id)
- anchor
- table-oneroster-categories
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-002-surface-boundary",
"title": "OITD-002 The 1EdTech surface is broad OneRoster",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-002-surface-boundary"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]relationships
[ "Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.", "Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows." ]
constraints
[ "Rows are tenant-scoped by tenant_id.", "Rows are evidence-scoped by import_batch_id.", "OneRoster source columns preserve exact CSV field names through csvName and snake_case SQL column names.", "metadata.* extension headers are allowed by OITD-009 when they use the metadata namespace.", "Allowed values preserve exact 1EdTech spelling, punctuation, and spaces.", "Tenant-scoped foreign keys use NO ACTION/RESTRICT by default; OneRoster lifecycle changes are represented through imports/status rather than ON DELETE CASCADE." ]
indexes
[ "primary key (tenant_id, sourced_id)", "index (tenant_id, import_batch_id)", "index (tenant_id, sourced_id)", "index (tenant_id, status)", "index (tenant_id, date_last_modified)" ]
invalidExamples
[ "A row whose tenant_id differs from the JWT tenant_id claim.", "A generated row missing import_batch_id evidence.", "A required source field is blank in the mode where OneRoster requires it.", "An enum value differs by capitalization, spacing, or punctuation.", "A GUID Reference points to a row outside the tenant or absent from required files." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"import_batch_id": "orbatch_20260522_001",
"sourced_id": "categories-001",
"status": "active",
"date_last_modified": "2026-05-22T13:45:30.000Z",
"title": "Categories sample",
"weight": "0"
}queries
[ "select * from oneroster.categories where tenant_id = $1 limit 20;", "select * from oneroster.categories where tenant_id = $1 and sourced_id = $2;" ]
Fields (7)
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-categories-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
import_batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Import/export evidence row that produced this generated OneRoster projection row.
- constraints
- Must pair with tenant_id to reference oneroster.import_batch(tenant_id, batch_id) and should be stable for all rows created by the same validated package.
- range
- Text domain pinned by this field's constraints.
- relationship
- Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.
- ddl
- import_batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, import_batch_id) on generated OneRoster tables.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Missing, points to a batch owned by another tenant, or does not match the package that supplied this row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 makes import/export batch evidence first-class.
- anchor
- field-oneroster-categories-import-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
}
]allowedValues
[]
sourced_id
- csvName
- sourcedId
- type
- text
- csvFormat
- GUID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- Natural key within tenant and table
- meaning
- Tenant-scoped OneRoster identifier for this categories row.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object. Enforce uniqueness within tenant and table.
- range
- 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object.
- relationship
- Tenant-scoped OneRoster identifier for this categories row. Other tables may reference it according to the CSV dependency matrix.
- ddl
- sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Part of primary key (tenant_id, sourced_id); this is the target column for same-tenant references into oneroster.categories.
- cascadePolicy
- multiValueExample
- example
- categories-001
- invalidWhen
- Blank, duplicated within the same tenant and table, or changed between imports for the same logical object.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for categories.csv.
- anchor
- field-oneroster-categories-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
status
- csvName
- status
- type
- text
- csvFormat
- Enumeration
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Must be one of the documented allowed values, preserving exact spelling and spaces. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- Allowed values: active, tobedeleted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- status text; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, status) on high-volume tables that expose active/tobedeleted filtering; pair with date_last_modified for delta replay.
- cascadePolicy
- multiValueExample
- example
- active
- invalidWhen
- Provided in a bulk file, missing in a delta file, or outside active/tobedeleted.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for categories.csv.
- anchor
- field-oneroster-categories-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for categories.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for categories.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]date_last_modified
- csvName
- dateLastModified
- type
- timestamptz
- csvFormat
- DateTime
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Use ISO 8601 UTC resolution YYYY-MM-DDTHH:MM:SS.sssZ. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- ISO 8601 UTC timestamp at millisecond resolution.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- date_last_modified timestamptz; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, date_last_modified) when serving modifiedSince or delta-audit reads.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:45:30.000Z
- invalidWhen
- Provided in a bulk file, missing in a delta file, not ISO 8601 UTC, or earlier than a previous delta for the same sourcedId.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for categories.csv.
- anchor
- field-oneroster-categories-date-last-modified
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
title
- csvName
- title
- type
- text
- csvFormat
- String
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The title assigned to the set of lineItems to denote its nature e.g. homework, essays, etc.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 visible characters when required; 0 to 255 when optional. Use a NOT NULL plus btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 1 to 255 visible characters when required; 0 to 255 when optional.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- title text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- Categories sample
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for categories.csv.
- anchor
- field-oneroster-categories-title
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
weight
- csvName
- weight
- type
- integer
- csvFormat
- Integer
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Total weight of this grading category in calculation of course final score. This is a Percent value only, e.g. 80%. This is a new column added in version 1.2.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Use an integer value; percent-style values are represented by the source string when the CSV description requires a percent sign.
- range
- Integer value; use the source field description for unit semantics.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- weight integer. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- 0
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for categories.csv.
- anchor
- field-oneroster-categories-weight
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
oneroster.classes · Classes
- fileName
- classes.csv
- schemaName
- Classes
- sourceCaption
- The classes.csv file format and contents.
- purpose
- Use this table to connect teachers, students, resources, assignments, and results to the actual scheduled class.
- lifecycle
- Loaded from classes.csv after courses, orgs, and academicSessions dependencies are available.
- sourceClass
- 1EdTech pass-through with generated platform projection fields
- sourceBasis
- CSV fields, names, requiredness, formats, and values come from classes.csv in OneRoster CSV Binding 1.2.1. tenant_id and import_batch_id are platform3 gap fills.
- primaryKey
- (tenant_id, sourced_id)
- anchor
- table-oneroster-classes
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-002-surface-boundary",
"title": "OITD-002 The 1EdTech surface is broad OneRoster",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-002-surface-boundary"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]relationships
[ "Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.", "Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.", "References one oneroster.courses.sourced_id in the same tenant; many classes or course resources may reference one course.", "References one oneroster.orgs.sourced_id in the same tenant; many classes, enrollments, or line items may reference one school org.", "Required comma-separated references to one or more academic_sessions.sourced_id values in the same tenant." ]
constraints
[ "Rows are tenant-scoped by tenant_id.", "Rows are evidence-scoped by import_batch_id.", "OneRoster source columns preserve exact CSV field names through csvName and snake_case SQL column names.", "metadata.* extension headers are allowed by OITD-009 when they use the metadata namespace.", "Allowed values preserve exact 1EdTech spelling, punctuation, and spaces.", "Tenant-scoped foreign keys use NO ACTION/RESTRICT by default; OneRoster lifecycle changes are represented through imports/status rather than ON DELETE CASCADE." ]
indexes
[ "primary key (tenant_id, sourced_id)", "index (tenant_id, import_batch_id)", "index (tenant_id, sourced_id)", "index (tenant_id, course_sourced_id)", "index (tenant_id, school_sourced_id)", "index (tenant_id, status)", "index (tenant_id, date_last_modified)" ]
invalidExamples
[ "A row whose tenant_id differs from the JWT tenant_id claim.", "A generated row missing import_batch_id evidence.", "A required source field is blank in the mode where OneRoster requires it.", "An enum value differs by capitalization, spacing, or punctuation.", "A GUID Reference points to a row outside the tenant or absent from required files." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"import_batch_id": "orbatch_20260522_001",
"sourced_id": "classes-001",
"status": "active",
"date_last_modified": "2026-05-22T13:45:30.000Z",
"title": "Classes sample",
"grades": "09",
"course_sourced_id": "course-algebra-1",
"class_code": "ALG1-A",
"class_type": "scheduled",
"location": "Room 214",
"school_sourced_id": "org-north-valley-high",
"term_sourced_ids": "\"session-fall-2026,session-spring-2027\"",
"subjects": "Mathematics,Algebra I",
"subject_codes": "MATH,ALG1",
"periods": "\"1,3,5\""
}queries
[ "select * from oneroster.classes where tenant_id = $1 limit 20;", "select * from oneroster.classes where tenant_id = $1 and sourced_id = $2;" ]
Fields (16)
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-classes-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
import_batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Import/export evidence row that produced this generated OneRoster projection row.
- constraints
- Must pair with tenant_id to reference oneroster.import_batch(tenant_id, batch_id) and should be stable for all rows created by the same validated package.
- range
- Text domain pinned by this field's constraints.
- relationship
- Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.
- ddl
- import_batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, import_batch_id) on generated OneRoster tables.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Missing, points to a batch owned by another tenant, or does not match the package that supplied this row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 makes import/export batch evidence first-class.
- anchor
- field-oneroster-classes-import-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
}
]allowedValues
[]
sourced_id
- csvName
- sourcedId
- type
- text
- csvFormat
- GUID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- Natural key within tenant and table
- meaning
- Tenant-scoped OneRoster identifier for this classes row.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object. Enforce uniqueness within tenant and table.
- range
- 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object.
- relationship
- Tenant-scoped OneRoster identifier for this classes row. Other tables may reference it according to the CSV dependency matrix.
- ddl
- sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Part of primary key (tenant_id, sourced_id); this is the target column for same-tenant references into oneroster.classes.
- cascadePolicy
- multiValueExample
- example
- classes-001
- invalidWhen
- Blank, duplicated within the same tenant and table, or changed between imports for the same logical object.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv.
- anchor
- field-oneroster-classes-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
status
- csvName
- status
- type
- text
- csvFormat
- Enumeration
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Must be one of the documented allowed values, preserving exact spelling and spaces. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- Allowed values: active, tobedeleted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- status text; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, status) on high-volume tables that expose active/tobedeleted filtering; pair with date_last_modified for delta replay.
- cascadePolicy
- multiValueExample
- example
- active
- invalidWhen
- Provided in a bulk file, missing in a delta file, or outside active/tobedeleted.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv.
- anchor
- field-oneroster-classes-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for classes.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for classes.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]date_last_modified
- csvName
- dateLastModified
- type
- timestamptz
- csvFormat
- DateTime
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Use ISO 8601 UTC resolution YYYY-MM-DDTHH:MM:SS.sssZ. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- ISO 8601 UTC timestamp at millisecond resolution.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- date_last_modified timestamptz; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, date_last_modified) when serving modifiedSince or delta-audit reads.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:45:30.000Z
- invalidWhen
- Provided in a bulk file, missing in a delta file, not ISO 8601 UTC, or earlier than a previous delta for the same sourcedId.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv.
- anchor
- field-oneroster-classes-date-last-modified
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
title
- csvName
- title
- type
- text
- csvFormat
- String
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Name of this class.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 visible characters when required; 0 to 255 when optional. Use a NOT NULL plus btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 1 to 255 visible characters when required; 0 to 255 when optional.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- title text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- Classes sample
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv.
- anchor
- field-oneroster-classes-title
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
grades
- csvName
- grades
- type
- text
- csvFormat
- List of Strings
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Grade(s) for which the class is attended. The permitted vocabulary should be agreed as part of the definition of the usage of this specification.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 512 characters for the full CSV cell; each grade token should be a CEDS-compatible grade-level code such as 09, 10, PK, or KG. CSV list values must follow RFC4180 quoting rules when they contain commas.
- range
- 0 to 512 characters for the full CSV cell; each grade token should be a CEDS-compatible grade-level code such as 09, 10, PK, or KG.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- grades text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- Do not index the raw CSV cell for joins; build a documented helper view or expression index after RFC4180 token validation if a query path needs it.
- cascadePolicy
- multiValueExample
- Stored cell example: 09; parse as an RFC4180 list before validation, search, or joins.
- example
- 09
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- OneRoster leaves grade vocabulary to the profile; platform3 treats each token as a CEDS-compatible grade-level code where possible. The raw CSV cell is stored unchanged, and local Alpha restrictions must be documented separately.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv.
- anchor
- field-oneroster-classes-grades
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
course_sourced_id
- csvName
- courseSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the course of which this class is an instance.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.courses.sourced_id in the same tenant; many classes or course resources may reference one course.
- ddl
- course_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, course_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- course-algebra-1
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv.
- anchor
- field-oneroster-classes-course-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
class_code
- csvName
- classCode
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Human readable code used to help identify this class.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 80 printable characters. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 80 printable characters.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- class_code text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- ALG1-A
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv.
- anchor
- field-oneroster-classes-class-code
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
class_type
- csvName
- classType
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Class scheduling category. scheduled is an ordinary instructional section; homeroom is a homeroom grouping that may not carry the same course schedule semantics.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: homeroom, scheduled.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- class_type text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- scheduled
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv.
- anchor
- field-oneroster-classes-class-type
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "homeroom",
"meaning": "A class organized as homeroom rather than a scheduled instructional section.",
"useWhen": "Use when the source system class is a homeroom.",
"invalidWhen": "Invalid for ordinary scheduled courses.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for classes.class_type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "scheduled",
"meaning": "A class with a scheduled instructional meeting pattern.",
"useWhen": "Use for ordinary course sections or scheduled classes.",
"invalidWhen": "Invalid when the class is only homeroom.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for classes.class_type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]location
- csvName
- location
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Human readable description of where the class is physically located.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 160 visible characters. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 160 visible characters.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- location text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- Room 214
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv.
- anchor
- field-oneroster-classes-location
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
school_sourced_id
- csvName
- schoolSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the Org that teaches this class of OrgType 'school'.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.orgs.sourced_id in the same tenant; many classes, enrollments, or line items may reference one school org.
- ddl
- school_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, school_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- org-north-valley-high
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv.
- anchor
- field-oneroster-classes-school-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
term_sourced_ids
- csvName
- termSourcedIds
- type
- text
- csvFormat
- List of GUID References
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedIds of the terms (the academicSessions) in which the class is taught.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 2048 characters for the full CSV cell; each academicSession sourcedId token should be 1 to 255 visible characters. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 2048 characters for the full CSV cell; each academicSession sourcedId token should be 1 to 255 visible characters.
- relationship
- Required comma-separated references to one or more academic_sessions.sourced_id values in the same tenant.
- ddl
- term_sourced_ids text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Do not index the raw CSV cell for joins; build a documented helper view or expression index after RFC4180 token validation if a query path needs it.
- cascadePolicy
- No SQL cascade on the raw list cell; validate each same-tenant token during import and expose normalized helper views only when documented.
- multiValueExample
- Stored cell: "session-fall-2026,session-spring-2027"; parse with RFC4180-aware logic before joining to academic_sessions.
- example
- "session-fall-2026,session-spring-2027"
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- This required list is stored as raw CSV text. Use the documented regexp_split_to_table pattern or a validation view before joining to academic_sessions; quoted commas must be parsed according to RFC4180, not by naive string splitting.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv.
- anchor
- field-oneroster-classes-term-sourced-ids
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
subjects
- csvName
- subjects
- type
- text
- csvFormat
- List of Strings
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Subject name(s) in human readable form. If the 'subjectCodes' attribute is present then the subjects and subjectCodes lists must have the same length and have order significance. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. If the value of the "Course Title" contains commas, then those commas must be removed.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 1024 characters for the full CSV cell; each subject token should be 1 to 255 visible characters. CSV list values must follow RFC4180 quoting rules when they contain commas.
- range
- 0 to 1024 characters for the full CSV cell; each subject token should be 1 to 255 visible characters.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- subjects text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- Do not index the raw CSV cell for joins; build a documented helper view or expression index after RFC4180 token validation if a query path needs it.
- cascadePolicy
- multiValueExample
- Stored cell example: Mathematics,Algebra I; parse as an RFC4180 list before validation, search, or joins.
- example
- Mathematics,Algebra I
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- subjects and subjectCodes are ordered sibling lists when both are present. Preserve the raw RFC4180 cell, validate equal token counts before pairing, and strip commas from a course-title-derived subject only when the source profile requires it.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv.
- anchor
- field-oneroster-classes-subjects
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
subject_codes
- csvName
- subjectCodes
- type
- text
- csvFormat
- List of Strings
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Subject codes(s) in machine readable form. If more than one subject code is needed, use double quotes, and separate with commas (per [RFC4180]). If the 'subjects' attribute is present the two lists must have the same length and have order significance. The permitted vocabulary should be agreed as part of the definition of the usage of this specification.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 1024 characters for the full CSV cell; each subject-code token should be 1 to 64 printable characters. CSV list values must follow RFC4180 quoting rules when they contain commas.
- range
- 0 to 1024 characters for the full CSV cell; each subject-code token should be 1 to 64 printable characters.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- subject_codes text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- Do not index the raw CSV cell for joins; build a documented helper view or expression index after RFC4180 token validation if a query path needs it.
- cascadePolicy
- multiValueExample
- Stored cell example: MATH,ALG1; parse as an RFC4180 list before validation, search, or joins.
- example
- MATH,ALG1
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- subjects and subjectCodes are ordered sibling lists when both are present. Preserve the raw RFC4180 cell, validate equal token counts before pairing, and strip commas from a course-title-derived subject only when the source profile requires it.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv.
- anchor
- field-oneroster-classes-subject-codes
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
periods
- csvName
- periods
- type
- text
- csvFormat
- List of Strings
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The time slots in the day that the class will be given. If more than one period is needed, use double quotes, and separate with commas (per [RFC4180]). Examples: 1; "1,3,5"
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 512 characters for the full CSV cell; each period token should be 1 to 32 printable characters. CSV list values must follow RFC4180 quoting rules when they contain commas.
- range
- 0 to 512 characters for the full CSV cell; each period token should be 1 to 32 printable characters.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- periods text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- Do not index the raw CSV cell for joins; build a documented helper view or expression index after RFC4180 token validation if a query path needs it.
- cascadePolicy
- multiValueExample
- Stored cell example: "1,3,5"; parse as an RFC4180 list before validation, search, or joins.
- example
- "1,3,5"
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- Periods are one CSV cell that may contain quoted comma-separated values such as "1,3,5". Keep the raw text and parse only in read helpers.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv.
- anchor
- field-oneroster-classes-periods
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
oneroster.class_resources · Class Resources
- fileName
- classResources.csv
- schemaName
- ClassResources
- sourceCaption
- The classResources.csv file format and contents.
- purpose
- Use this table to determine which resource is available for a class instance.
- lifecycle
- Loaded after classes.csv and resources.csv are valid for the same tenant.
- sourceClass
- 1EdTech pass-through with generated platform projection fields
- sourceBasis
- CSV fields, names, requiredness, formats, and values come from classResources.csv in OneRoster CSV Binding 1.2.1. tenant_id and import_batch_id are platform3 gap fills.
- primaryKey
- (tenant_id, sourced_id)
- anchor
- table-oneroster-class-resources
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-002-surface-boundary",
"title": "OITD-002 The 1EdTech surface is broad OneRoster",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-002-surface-boundary"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]relationships
[ "Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.", "Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.", "References one oneroster.classes.sourced_id in the same tenant; many dependent rows may reference one class.", "References one oneroster.resources.sourced_id in the same tenant; many join rows may reference one resource." ]
constraints
[ "Rows are tenant-scoped by tenant_id.", "Rows are evidence-scoped by import_batch_id.", "OneRoster source columns preserve exact CSV field names through csvName and snake_case SQL column names.", "metadata.* extension headers are allowed by OITD-009 when they use the metadata namespace.", "Allowed values preserve exact 1EdTech spelling, punctuation, and spaces.", "Tenant-scoped foreign keys use NO ACTION/RESTRICT by default; OneRoster lifecycle changes are represented through imports/status rather than ON DELETE CASCADE." ]
indexes
[ "primary key (tenant_id, sourced_id)", "index (tenant_id, import_batch_id)", "index (tenant_id, sourced_id)", "index (tenant_id, class_sourced_id)", "index (tenant_id, resource_sourced_id)", "index (tenant_id, status)", "index (tenant_id, date_last_modified)" ]
invalidExamples
[ "A row whose tenant_id differs from the JWT tenant_id claim.", "A generated row missing import_batch_id evidence.", "A required source field is blank in the mode where OneRoster requires it.", "An enum value differs by capitalization, spacing, or punctuation.", "A GUID Reference points to a row outside the tenant or absent from required files." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"import_batch_id": "orbatch_20260522_001",
"sourced_id": "class_resources-001",
"status": "active",
"date_last_modified": "2026-05-22T13:45:30.000Z",
"title": "Class Resources sample",
"class_sourced_id": "class-algebra-1-a",
"resource_sourced_id": "resource-001"
}queries
[ "select * from oneroster.class_resources where tenant_id = $1 limit 20;", "select * from oneroster.class_resources where tenant_id = $1 and sourced_id = $2;" ]
Fields (8)
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-class-resources-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
import_batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Import/export evidence row that produced this generated OneRoster projection row.
- constraints
- Must pair with tenant_id to reference oneroster.import_batch(tenant_id, batch_id) and should be stable for all rows created by the same validated package.
- range
- Text domain pinned by this field's constraints.
- relationship
- Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.
- ddl
- import_batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, import_batch_id) on generated OneRoster tables.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Missing, points to a batch owned by another tenant, or does not match the package that supplied this row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 makes import/export batch evidence first-class.
- anchor
- field-oneroster-class-resources-import-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
}
]allowedValues
[]
sourced_id
- csvName
- sourcedId
- type
- text
- csvFormat
- GUID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- Natural key within tenant and table
- meaning
- Tenant-scoped OneRoster identifier for this class resources row.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object. Enforce uniqueness within tenant and table.
- range
- 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object.
- relationship
- Tenant-scoped OneRoster identifier for this class_resources row. Other tables may reference it according to the CSV dependency matrix.
- ddl
- sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Part of primary key (tenant_id, sourced_id); this is the target column for same-tenant references into oneroster.class_resources.
- cascadePolicy
- multiValueExample
- example
- class_resources-001
- invalidWhen
- Blank, duplicated within the same tenant and table, or changed between imports for the same logical object.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for classResources.csv.
- anchor
- field-oneroster-class-resources-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
status
- csvName
- status
- type
- text
- csvFormat
- Enumeration
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Must be one of the documented allowed values, preserving exact spelling and spaces. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- Allowed values: active, tobedeleted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- status text; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, status) on high-volume tables that expose active/tobedeleted filtering; pair with date_last_modified for delta replay.
- cascadePolicy
- multiValueExample
- example
- active
- invalidWhen
- Provided in a bulk file, missing in a delta file, or outside active/tobedeleted.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for classResources.csv.
- anchor
- field-oneroster-class-resources-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for class_resources.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for class_resources.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]date_last_modified
- csvName
- dateLastModified
- type
- timestamptz
- csvFormat
- DateTime
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Use ISO 8601 UTC resolution YYYY-MM-DDTHH:MM:SS.sssZ. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- ISO 8601 UTC timestamp at millisecond resolution.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- date_last_modified timestamptz; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, date_last_modified) when serving modifiedSince or delta-audit reads.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:45:30.000Z
- invalidWhen
- Provided in a bulk file, missing in a delta file, not ISO 8601 UTC, or earlier than a previous delta for the same sourcedId.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for classResources.csv.
- anchor
- field-oneroster-class-resources-date-last-modified
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
title
- csvName
- title
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Name of the related class.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 1 to 255 visible characters when required; 0 to 255 when optional. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 1 to 255 visible characters when required; 0 to 255 when optional.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- title text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- Class Resources sample
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for classResources.csv.
- anchor
- field-oneroster-class-resources-title
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
class_sourced_id
- csvName
- classSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the reference Class.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.classes.sourced_id in the same tenant; many dependent rows may reference one class.
- ddl
- class_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, class_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- class-algebra-1-a
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for classResources.csv.
- anchor
- field-oneroster-class-resources-class-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
resource_sourced_id
- csvName
- resourceSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the Resource associated with the Class.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.resources.sourced_id in the same tenant; many join rows may reference one resource.
- ddl
- resource_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, resource_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- resource-001
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for classResources.csv.
- anchor
- field-oneroster-class-resources-resource-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
oneroster.course_resources · Course Resources
- fileName
- courseResources.csv
- schemaName
- CourseResources
- sourceCaption
- The 'courseResources.csv' file format and contents.
- purpose
- Use this table to determine which resource belongs at course-catalog level rather than class-instance level.
- lifecycle
- Loaded after courses.csv and resources.csv are valid for the same tenant.
- sourceClass
- 1EdTech pass-through with generated platform projection fields
- sourceBasis
- CSV fields, names, requiredness, formats, and values come from courseResources.csv in OneRoster CSV Binding 1.2.1. tenant_id and import_batch_id are platform3 gap fills.
- primaryKey
- (tenant_id, sourced_id)
- anchor
- table-oneroster-course-resources
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-002-surface-boundary",
"title": "OITD-002 The 1EdTech surface is broad OneRoster",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-002-surface-boundary"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]relationships
[ "Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.", "Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.", "References one oneroster.courses.sourced_id in the same tenant; many classes or course resources may reference one course.", "References one oneroster.resources.sourced_id in the same tenant; many join rows may reference one resource." ]
constraints
[ "Rows are tenant-scoped by tenant_id.", "Rows are evidence-scoped by import_batch_id.", "OneRoster source columns preserve exact CSV field names through csvName and snake_case SQL column names.", "metadata.* extension headers are allowed by OITD-009 when they use the metadata namespace.", "Allowed values preserve exact 1EdTech spelling, punctuation, and spaces.", "Tenant-scoped foreign keys use NO ACTION/RESTRICT by default; OneRoster lifecycle changes are represented through imports/status rather than ON DELETE CASCADE." ]
indexes
[ "primary key (tenant_id, sourced_id)", "index (tenant_id, import_batch_id)", "index (tenant_id, sourced_id)", "index (tenant_id, course_sourced_id)", "index (tenant_id, resource_sourced_id)", "index (tenant_id, status)", "index (tenant_id, date_last_modified)" ]
invalidExamples
[ "A row whose tenant_id differs from the JWT tenant_id claim.", "A generated row missing import_batch_id evidence.", "A required source field is blank in the mode where OneRoster requires it.", "An enum value differs by capitalization, spacing, or punctuation.", "A GUID Reference points to a row outside the tenant or absent from required files." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"import_batch_id": "orbatch_20260522_001",
"sourced_id": "course_resources-001",
"status": "active",
"date_last_modified": "2026-05-22T13:45:30.000Z",
"title": "Course Resources sample",
"course_sourced_id": "course-algebra-1",
"resource_sourced_id": "resource-001"
}queries
[ "select * from oneroster.course_resources where tenant_id = $1 limit 20;", "select * from oneroster.course_resources where tenant_id = $1 and sourced_id = $2;" ]
Fields (8)
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-course-resources-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
import_batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Import/export evidence row that produced this generated OneRoster projection row.
- constraints
- Must pair with tenant_id to reference oneroster.import_batch(tenant_id, batch_id) and should be stable for all rows created by the same validated package.
- range
- Text domain pinned by this field's constraints.
- relationship
- Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.
- ddl
- import_batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, import_batch_id) on generated OneRoster tables.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Missing, points to a batch owned by another tenant, or does not match the package that supplied this row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 makes import/export batch evidence first-class.
- anchor
- field-oneroster-course-resources-import-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
}
]allowedValues
[]
sourced_id
- csvName
- sourcedId
- type
- text
- csvFormat
- GUID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- Natural key within tenant and table
- meaning
- Tenant-scoped OneRoster identifier for this course resources row.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object. Enforce uniqueness within tenant and table.
- range
- 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object.
- relationship
- Tenant-scoped OneRoster identifier for this course_resources row. Other tables may reference it according to the CSV dependency matrix.
- ddl
- sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Part of primary key (tenant_id, sourced_id); this is the target column for same-tenant references into oneroster.course_resources.
- cascadePolicy
- multiValueExample
- example
- course_resources-001
- invalidWhen
- Blank, duplicated within the same tenant and table, or changed between imports for the same logical object.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for courseResources.csv.
- anchor
- field-oneroster-course-resources-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
status
- csvName
- status
- type
- text
- csvFormat
- Enumeration
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Must be one of the documented allowed values, preserving exact spelling and spaces. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- Allowed values: active, tobedeleted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- status text; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, status) on high-volume tables that expose active/tobedeleted filtering; pair with date_last_modified for delta replay.
- cascadePolicy
- multiValueExample
- example
- active
- invalidWhen
- Provided in a bulk file, missing in a delta file, or outside active/tobedeleted.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for courseResources.csv.
- anchor
- field-oneroster-course-resources-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for course_resources.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for course_resources.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]date_last_modified
- csvName
- dateLastModified
- type
- timestamptz
- csvFormat
- DateTime
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Use ISO 8601 UTC resolution YYYY-MM-DDTHH:MM:SS.sssZ. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- ISO 8601 UTC timestamp at millisecond resolution.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- date_last_modified timestamptz; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, date_last_modified) when serving modifiedSince or delta-audit reads.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:45:30.000Z
- invalidWhen
- Provided in a bulk file, missing in a delta file, not ISO 8601 UTC, or earlier than a previous delta for the same sourcedId.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for courseResources.csv.
- anchor
- field-oneroster-course-resources-date-last-modified
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
title
- csvName
- title
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Name of the related class.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 1 to 255 visible characters when required; 0 to 255 when optional. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 1 to 255 visible characters when required; 0 to 255 when optional.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- title text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- Course Resources sample
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for courseResources.csv.
- anchor
- field-oneroster-course-resources-title
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
course_sourced_id
- csvName
- courseSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the reference Course.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.courses.sourced_id in the same tenant; many classes or course resources may reference one course.
- ddl
- course_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, course_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- course-algebra-1
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for courseResources.csv.
- anchor
- field-oneroster-course-resources-course-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
resource_sourced_id
- csvName
- resourceSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the Resource associated with the Course.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.resources.sourced_id in the same tenant; many join rows may reference one resource.
- ddl
- resource_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, resource_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- resource-001
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for courseResources.csv.
- anchor
- field-oneroster-course-resources-resource-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
oneroster.courses · Courses
- fileName
- courses.csv
- schemaName
- Courses
- sourceCaption
- The courses.csv file format and contents.
- purpose
- Use this table to keep course names, codes, grades, subjects, owning organization, and school-year context together.
- lifecycle
- Loaded from courses.csv after orgs and any referenced school-year academicSession are available.
- sourceClass
- 1EdTech pass-through with generated platform projection fields
- sourceBasis
- CSV fields, names, requiredness, formats, and values come from courses.csv in OneRoster CSV Binding 1.2.1. tenant_id and import_batch_id are platform3 gap fills.
- primaryKey
- (tenant_id, sourced_id)
- anchor
- table-oneroster-courses
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-002-surface-boundary",
"title": "OITD-002 The 1EdTech surface is broad OneRoster",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-002-surface-boundary"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]relationships
[ "Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.", "Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.", "Optionally references one oneroster.academic_sessions.sourced_id in the same tenant; many courses may reference one school-year academicSession.", "References one oneroster.orgs.sourced_id in the same tenant; many courses or roles may reference one org." ]
constraints
[ "Rows are tenant-scoped by tenant_id.", "Rows are evidence-scoped by import_batch_id.", "OneRoster source columns preserve exact CSV field names through csvName and snake_case SQL column names.", "metadata.* extension headers are allowed by OITD-009 when they use the metadata namespace.", "Allowed values preserve exact 1EdTech spelling, punctuation, and spaces.", "Tenant-scoped foreign keys use NO ACTION/RESTRICT by default; OneRoster lifecycle changes are represented through imports/status rather than ON DELETE CASCADE." ]
indexes
[ "primary key (tenant_id, sourced_id)", "index (tenant_id, import_batch_id)", "index (tenant_id, sourced_id)", "index (tenant_id, school_year_sourced_id)", "index (tenant_id, org_sourced_id)", "index (tenant_id, status)", "index (tenant_id, date_last_modified)" ]
invalidExamples
[ "A row whose tenant_id differs from the JWT tenant_id claim.", "A generated row missing import_batch_id evidence.", "A required source field is blank in the mode where OneRoster requires it.", "An enum value differs by capitalization, spacing, or punctuation.", "A GUID Reference points to a row outside the tenant or absent from required files." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"import_batch_id": "orbatch_20260522_001",
"sourced_id": "courses-001",
"status": "active",
"date_last_modified": "2026-05-22T13:45:30.000Z",
"school_year_sourced_id": "session-school-year-2027",
"title": "Courses sample",
"course_code": "ALG1",
"grades": "09",
"org_sourced_id": "org-north-valley-high",
"subjects": "Mathematics,Algebra I",
"subject_codes": "MATH,ALG1"
}queries
[ "select * from oneroster.courses where tenant_id = $1 limit 20;", "select * from oneroster.courses where tenant_id = $1 and sourced_id = $2;" ]
Fields (12)
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-courses-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
import_batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Import/export evidence row that produced this generated OneRoster projection row.
- constraints
- Must pair with tenant_id to reference oneroster.import_batch(tenant_id, batch_id) and should be stable for all rows created by the same validated package.
- range
- Text domain pinned by this field's constraints.
- relationship
- Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.
- ddl
- import_batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, import_batch_id) on generated OneRoster tables.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Missing, points to a batch owned by another tenant, or does not match the package that supplied this row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 makes import/export batch evidence first-class.
- anchor
- field-oneroster-courses-import-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
}
]allowedValues
[]
sourced_id
- csvName
- sourcedId
- type
- text
- csvFormat
- GUID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- Natural key within tenant and table
- meaning
- Tenant-scoped OneRoster identifier for this courses row.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object. Enforce uniqueness within tenant and table.
- range
- 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object.
- relationship
- Tenant-scoped OneRoster identifier for this courses row. Other tables may reference it according to the CSV dependency matrix.
- ddl
- sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Part of primary key (tenant_id, sourced_id); this is the target column for same-tenant references into oneroster.courses.
- cascadePolicy
- multiValueExample
- example
- courses-001
- invalidWhen
- Blank, duplicated within the same tenant and table, or changed between imports for the same logical object.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for courses.csv.
- anchor
- field-oneroster-courses-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
status
- csvName
- status
- type
- text
- csvFormat
- Enumeration
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Must be one of the documented allowed values, preserving exact spelling and spaces. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- Allowed values: active, tobedeleted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- status text; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, status) on high-volume tables that expose active/tobedeleted filtering; pair with date_last_modified for delta replay.
- cascadePolicy
- multiValueExample
- example
- active
- invalidWhen
- Provided in a bulk file, missing in a delta file, or outside active/tobedeleted.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for courses.csv.
- anchor
- field-oneroster-courses-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for courses.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for courses.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]date_last_modified
- csvName
- dateLastModified
- type
- timestamptz
- csvFormat
- DateTime
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Use ISO 8601 UTC resolution YYYY-MM-DDTHH:MM:SS.sssZ. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- ISO 8601 UTC timestamp at millisecond resolution.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- date_last_modified timestamptz; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, date_last_modified) when serving modifiedSince or delta-audit reads.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:45:30.000Z
- invalidWhen
- Provided in a bulk file, missing in a delta file, not ISO 8601 UTC, or earlier than a previous delta for the same sourcedId.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for courses.csv.
- anchor
- field-oneroster-courses-date-last-modified
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
school_year_sourced_id
- csvName
- schoolYearSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the associated AcademicSession with type of 'schoolYear'.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- Optionally references one oneroster.academic_sessions.sourced_id in the same tenant; many courses may reference one school-year academicSession.
- ddl
- school_year_sourced_id text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- Use index (tenant_id, school_year_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- session-school-year-2027
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for courses.csv.
- anchor
- field-oneroster-courses-school-year-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
title
- csvName
- title
- type
- text
- csvFormat
- String
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Name of this course.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 visible characters when required; 0 to 255 when optional. Use a NOT NULL plus btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 1 to 255 visible characters when required; 0 to 255 when optional.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- title text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- Courses sample
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for courses.csv.
- anchor
- field-oneroster-courses-title
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
course_code
- csvName
- courseCode
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Human readable code used to help identify this course.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 80 printable characters. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 80 printable characters.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- course_code text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- ALG1
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for courses.csv.
- anchor
- field-oneroster-courses-course-code
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
grades
- csvName
- grades
- type
- text
- csvFormat
- List of Strings
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Grade(s) for which the class is attended. The permitted vocabulary should be agreed as part of the definition of the usage of this specification.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 512 characters for the full CSV cell; each grade token should be a CEDS-compatible grade-level code such as 09, 10, PK, or KG. CSV list values must follow RFC4180 quoting rules when they contain commas.
- range
- 0 to 512 characters for the full CSV cell; each grade token should be a CEDS-compatible grade-level code such as 09, 10, PK, or KG.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- grades text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- Do not index the raw CSV cell for joins; build a documented helper view or expression index after RFC4180 token validation if a query path needs it.
- cascadePolicy
- multiValueExample
- Stored cell example: 09; parse as an RFC4180 list before validation, search, or joins.
- example
- 09
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- OneRoster leaves grade vocabulary to the profile; platform3 treats each token as a CEDS-compatible grade-level code where possible. The raw CSV cell is stored unchanged, and local Alpha restrictions must be documented separately.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for courses.csv.
- anchor
- field-oneroster-courses-grades
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
org_sourced_id
- csvName
- orgSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of an org to which this course belongs.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.orgs.sourced_id in the same tenant; many courses or roles may reference one org.
- ddl
- org_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, org_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- org-north-valley-high
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for courses.csv.
- anchor
- field-oneroster-courses-org-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
subjects
- csvName
- subjects
- type
- text
- csvFormat
- List of Strings
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Subject name(s) in human readable form. If the 'subjectCodes' attribute is present then the subjects and subjectCodes lists must have the same length and have order significance. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. If the value of the "Course Title" contains commas, then those commas must be removed.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 1024 characters for the full CSV cell; each subject token should be 1 to 255 visible characters. CSV list values must follow RFC4180 quoting rules when they contain commas.
- range
- 0 to 1024 characters for the full CSV cell; each subject token should be 1 to 255 visible characters.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- subjects text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- Do not index the raw CSV cell for joins; build a documented helper view or expression index after RFC4180 token validation if a query path needs it.
- cascadePolicy
- multiValueExample
- Stored cell example: Mathematics,Algebra I; parse as an RFC4180 list before validation, search, or joins.
- example
- Mathematics,Algebra I
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- subjects and subjectCodes are ordered sibling lists when both are present. Preserve the raw RFC4180 cell, validate equal token counts before pairing, and strip commas from a course-title-derived subject only when the source profile requires it.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for courses.csv.
- anchor
- field-oneroster-courses-subjects
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
subject_codes
- csvName
- subjectCodes
- type
- text
- csvFormat
- List of Strings
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Subject codes(s) in machine readable form. If more than one subject code is needed, use double quotes, and separate with commas (per [RFC4180]). If the 'subjects' attribute is present the two lists must have the same length and have order significance. The permitted vocabulary should be agreed as part of the definition of the usage of this specification.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 1024 characters for the full CSV cell; each subject-code token should be 1 to 64 printable characters. CSV list values must follow RFC4180 quoting rules when they contain commas.
- range
- 0 to 1024 characters for the full CSV cell; each subject-code token should be 1 to 64 printable characters.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- subject_codes text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- Do not index the raw CSV cell for joins; build a documented helper view or expression index after RFC4180 token validation if a query path needs it.
- cascadePolicy
- multiValueExample
- Stored cell example: MATH,ALG1; parse as an RFC4180 list before validation, search, or joins.
- example
- MATH,ALG1
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- subjects and subjectCodes are ordered sibling lists when both are present. Preserve the raw RFC4180 cell, validate equal token counts before pairing, and strip commas from a course-title-derived subject only when the source profile requires it.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for courses.csv.
- anchor
- field-oneroster-courses-subject-codes
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
oneroster.demographics · Demographics
- fileName
- demographics.csv
- schemaName
- Demographics
- sourceCaption
- The 'demographics.csv' file format and contents.
- purpose
- Use this table only for OneRoster-defined demographic exchange. It contains high-risk student/person data and must not be copied to logs, Problems, or public evidence.
- lifecycle
- Loaded after users.csv because demographics.sourcedId must identify the user being described.
- sourceClass
- 1EdTech pass-through with generated platform projection fields
- sourceBasis
- CSV fields, names, requiredness, formats, and values come from demographics.csv in OneRoster CSV Binding 1.2.1. tenant_id and import_batch_id are platform3 gap fills.
- primaryKey
- (tenant_id, sourced_id)
- anchor
- table-oneroster-demographics
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-002-surface-boundary",
"title": "OITD-002 The 1EdTech surface is broad OneRoster",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-002-surface-boundary"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]relationships
[ "Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.", "Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.", "Also references exactly one users.sourced_id in the same tenant; demographics is a one-to-one extension of a user row." ]
constraints
[ "Rows are tenant-scoped by tenant_id.", "Rows are evidence-scoped by import_batch_id.", "OneRoster source columns preserve exact CSV field names through csvName and snake_case SQL column names.", "metadata.* extension headers are allowed by OITD-009 when they use the metadata namespace.", "Allowed values preserve exact 1EdTech spelling, punctuation, and spaces.", "Tenant-scoped foreign keys use NO ACTION/RESTRICT by default; OneRoster lifecycle changes are represented through imports/status rather than ON DELETE CASCADE." ]
indexes
[ "primary key (tenant_id, sourced_id)", "index (tenant_id, import_batch_id)", "index (tenant_id, sourced_id)", "index (tenant_id, status)", "index (tenant_id, date_last_modified)" ]
invalidExamples
[ "A row whose tenant_id differs from the JWT tenant_id claim.", "A generated row missing import_batch_id evidence.", "A required source field is blank in the mode where OneRoster requires it.", "An enum value differs by capitalization, spacing, or punctuation.", "A GUID Reference points to a row outside the tenant or absent from required files." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"import_batch_id": "orbatch_20260522_001",
"sourced_id": "demographics-001",
"status": "active",
"date_last_modified": "2026-05-22T13:45:30.000Z",
"birth_date": "2026-08-15",
"sex": "unspecified",
"american_indian_or_alaska_native": "true",
"asian": "true",
"black_or_african_american": "true",
"native_hawaiian_or_other_pacific_islander": "true",
"white": "true",
"demographic_race_two_or_more_races": "true",
"hispanic_or_latino_ethnicity": "true",
"country_of_birth_code": "US",
"state_of_birth_abbreviation": "CA",
"city_of_birth": "San Diego",
"public_school_residence_status": "resident"
}queries
[ "select * from oneroster.demographics where tenant_id = $1 limit 20;", "select * from oneroster.demographics where tenant_id = $1 and sourced_id = $2;" ]
Fields (18)
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-demographics-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
import_batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Import/export evidence row that produced this generated OneRoster projection row.
- constraints
- Must pair with tenant_id to reference oneroster.import_batch(tenant_id, batch_id) and should be stable for all rows created by the same validated package.
- range
- Text domain pinned by this field's constraints.
- relationship
- Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.
- ddl
- import_batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, import_batch_id) on generated OneRoster tables.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Missing, points to a batch owned by another tenant, or does not match the package that supplied this row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 makes import/export batch evidence first-class.
- anchor
- field-oneroster-demographics-import-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
}
]allowedValues
[]
sourced_id
- csvName
- sourcedId
- type
- text
- csvFormat
- GUID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- Identifier
- privacyTag
- PII: Identifier
- key
- Natural key within tenant and table
- meaning
- The user's sourcedId; in demographics.csv this is the same identifier as the user whose demographics are being described.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object. Enforce uniqueness within tenant and table.
- range
- 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object.
- relationship
- Also references exactly one users.sourced_id in the same tenant; demographics is a one-to-one extension of a user row.
- ddl
- sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Part of primary key (tenant_id, sourced_id); this is the target column for same-tenant references into oneroster.demographics.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- demographics-001
- invalidWhen
- Blank, duplicated within the same tenant and table, or changed between imports for the same logical object.
- edgeCases
- Production demographics.sourced_id values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv.
- anchor
- field-oneroster-demographics-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
status
- csvName
- status
- type
- text
- csvFormat
- Enumeration
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Must be one of the documented allowed values, preserving exact spelling and spaces. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- Allowed values: active, tobedeleted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- status text; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, status) on high-volume tables that expose active/tobedeleted filtering; pair with date_last_modified for delta replay.
- cascadePolicy
- multiValueExample
- example
- active
- invalidWhen
- Provided in a bulk file, missing in a delta file, or outside active/tobedeleted.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv.
- anchor
- field-oneroster-demographics-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]date_last_modified
- csvName
- dateLastModified
- type
- timestamptz
- csvFormat
- DateTime
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Use ISO 8601 UTC resolution YYYY-MM-DDTHH:MM:SS.sssZ. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- ISO 8601 UTC timestamp at millisecond resolution.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- date_last_modified timestamptz; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, date_last_modified) when serving modifiedSince or delta-audit reads.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:45:30.000Z
- invalidWhen
- Provided in a bulk file, missing in a delta file, not ISO 8601 UTC, or earlier than a previous delta for the same sourcedId.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv.
- anchor
- field-oneroster-demographics-date-last-modified
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
birth_date
- csvName
- birthDate
- type
- date
- csvFormat
- Date
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- The date of birth. ISO 861 format: 'YYYY-MM-DD'.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Use ISO 8601 calendar date YYYY-MM-DD.
- range
- ISO 8601 date.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- birth_date date. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- 2026-08-15
- invalidWhen
- Missing when required, malformed for its OneRoster format/domain, or attached to the wrong tenant/user row.
- edgeCases
- Production demographics.birth_date values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv.
- anchor
- field-oneroster-demographics-birth-date
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
sex
- csvName
- sex
- type
- text
- csvFormat
- Enumeration
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- Sex value reported by the source system for the user described by demographics.sourced_id. It is a sensitive demographic exchange field; unspecified preserves a deliberate source value rather than guessing, and other preserves a source value outside male/female/unspecified.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: male, female, unspecified, other.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- sex text. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- unspecified
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- Production demographics.sex values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv.
- anchor
- field-oneroster-demographics-sex
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[
{
"value": "male",
"meaning": "Demographic sex value supplied by the source system.",
"useWhen": "Use only when the source system lawfully provides this value.",
"invalidWhen": "Invalid if copied to logs or used outside OneRoster demographic exchange.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.sex.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "female",
"meaning": "Demographic sex value supplied by the source system.",
"useWhen": "Use only when the source system lawfully provides this value.",
"invalidWhen": "Invalid if copied to logs or used outside OneRoster demographic exchange.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.sex.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "unspecified",
"meaning": "The source system did not specify a male/female/other value.",
"useWhen": "Use when the demographic value is intentionally unspecified.",
"invalidWhen": "Invalid if used to guess or erase a known source value.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.sex.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "other",
"meaning": "The source system supplied a demographic sex value outside male/female/unspecified.",
"useWhen": "Use only when that is the source-system value.",
"invalidWhen": "Invalid if used as a catch-all for missing data.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.sex.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]american_indian_or_alaska_native
- csvName
- americanIndianOrAlaskaNative
- type
- text
- csvFormat
- Enumeration
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- Race category flag reported by the source system for the user described by demographics.sourced_id. This is one of several race indicators that may be true at the same time; it is demographic exchange data, not authorization or placement logic.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: true, false.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- american_indian_or_alaska_native text. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- true
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- Production demographics.american_indian_or_alaska_native values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv.
- anchor
- field-oneroster-demographics-american-indian-or-alaska-native
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[
{
"value": "true",
"meaning": "The source reports american indian or alaska native for this user; race flags are not mutually exclusive and ethnicity is independent of race.",
"useWhen": "Use when the source system sends an affirmative demographic value. Multiple race flags may be true simultaneously, and two-or-more-races should follow the source's multi-race indicator.",
"invalidWhen": "Invalid if inferred from name, language, school, or another demographic field rather than supplied by the source.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.american_indian_or_alaska_native.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source explicitly does not report american indian or alaska native for this user; blank/unknown should not be collapsed into false unless the source profile says so.",
"useWhen": "Use when the source sends an explicit negative value for this category.",
"invalidWhen": "Invalid if it overwrites an affirmative source value or is used as proof that the category is unknown.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.american_indian_or_alaska_native.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]asian
- csvName
- asian
- type
- text
- csvFormat
- Enumeration
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- Race category flag reported by the source system for the user described by demographics.sourced_id. It can be true alongside other race indicators, and consumers must treat it as sensitive demographic data.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: true, false.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- asian text. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- true
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- Production demographics.asian values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv.
- anchor
- field-oneroster-demographics-asian
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[
{
"value": "true",
"meaning": "The source reports asian for this user; race flags are not mutually exclusive and ethnicity is independent of race.",
"useWhen": "Use when the source system sends an affirmative demographic value. Multiple race flags may be true simultaneously, and two-or-more-races should follow the source's multi-race indicator.",
"invalidWhen": "Invalid if inferred from name, language, school, or another demographic field rather than supplied by the source.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.asian.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source explicitly does not report asian for this user; blank/unknown should not be collapsed into false unless the source profile says so.",
"useWhen": "Use when the source sends an explicit negative value for this category.",
"invalidWhen": "Invalid if it overwrites an affirmative source value or is used as proof that the category is unknown.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.asian.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]black_or_african_american
- csvName
- blackOrAfricanAmerican
- type
- text
- csvFormat
- Enumeration
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- Race category flag reported by the source system for the user described by demographics.sourced_id. It is independent of the other race flags and may coexist with demographic_race_two_or_more_races.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: true, false.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- black_or_african_american text. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- true
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- Production demographics.black_or_african_american values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv.
- anchor
- field-oneroster-demographics-black-or-african-american
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[
{
"value": "true",
"meaning": "The source reports black or african american for this user; race flags are not mutually exclusive and ethnicity is independent of race.",
"useWhen": "Use when the source system sends an affirmative demographic value. Multiple race flags may be true simultaneously, and two-or-more-races should follow the source's multi-race indicator.",
"invalidWhen": "Invalid if inferred from name, language, school, or another demographic field rather than supplied by the source.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.black_or_african_american.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source explicitly does not report black or african american for this user; blank/unknown should not be collapsed into false unless the source profile says so.",
"useWhen": "Use when the source sends an explicit negative value for this category.",
"invalidWhen": "Invalid if it overwrites an affirmative source value or is used as proof that the category is unknown.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.black_or_african_american.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]native_hawaiian_or_other_pacific_islander
- csvName
- nativeHawaiianOrOtherPacificIslander
- type
- text
- csvFormat
- Enumeration
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- Race category flag reported by the source system for the user described by demographics.sourced_id. It may be true alongside other race flags and must not be collapsed into a single display label without a local policy.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: true, false.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- native_hawaiian_or_other_pacific_islander text. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- true
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- Production demographics.native_hawaiian_or_other_pacific_islander values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv.
- anchor
- field-oneroster-demographics-native-hawaiian-or-other-pacific-islander
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[
{
"value": "true",
"meaning": "The source reports native hawaiian or other pacific islander for this user; race flags are not mutually exclusive and ethnicity is independent of race.",
"useWhen": "Use when the source system sends an affirmative demographic value. Multiple race flags may be true simultaneously, and two-or-more-races should follow the source's multi-race indicator.",
"invalidWhen": "Invalid if inferred from name, language, school, or another demographic field rather than supplied by the source.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.native_hawaiian_or_other_pacific_islander.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source explicitly does not report native hawaiian or other pacific islander for this user; blank/unknown should not be collapsed into false unless the source profile says so.",
"useWhen": "Use when the source sends an explicit negative value for this category.",
"invalidWhen": "Invalid if it overwrites an affirmative source value or is used as proof that the category is unknown.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.native_hawaiian_or_other_pacific_islander.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]white
- csvName
- white
- type
- text
- csvFormat
- Enumeration
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- Race category flag reported by the source system for the user described by demographics.sourced_id. It is preserved exactly because downstream compliance reports often inspect each race category separately.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: true, false.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- white text. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- true
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- Production demographics.white values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv.
- anchor
- field-oneroster-demographics-white
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[
{
"value": "true",
"meaning": "The source reports white for this user; race flags are not mutually exclusive and ethnicity is independent of race.",
"useWhen": "Use when the source system sends an affirmative demographic value. Multiple race flags may be true simultaneously, and two-or-more-races should follow the source's multi-race indicator.",
"invalidWhen": "Invalid if inferred from name, language, school, or another demographic field rather than supplied by the source.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.white.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source explicitly does not report white for this user; blank/unknown should not be collapsed into false unless the source profile says so.",
"useWhen": "Use when the source sends an explicit negative value for this category.",
"invalidWhen": "Invalid if it overwrites an affirmative source value or is used as proof that the category is unknown.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.white.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]demographic_race_two_or_more_races
- csvName
- demographicRaceTwoOrMoreRaces
- type
- text
- csvFormat
- Enumeration
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- OneRoster's explicit indicator that the source reports the user in two or more race categories. It should be true when the source asserts multi-race status; it does not erase the individual race flags.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: true, false.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- demographic_race_two_or_more_races text. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- true
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- Production demographics.demographic_race_two_or_more_races values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv.
- anchor
- field-oneroster-demographics-demographic-race-two-or-more-races
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[
{
"value": "true",
"meaning": "The source reports demographic race two or more races for this user; race flags are not mutually exclusive and ethnicity is independent of race.",
"useWhen": "Use when the source system sends an affirmative demographic value. Multiple race flags may be true simultaneously, and two-or-more-races should follow the source's multi-race indicator.",
"invalidWhen": "Invalid if inferred from name, language, school, or another demographic field rather than supplied by the source.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.demographic_race_two_or_more_races.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source explicitly does not report demographic race two or more races for this user; blank/unknown should not be collapsed into false unless the source profile says so.",
"useWhen": "Use when the source sends an explicit negative value for this category.",
"invalidWhen": "Invalid if it overwrites an affirmative source value or is used as proof that the category is unknown.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.demographic_race_two_or_more_races.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]hispanic_or_latino_ethnicity
- csvName
- hispanicOrLatinoEthnicity
- type
- text
- csvFormat
- Enumeration
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- Ethnicity indicator reported by the source system for the user described by demographics.sourced_id. It is independent of race flags, may be true with any race combination, and is high-risk PII.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: true, false.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- hispanic_or_latino_ethnicity text. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- true
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- Production demographics.hispanic_or_latino_ethnicity values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv.
- anchor
- field-oneroster-demographics-hispanic-or-latino-ethnicity
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[
{
"value": "true",
"meaning": "The source reports hispanic or latino ethnicity for this user; race flags are not mutually exclusive and ethnicity is independent of race.",
"useWhen": "Use when the source system sends an affirmative demographic value. Multiple race flags may be true simultaneously, and two-or-more-races should follow the source's multi-race indicator.",
"invalidWhen": "Invalid if inferred from name, language, school, or another demographic field rather than supplied by the source.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.hispanic_or_latino_ethnicity.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source explicitly does not report hispanic or latino ethnicity for this user; blank/unknown should not be collapsed into false unless the source profile says so.",
"useWhen": "Use when the source sends an explicit negative value for this category.",
"invalidWhen": "Invalid if it overwrites an affirmative source value or is used as proof that the category is unknown.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.hispanic_or_latino_ethnicity.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]country_of_birth_code
- csvName
- countryOfBirthCode
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- Country where the user was born. The permitted vocabulary should be agreed as part of the definition of the usage of this specification.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 64 characters; prefer ISO 3166-1 alpha-2 values such as US when the source profile uses country codes. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 64 characters; prefer ISO 3166-1 alpha-2 values such as US when the source profile uses country codes.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- country_of_birth_code text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- US
- invalidWhen
- Missing when required, malformed for its OneRoster format/domain, or attached to the wrong tenant/user row.
- edgeCases
- Production demographics.country_of_birth_code values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv.
- anchor
- field-oneroster-demographics-country-of-birth-code
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
state_of_birth_abbreviation
- csvName
- stateOfBirthAbbreviation
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- State where the user was born. The permitted vocabulary should be agreed as part of the definition of the usage of this specification.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 64 characters; for US state values use the two-letter uppercase postal abbreviation such as CA. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 64 characters; for US state values use the two-letter uppercase postal abbreviation such as CA.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- state_of_birth_abbreviation text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- CA
- invalidWhen
- Missing when required, malformed for its OneRoster format/domain, or attached to the wrong tenant/user row.
- edgeCases
- Production demographics.state_of_birth_abbreviation values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv.
- anchor
- field-oneroster-demographics-state-of-birth-abbreviation
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
city_of_birth
- csvName
- cityOfBirth
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- City where the user was born.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 200 visible characters. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 200 visible characters.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- city_of_birth text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- San Diego
- invalidWhen
- Missing when required, malformed for its OneRoster format/domain, or attached to the wrong tenant/user row.
- edgeCases
- Production demographics.city_of_birth values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv.
- anchor
- field-oneroster-demographics-city-of-birth
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
public_school_residence_status
- csvName
- publicSchoolResidenceStatus
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- An indication of the location of the users legal residence relative to (within or outside) the boundaries of the public school attended and its administrative unit. The permitted vocabulary should be agreed as part of the definition of the usage of this specification.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 255 visible characters from the local/CEDS residence-status vocabulary. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 255 visible characters from the local/CEDS residence-status vocabulary.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- public_school_residence_status text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- resident
- invalidWhen
- Missing when required, malformed for its OneRoster format/domain, or attached to the wrong tenant/user row.
- edgeCases
- Production demographics.public_school_residence_status values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv.
- anchor
- field-oneroster-demographics-public-school-residence-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
oneroster.enrollments · Enrollments
- fileName
- enrollments.csv
- schemaName
- Enrollments
- sourceCaption
- The enrollments.csv file format and contents.
- purpose
- Use this table to answer who is enrolled in a class, in what role, and during what date window.
- lifecycle
- Loaded after users, classes, and orgs dependencies are valid for the same tenant.
- sourceClass
- 1EdTech pass-through with generated platform projection fields
- sourceBasis
- CSV fields, names, requiredness, formats, and values come from enrollments.csv in OneRoster CSV Binding 1.2.1. tenant_id and import_batch_id are platform3 gap fills.
- primaryKey
- (tenant_id, sourced_id)
- anchor
- table-oneroster-enrollments
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-002-surface-boundary",
"title": "OITD-002 The 1EdTech surface is broad OneRoster",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-002-surface-boundary"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]relationships
[ "Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.", "Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.", "References one oneroster.classes.sourced_id in the same tenant; many dependent rows may reference one class.", "References one oneroster.orgs.sourced_id in the same tenant; many classes, enrollments, or line items may reference one school org.", "References one oneroster.users.sourced_id in the same tenant; many enrollments, roles, profiles, or resource rows may reference one user." ]
constraints
[ "Rows are tenant-scoped by tenant_id.", "Rows are evidence-scoped by import_batch_id.", "OneRoster source columns preserve exact CSV field names through csvName and snake_case SQL column names.", "metadata.* extension headers are allowed by OITD-009 when they use the metadata namespace.", "Allowed values preserve exact 1EdTech spelling, punctuation, and spaces.", "Tenant-scoped foreign keys use NO ACTION/RESTRICT by default; OneRoster lifecycle changes are represented through imports/status rather than ON DELETE CASCADE." ]
indexes
[ "primary key (tenant_id, sourced_id)", "index (tenant_id, import_batch_id)", "index (tenant_id, sourced_id)", "index (tenant_id, class_sourced_id)", "index (tenant_id, school_sourced_id)", "index (tenant_id, user_sourced_id)", "index (tenant_id, status)", "index (tenant_id, date_last_modified)", "index (tenant_id, user_sourced_id, status, begin_date, end_date)" ]
invalidExamples
[ "A row whose tenant_id differs from the JWT tenant_id claim.", "A generated row missing import_batch_id evidence.", "A required source field is blank in the mode where OneRoster requires it.", "An enum value differs by capitalization, spacing, or punctuation.", "A GUID Reference points to a row outside the tenant or absent from required files." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"import_batch_id": "orbatch_20260522_001",
"sourced_id": "enrollments-001",
"status": "active",
"date_last_modified": "2026-05-22T13:45:30.000Z",
"class_sourced_id": "class-algebra-1-a",
"school_sourced_id": "org-north-valley-high",
"user_sourced_id": "user-alex-001",
"role": "student",
"primary": "false",
"begin_date": "2026-08-15",
"end_date": "2027-06-01"
}queries
[ "select * from oneroster.enrollments where tenant_id = $1 limit 20;", "select * from oneroster.enrollments where tenant_id = $1 and sourced_id = $2;", "select\n e.sourced_id as enrollment_sourced_id,\n e.role,\n e.begin_date,\n e.end_date,\n u.sourced_id as user_sourced_id,\n u.username,\n u.given_name,\n u.family_name,\n o.sourced_id as school_sourced_id,\n o.name as school_name,\n c.sourced_id as class_sourced_id,\n c.title as class_title,\n crs.sourced_id as course_sourced_id,\n crs.title as course_title,\n s.sourced_id as academic_session_sourced_id,\n s.title as academic_session_title,\n s.type as academic_session_type\nfrom oneroster.enrollments e\njoin oneroster.users u\n on u.tenant_id = e.tenant_id\n and u.sourced_id = e.user_sourced_id\njoin oneroster.orgs o\n on o.tenant_id = e.tenant_id\n and o.sourced_id = e.school_sourced_id\n and o.type = 'school'\njoin oneroster.classes c\n on c.tenant_id = e.tenant_id\n and c.sourced_id = e.class_sourced_id\njoin oneroster.courses crs\n on crs.tenant_id = e.tenant_id\n and crs.sourced_id = c.course_sourced_id\njoin lateral regexp_split_to_table(c.term_sourced_ids, '[[:space:]]*,[[:space:]]*') as term(term_sourced_id)\n on term.term_sourced_id <> ''\njoin oneroster.academic_sessions s\n on s.tenant_id = e.tenant_id\n and s.sourced_id = term.term_sourced_id\nwhere e.tenant_id = $1\n and e.user_sourced_id = $2\n and coalesce(e.status, 'active') = 'active'\n and coalesce(u.status, 'active') = 'active'\n and coalesce(o.status, 'active') = 'active'\n and coalesce(c.status, 'active') = 'active'\n and coalesce(crs.status, 'active') = 'active'\n and coalesce(s.status, 'active') = 'active'\n and (e.begin_date is null or e.begin_date <= current_date)\n and (e.end_date is null or e.end_date > current_date)\norder by c.title, s.start_date;" ]
Fields (12)
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-enrollments-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
import_batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Import/export evidence row that produced this generated OneRoster projection row.
- constraints
- Must pair with tenant_id to reference oneroster.import_batch(tenant_id, batch_id) and should be stable for all rows created by the same validated package.
- range
- Text domain pinned by this field's constraints.
- relationship
- Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.
- ddl
- import_batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, import_batch_id) on generated OneRoster tables.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Missing, points to a batch owned by another tenant, or does not match the package that supplied this row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 makes import/export batch evidence first-class.
- anchor
- field-oneroster-enrollments-import-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
}
]allowedValues
[]
sourced_id
- csvName
- sourcedId
- type
- text
- csvFormat
- GUID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- Natural key within tenant and table
- meaning
- Tenant-scoped OneRoster identifier for this enrollments row.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object. Enforce uniqueness within tenant and table.
- range
- 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object.
- relationship
- Tenant-scoped OneRoster identifier for this enrollments row. Other tables may reference it according to the CSV dependency matrix.
- ddl
- sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Part of primary key (tenant_id, sourced_id); this is the target column for same-tenant references into oneroster.enrollments.
- cascadePolicy
- multiValueExample
- example
- enrollments-001
- invalidWhen
- Blank, duplicated within the same tenant and table, or changed between imports for the same logical object.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for enrollments.csv.
- anchor
- field-oneroster-enrollments-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
status
- csvName
- status
- type
- text
- csvFormat
- Enumeration
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Must be one of the documented allowed values, preserving exact spelling and spaces. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- Allowed values: active, tobedeleted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- status text; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, status) on high-volume tables that expose active/tobedeleted filtering; pair with date_last_modified for delta replay.
- cascadePolicy
- multiValueExample
- example
- active
- invalidWhen
- Provided in a bulk file, missing in a delta file, or outside active/tobedeleted.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for enrollments.csv.
- anchor
- field-oneroster-enrollments-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for enrollments.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for enrollments.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]date_last_modified
- csvName
- dateLastModified
- type
- timestamptz
- csvFormat
- DateTime
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Use ISO 8601 UTC resolution YYYY-MM-DDTHH:MM:SS.sssZ. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- ISO 8601 UTC timestamp at millisecond resolution.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- date_last_modified timestamptz; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, date_last_modified) when serving modifiedSince or delta-audit reads.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:45:30.000Z
- invalidWhen
- Provided in a bulk file, missing in a delta file, not ISO 8601 UTC, or earlier than a previous delta for the same sourcedId.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for enrollments.csv.
- anchor
- field-oneroster-enrollments-date-last-modified
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
class_sourced_id
- csvName
- classSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the Class.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.classes.sourced_id in the same tenant; many dependent rows may reference one class.
- ddl
- class_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, class_sourced_id) for active-enrollment joins and dependency checks.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- class-algebra-1-a
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for enrollments.csv.
- anchor
- field-oneroster-enrollments-class-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
school_sourced_id
- csvName
- schoolSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of an Org with type 'school'.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.orgs.sourced_id in the same tenant; many classes, enrollments, or line items may reference one school org.
- ddl
- school_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, school_sourced_id) for active-enrollment joins and dependency checks.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- org-north-valley-high
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for enrollments.csv.
- anchor
- field-oneroster-enrollments-school-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
user_sourced_id
- csvName
- userSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- Identifier
- privacyTag
- PII: Identifier
- key
- meaning
- SourcedId of the User.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.users.sourced_id in the same tenant; many enrollments, roles, profiles, or resource rows may reference one user.
- ddl
- user_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, user_sourced_id, status, begin_date, end_date) for the documented active-enrollment query.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- user-alex-001
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- Production enrollments.user_sourced_id values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for enrollments.csv.
- anchor
- field-oneroster-enrollments-user-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
role
- csvName
- role
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- The user's class-level membership role for this enrollment. It drives whether the row represents a learner, teacher, proctor, or administrator in active-enrollment queries and must match the user/class relationship the source system is asserting.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: administrator, proctor, student, teacher.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- role text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- student
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- Production enrollments.role values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for enrollments.csv.
- anchor
- field-oneroster-enrollments-role
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[
{
"value": "administrator",
"meaning": "The user participates in the class enrollment context as an administrator.",
"useWhen": "Use for administrative access to the class, not for teaching or learner participation.",
"invalidWhen": "Invalid when the row should appear as a student or teacher in active instructional rosters.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for enrollments.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "proctor",
"meaning": "The user is enrolled as a proctor for assessment or supervised activity.",
"useWhen": "Use when the source explicitly separates proctoring from teaching.",
"invalidWhen": "Invalid as a substitute for teacher unless the source sends teacher.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for enrollments.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "student",
"meaning": "The user is a learner in the class.",
"useWhen": "Use for active learner rosters and student-result workflows.",
"invalidWhen": "Invalid for staff/guardian users or teacher rows.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for enrollments.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "teacher",
"meaning": "The user is an instructor for the class.",
"useWhen": "Use for teacher rosters and for primary=true teacher selection.",
"invalidWhen": "Invalid for learner participation or parent/guardian access.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for enrollments.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]primary
- csvName
- primary
- type
- text
- csvFormat
- Enumeration
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Teacher-primary marker for a class enrollment. It applies only when enrollments.role is teacher; true identifies the primary teacher for the class/date window, while student, proctor, and administrator enrollments should leave it blank or false.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: true, false.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- primary text. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- false
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- primary=true is meaningful only for teacher enrollments. Reject or flag primary=true on student, administrator, or proctor rows, and prevent two primary teachers for the same class/date window when the local profile requires uniqueness.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for enrollments.csv.
- anchor
- field-oneroster-enrollments-primary
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "true",
"meaning": "This teacher enrollment is the primary teacher for the class/date window.",
"useWhen": "Use only when role=teacher and the source designates this enrollment as the class's primary teacher.",
"invalidWhen": "Invalid for student/proctor/administrator rows or when another active teacher enrollment is already primary for the same class/date window under the local profile.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for enrollments.primary.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "This enrollment is not the primary teacher relationship.",
"useWhen": "Use for non-primary teacher rows and for non-teacher roles when the source sends the optional field.",
"invalidWhen": "Invalid if used to hide a required primary-teacher designation.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for enrollments.primary.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]begin_date
- csvName
- beginDate
- type
- date
- csvFormat
- Date
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The start date for the enrollment (inclusive). This date must align with the associated academic session (term) identified in the class.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Use ISO 8601 calendar date YYYY-MM-DD.
- range
- ISO 8601 date.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- begin_date date. Nullability: nullable.
- indexPolicy
- No standalone index required; include begin_date in a composite index only for date-window queries such as active enrollments.
- cascadePolicy
- multiValueExample
- example
- 2026-08-15
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for enrollments.csv.
- anchor
- field-oneroster-enrollments-begin-date
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
end_date
- csvName
- endDate
- type
- date
- csvFormat
- Date
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The end date for the enrollment (exclusive). This date must align with the associated academic session (term) identified for the class.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Use ISO 8601 calendar date YYYY-MM-DD.
- range
- ISO 8601 date.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- end_date date. Nullability: nullable.
- indexPolicy
- No standalone index required; include end_date in a composite index only for date-window queries such as active enrollments.
- cascadePolicy
- multiValueExample
- example
- 2027-06-01
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for enrollments.csv.
- anchor
- field-oneroster-enrollments-end-date
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
oneroster.line_item_learning_objective_ids · Line Item Learning Objective IDs
- fileName
- lineItemLearningObjectiveIds.csv
- schemaName
- LineItemLearningObjectiveIds
- sourceCaption
- The 'lineItemLearningObjectiveIds.csv' file format and contents.
- purpose
- Use this table to align assignments to standards or CASE identifiers without changing OneRoster field names.
- lifecycle
- Loaded after lineItems.csv and validated according to source=case or source=unknown.
- sourceClass
- 1EdTech pass-through with generated platform projection fields
- sourceBasis
- CSV fields, names, requiredness, formats, and values come from lineItemLearningObjectiveIds.csv in OneRoster CSV Binding 1.2.1. tenant_id and import_batch_id are platform3 gap fills.
- primaryKey
- (tenant_id, sourced_id)
- anchor
- table-oneroster-line-item-learning-objective-ids
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-002-surface-boundary",
"title": "OITD-002 The 1EdTech surface is broad OneRoster",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-002-surface-boundary"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]relationships
[ "Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.", "Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.", "References one oneroster.line_items.sourced_id in the same tenant; many objective or score-scale rows may reference one line item." ]
constraints
[ "Rows are tenant-scoped by tenant_id.", "Rows are evidence-scoped by import_batch_id.", "OneRoster source columns preserve exact CSV field names through csvName and snake_case SQL column names.", "metadata.* extension headers are allowed by OITD-009 when they use the metadata namespace.", "Allowed values preserve exact 1EdTech spelling, punctuation, and spaces.", "Tenant-scoped foreign keys use NO ACTION/RESTRICT by default; OneRoster lifecycle changes are represented through imports/status rather than ON DELETE CASCADE." ]
indexes
[ "primary key (tenant_id, sourced_id)", "index (tenant_id, import_batch_id)", "index (tenant_id, sourced_id)", "index (tenant_id, line_item_sourced_id)", "index (tenant_id, status)", "index (tenant_id, date_last_modified)" ]
invalidExamples
[ "A row whose tenant_id differs from the JWT tenant_id claim.", "A generated row missing import_batch_id evidence.", "A required source field is blank in the mode where OneRoster requires it.", "An enum value differs by capitalization, spacing, or punctuation.", "A GUID Reference points to a row outside the tenant or absent from required files." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"import_batch_id": "orbatch_20260522_001",
"sourced_id": "line_item_learning_objective_ids-001",
"status": "active",
"date_last_modified": "2026-05-22T13:45:30.000Z",
"line_item_sourced_id": "lineitem-unit-1-quiz",
"source": "case",
"learning_objective_id": "urn:uuid:3bfe62a2-0f9d-4fd0-9d2f-d2f826cb3368"
}queries
[ "select * from oneroster.line_item_learning_objective_ids where tenant_id = $1 limit 20;", "select * from oneroster.line_item_learning_objective_ids where tenant_id = $1 and sourced_id = $2;" ]
Fields (8)
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-line-item-learning-objective-ids-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
import_batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Import/export evidence row that produced this generated OneRoster projection row.
- constraints
- Must pair with tenant_id to reference oneroster.import_batch(tenant_id, batch_id) and should be stable for all rows created by the same validated package.
- range
- Text domain pinned by this field's constraints.
- relationship
- Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.
- ddl
- import_batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, import_batch_id) on generated OneRoster tables.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Missing, points to a batch owned by another tenant, or does not match the package that supplied this row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 makes import/export batch evidence first-class.
- anchor
- field-oneroster-line-item-learning-objective-ids-import-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
}
]allowedValues
[]
sourced_id
- csvName
- sourcedId
- type
- text
- csvFormat
- GUID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- Natural key within tenant and table
- meaning
- Tenant-scoped OneRoster identifier for this line item learning objective ids row.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object. Enforce uniqueness within tenant and table.
- range
- 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object.
- relationship
- Tenant-scoped OneRoster identifier for this line_item_learning_objective_ids row. Other tables may reference it according to the CSV dependency matrix.
- ddl
- sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Part of primary key (tenant_id, sourced_id); this is the target column for same-tenant references into oneroster.line_item_learning_objective_ids.
- cascadePolicy
- multiValueExample
- example
- line_item_learning_objective_ids-001
- invalidWhen
- Blank, duplicated within the same tenant and table, or changed between imports for the same logical object.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItemLearningObjectiveIds.csv.
- anchor
- field-oneroster-line-item-learning-objective-ids-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
status
- csvName
- status
- type
- text
- csvFormat
- Enumeration
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Must be one of the documented allowed values, preserving exact spelling and spaces. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- Allowed values: active, tobedeleted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- status text; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, status) on high-volume tables that expose active/tobedeleted filtering; pair with date_last_modified for delta replay.
- cascadePolicy
- multiValueExample
- example
- active
- invalidWhen
- Provided in a bulk file, missing in a delta file, or outside active/tobedeleted.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItemLearningObjectiveIds.csv.
- anchor
- field-oneroster-line-item-learning-objective-ids-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for line_item_learning_objective_ids.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for line_item_learning_objective_ids.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]date_last_modified
- csvName
- dateLastModified
- type
- timestamptz
- csvFormat
- DateTime
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Use ISO 8601 UTC resolution YYYY-MM-DDTHH:MM:SS.sssZ. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- ISO 8601 UTC timestamp at millisecond resolution.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- date_last_modified timestamptz; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, date_last_modified) when serving modifiedSince or delta-audit reads.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:45:30.000Z
- invalidWhen
- Provided in a bulk file, missing in a delta file, not ISO 8601 UTC, or earlier than a previous delta for the same sourcedId.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItemLearningObjectiveIds.csv.
- anchor
- field-oneroster-line-item-learning-objective-ids-date-last-modified
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
line_item_sourced_id
- csvName
- lineItemSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the parent LineItem for this learning objective.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.line_items.sourced_id in the same tenant; many objective or score-scale rows may reference one line item.
- ddl
- line_item_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, line_item_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- lineitem-unit-1-quiz
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItemLearningObjectiveIds.csv.
- anchor
- field-oneroster-line-item-learning-objective-ids-line-item-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
source
- csvName
- source
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Vocabulary source for the learning objective identifier attached to a line item. case means the identifier should validate as an IMS CASE identifier; unknown preserves a sender value whose source cannot be asserted.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: case, unknown.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- source text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- case
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItemLearningObjectiveIds.csv.
- anchor
- field-oneroster-line-item-learning-objective-ids-source
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "case",
"meaning": "The learning objective identifier is an IMS CASE identifier.",
"useWhen": "Use when learningObjectiveId is a CASE UUID URN or CASE-aligned identifier.",
"invalidWhen": "Invalid when the identifier is local or unknown.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for line_item_learning_objective_ids.source.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "unknown",
"meaning": "The learning objective identifier source is unknown to the sender.",
"useWhen": "Use when the source cannot identify CASE or another controlled system.",
"invalidWhen": "Invalid when the source is known and should be labeled.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for line_item_learning_objective_ids.source.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]learning_objective_id
- csvName
- learningObjectiveId
- type
- text
- csvFormat
- String
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Unique identifier for the associated learning objective. If an 1EdTech CASE identifier then it MUST be a valid UUID URN.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 visible characters; when source is case, use a CASE UUID URN or UUID-shaped CASE identifier. Use a NOT NULL plus btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 1 to 255 visible characters; when source is case, use a CASE UUID URN or UUID-shaped CASE identifier.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- learning_objective_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- urn:uuid:3bfe62a2-0f9d-4fd0-9d2f-d2f826cb3368
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItemLearningObjectiveIds.csv.
- anchor
- field-oneroster-line-item-learning-objective-ids-learning-objective-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
oneroster.line_items · Line Items
- fileName
- lineItems.csv
- schemaName
- LineItems
- sourceCaption
- The 'lineItems.csv' file format and contents.
- purpose
- Use this table to define assigned work, due dates, score ranges, class/category/session context, and school ownership.
- lifecycle
- Loaded after classes, categories, academicSessions, and orgs dependencies are available.
- sourceClass
- 1EdTech pass-through with generated platform projection fields
- sourceBasis
- CSV fields, names, requiredness, formats, and values come from lineItems.csv in OneRoster CSV Binding 1.2.1. tenant_id and import_batch_id are platform3 gap fills.
- primaryKey
- (tenant_id, sourced_id)
- anchor
- table-oneroster-line-items
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-002-surface-boundary",
"title": "OITD-002 The 1EdTech surface is broad OneRoster",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-002-surface-boundary"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]relationships
[ "Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.", "Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.", "References one oneroster.classes.sourced_id in the same tenant; many dependent rows may reference one class.", "References one oneroster.categories.sourced_id in the same tenant; many line items may reference one category.", "References one oneroster.academic_sessions.sourced_id in the same tenant; many line items may reference one academic session.", "References one oneroster.orgs.sourced_id in the same tenant; many classes, enrollments, or line items may reference one school org." ]
constraints
[ "Rows are tenant-scoped by tenant_id.", "Rows are evidence-scoped by import_batch_id.", "OneRoster source columns preserve exact CSV field names through csvName and snake_case SQL column names.", "metadata.* extension headers are allowed by OITD-009 when they use the metadata namespace.", "Allowed values preserve exact 1EdTech spelling, punctuation, and spaces.", "Tenant-scoped foreign keys use NO ACTION/RESTRICT by default; OneRoster lifecycle changes are represented through imports/status rather than ON DELETE CASCADE." ]
indexes
[ "primary key (tenant_id, sourced_id)", "index (tenant_id, import_batch_id)", "index (tenant_id, sourced_id)", "index (tenant_id, class_sourced_id)", "index (tenant_id, category_sourced_id)", "index (tenant_id, academic_session_sourced_id)", "index (tenant_id, school_sourced_id)", "index (tenant_id, status)", "index (tenant_id, date_last_modified)" ]
invalidExamples
[ "A row whose tenant_id differs from the JWT tenant_id claim.", "A generated row missing import_batch_id evidence.", "A required source field is blank in the mode where OneRoster requires it.", "An enum value differs by capitalization, spacing, or punctuation.", "A GUID Reference points to a row outside the tenant or absent from required files." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"import_batch_id": "orbatch_20260522_001",
"sourced_id": "line_items-001",
"status": "active",
"date_last_modified": "2026-05-22T13:45:30.000Z",
"title": "Line Items sample",
"description": "Unit 1 algebra readiness quiz.",
"assign_date": "2026-08-15",
"due_date": "2027-06-01",
"class_sourced_id": "class-algebra-1-a",
"category_sourced_id": "category-quiz",
"academic_session_sourced_id": "session-fall-2026",
"result_value_min": "0",
"result_value_max": "100",
"school_sourced_id": "org-north-valley-high"
}queries
[ "select * from oneroster.line_items where tenant_id = $1 limit 20;", "select * from oneroster.line_items where tenant_id = $1 and sourced_id = $2;" ]
Fields (15)
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-line-items-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
import_batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Import/export evidence row that produced this generated OneRoster projection row.
- constraints
- Must pair with tenant_id to reference oneroster.import_batch(tenant_id, batch_id) and should be stable for all rows created by the same validated package.
- range
- Text domain pinned by this field's constraints.
- relationship
- Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.
- ddl
- import_batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, import_batch_id) on generated OneRoster tables.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Missing, points to a batch owned by another tenant, or does not match the package that supplied this row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 makes import/export batch evidence first-class.
- anchor
- field-oneroster-line-items-import-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
}
]allowedValues
[]
sourced_id
- csvName
- sourcedId
- type
- text
- csvFormat
- GUID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- Natural key within tenant and table
- meaning
- Tenant-scoped OneRoster identifier for this line items row.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object. Enforce uniqueness within tenant and table.
- range
- 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object.
- relationship
- Tenant-scoped OneRoster identifier for this line_items row. Other tables may reference it according to the CSV dependency matrix.
- ddl
- sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Part of primary key (tenant_id, sourced_id); this is the target column for same-tenant references into oneroster.line_items.
- cascadePolicy
- multiValueExample
- example
- line_items-001
- invalidWhen
- Blank, duplicated within the same tenant and table, or changed between imports for the same logical object.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv.
- anchor
- field-oneroster-line-items-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
status
- csvName
- status
- type
- text
- csvFormat
- Enumeration
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Must be one of the documented allowed values, preserving exact spelling and spaces. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- Allowed values: active, tobedeleted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- status text; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, status) on high-volume tables that expose active/tobedeleted filtering; pair with date_last_modified for delta replay.
- cascadePolicy
- multiValueExample
- example
- active
- invalidWhen
- Provided in a bulk file, missing in a delta file, or outside active/tobedeleted.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv.
- anchor
- field-oneroster-line-items-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for line_items.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for line_items.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]date_last_modified
- csvName
- dateLastModified
- type
- timestamptz
- csvFormat
- DateTime
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Use ISO 8601 UTC resolution YYYY-MM-DDTHH:MM:SS.sssZ. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- ISO 8601 UTC timestamp at millisecond resolution.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- date_last_modified timestamptz; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, date_last_modified) when serving modifiedSince or delta-audit reads.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:45:30.000Z
- invalidWhen
- Provided in a bulk file, missing in a delta file, not ISO 8601 UTC, or earlier than a previous delta for the same sourcedId.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv.
- anchor
- field-oneroster-line-items-date-last-modified
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
title
- csvName
- title
- type
- text
- csvFormat
- String
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The title assigned to the lineItem.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 visible characters when required; 0 to 255 when optional. Use a NOT NULL plus btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 1 to 255 visible characters when required; 0 to 255 when optional.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- title text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- Line Items sample
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv.
- anchor
- field-oneroster-line-items-title
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
description
- csvName
- description
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Short description of the role of the lineItem.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 1000 visible characters; must not include credentials or security secrets. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 1000 visible characters; must not include credentials or security secrets.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- description text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- Unit 1 algebra readiness quiz.
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv.
- anchor
- field-oneroster-line-items-description
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
assign_date
- csvName
- assignDate
- type
- date
- csvFormat
- Date
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Date the associated activity was assigned.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Use ISO 8601 calendar date YYYY-MM-DD.
- range
- ISO 8601 date.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- assign_date date not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- 2026-08-15
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv.
- anchor
- field-oneroster-line-items-assign-date
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
due_date
- csvName
- dueDate
- type
- date
- csvFormat
- Date
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Date the associated activity is due to be completed.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Use ISO 8601 calendar date YYYY-MM-DD.
- range
- ISO 8601 date.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- due_date date not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- 2027-06-01
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv.
- anchor
- field-oneroster-line-items-due-date
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
class_sourced_id
- csvName
- classSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the Class.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.classes.sourced_id in the same tenant; many dependent rows may reference one class.
- ddl
- class_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, class_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- class-algebra-1-a
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv.
- anchor
- field-oneroster-line-items-class-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
category_sourced_id
- csvName
- categorySourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the Category.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.categories.sourced_id in the same tenant; many line items may reference one category.
- ddl
- category_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, category_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- category-quiz
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv.
- anchor
- field-oneroster-line-items-category-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
academic_session_sourced_id
- csvName
- academicSessionSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the academicSession to which the lineItem is based.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.academic_sessions.sourced_id in the same tenant; many line items may reference one academic session.
- ddl
- academic_session_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, academic_session_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- session-fall-2026
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv.
- anchor
- field-oneroster-line-items-academic-session-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
result_value_min
- csvName
- resultValueMin
- type
- double precision
- csvFormat
- Float
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The minimum value permitted for the score (inclusive) e.g. 0.0.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Use a numeric value parseable as a decimal floating point number.
- range
- Any decimal score value accepted by the source profile; lineItems.resultValueMin/resultValueMax constrain result scores.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- result_value_min double precision. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- 0
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv.
- anchor
- field-oneroster-line-items-result-value-min
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
result_value_max
- csvName
- resultValueMax
- type
- double precision
- csvFormat
- Float
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The maximum value permitted for the score (inclusive) e.g. 100.0.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Use a numeric value parseable as a decimal floating point number.
- range
- Any decimal score value accepted by the source profile; lineItems.resultValueMin/resultValueMax constrain result scores.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- result_value_max double precision. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- 100
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv.
- anchor
- field-oneroster-line-items-result-value-max
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
school_sourced_id
- csvName
- schoolSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the School. This is a new column added in version 1.2.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.orgs.sourced_id in the same tenant; many classes, enrollments, or line items may reference one school org.
- ddl
- school_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, school_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- org-north-valley-high
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv.
- anchor
- field-oneroster-line-items-school-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
oneroster.line_item_score_scales · Line Item Score Scales
- fileName
- lineItemScoreScales.csv
- schemaName
- LineItemScoreScales
- sourceCaption
- The 'lineItemScoreScales.csv' file format and contents.
- purpose
- Use this table to determine the scale that should interpret scores for a line item.
- lifecycle
- Loaded after lineItems.csv and scoreScales.csv are valid for the same tenant.
- sourceClass
- 1EdTech pass-through with generated platform projection fields
- sourceBasis
- CSV fields, names, requiredness, formats, and values come from lineItemScoreScales.csv in OneRoster CSV Binding 1.2.1. tenant_id and import_batch_id are platform3 gap fills.
- primaryKey
- (tenant_id, sourced_id)
- anchor
- table-oneroster-line-item-score-scales
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-002-surface-boundary",
"title": "OITD-002 The 1EdTech surface is broad OneRoster",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-002-surface-boundary"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]relationships
[ "Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.", "Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.", "References one oneroster.line_items.sourced_id in the same tenant; many objective or score-scale rows may reference one line item.", "References one oneroster.score_scales.sourced_id in the same tenant; many join rows may reference one score scale." ]
constraints
[ "Rows are tenant-scoped by tenant_id.", "Rows are evidence-scoped by import_batch_id.", "OneRoster source columns preserve exact CSV field names through csvName and snake_case SQL column names.", "metadata.* extension headers are allowed by OITD-009 when they use the metadata namespace.", "Allowed values preserve exact 1EdTech spelling, punctuation, and spaces.", "Tenant-scoped foreign keys use NO ACTION/RESTRICT by default; OneRoster lifecycle changes are represented through imports/status rather than ON DELETE CASCADE." ]
indexes
[ "primary key (tenant_id, sourced_id)", "index (tenant_id, import_batch_id)", "index (tenant_id, sourced_id)", "index (tenant_id, line_item_sourced_id)", "index (tenant_id, score_scale_sourced_id)", "index (tenant_id, status)", "index (tenant_id, date_last_modified)" ]
invalidExamples
[ "A row whose tenant_id differs from the JWT tenant_id claim.", "A generated row missing import_batch_id evidence.", "A required source field is blank in the mode where OneRoster requires it.", "An enum value differs by capitalization, spacing, or punctuation.", "A GUID Reference points to a row outside the tenant or absent from required files." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"import_batch_id": "orbatch_20260522_001",
"sourced_id": "line_item_score_scales-001",
"status": "active",
"date_last_modified": "2026-05-22T13:45:30.000Z",
"title": "Line Item Score Scales sample",
"line_item_sourced_id": "lineitem-unit-1-quiz",
"score_scale_sourced_id": "scorescale-letter"
}queries
[ "select * from oneroster.line_item_score_scales where tenant_id = $1 limit 20;", "select * from oneroster.line_item_score_scales where tenant_id = $1 and sourced_id = $2;" ]
Fields (8)
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-line-item-score-scales-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
import_batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Import/export evidence row that produced this generated OneRoster projection row.
- constraints
- Must pair with tenant_id to reference oneroster.import_batch(tenant_id, batch_id) and should be stable for all rows created by the same validated package.
- range
- Text domain pinned by this field's constraints.
- relationship
- Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.
- ddl
- import_batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, import_batch_id) on generated OneRoster tables.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Missing, points to a batch owned by another tenant, or does not match the package that supplied this row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 makes import/export batch evidence first-class.
- anchor
- field-oneroster-line-item-score-scales-import-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
}
]allowedValues
[]
sourced_id
- csvName
- sourcedId
- type
- text
- csvFormat
- GUID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- Natural key within tenant and table
- meaning
- Tenant-scoped OneRoster identifier for this line item score scales row.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object. Enforce uniqueness within tenant and table.
- range
- 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object.
- relationship
- Tenant-scoped OneRoster identifier for this line_item_score_scales row. Other tables may reference it according to the CSV dependency matrix.
- ddl
- sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Part of primary key (tenant_id, sourced_id); this is the target column for same-tenant references into oneroster.line_item_score_scales.
- cascadePolicy
- multiValueExample
- example
- line_item_score_scales-001
- invalidWhen
- Blank, duplicated within the same tenant and table, or changed between imports for the same logical object.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItemScoreScales.csv.
- anchor
- field-oneroster-line-item-score-scales-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[]
status
- csvName
- status
- type
- text
- csvFormat
- Enumeration
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Must be one of the documented allowed values, preserving exact spelling and spaces. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- Allowed values: active, tobedeleted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- status text; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, status) on high-volume tables that expose active/tobedeleted filtering; pair with date_last_modified for delta replay.
- cascadePolicy
- multiValueExample
- example
- active
- invalidWhen
- Provided in a bulk file, missing in a delta file, or outside active/tobedeleted.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItemScoreScales.csv.
- anchor
- field-oneroster-line-item-score-scales-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for line_item_score_scales.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for line_item_score_scales.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]date_last_modified
- csvName
- dateLastModified
- type
- timestamptz
- csvFormat
- DateTime
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Use ISO 8601 UTC resolution YYYY-MM-DDTHH:MM:SS.sssZ. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- ISO 8601 UTC timestamp at millisecond resolution.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- date_last_modified timestamptz; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, date_last_modified) when serving modifiedSince or delta-audit reads.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:45:30.000Z
- invalidWhen
- Provided in a bulk file, missing in a delta file, not ISO 8601 UTC, or earlier than a previous delta for the same sourcedId.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItemScoreScales.csv.
- anchor
- field-oneroster-line-item-score-scales-date-last-modified
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[]
title
- csvName
- title
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Name of the related scoreScale.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 1 to 255 visible characters when required; 0 to 255 when optional. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 1 to 255 visible characters when required; 0 to 255 when optional.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- title text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- Line Item Score Scales sample
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItemScoreScales.csv.
- anchor
- field-oneroster-line-item-score-scales-title
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[]
line_item_sourced_id
- csvName
- lineItemSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the reference LineItem.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.line_items.sourced_id in the same tenant; many objective or score-scale rows may reference one line item.
- ddl
- line_item_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, line_item_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- lineitem-unit-1-quiz
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItemScoreScales.csv.
- anchor
- field-oneroster-line-item-score-scales-line-item-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[]
score_scale_sourced_id
- csvName
- scoreScaleSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the reference ScoreScale.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.score_scales.sourced_id in the same tenant; many join rows may reference one score scale.
- ddl
- score_scale_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, score_scale_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- scorescale-letter
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for lineItemScoreScales.csv.
- anchor
- field-oneroster-line-item-score-scales-score-scale-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[]
oneroster.orgs · Organizations
- fileName
- orgs.csv
- schemaName
- Orgs
- sourceCaption
- The 'orgs.csv' file format and contents.
- purpose
- Use this table to model the school/district hierarchy and to scope courses, classes, users, and enrollments to organizations.
- lifecycle
- Loaded early because many OneRoster files depend on orgs.csv. parent_sourced_id can reference another org in the same file.
- sourceClass
- 1EdTech pass-through with generated platform projection fields
- sourceBasis
- CSV fields, names, requiredness, formats, and values come from orgs.csv in OneRoster CSV Binding 1.2.1. tenant_id and import_batch_id are platform3 gap fills.
- primaryKey
- (tenant_id, sourced_id)
- anchor
- table-oneroster-orgs
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-002-surface-boundary",
"title": "OITD-002 The 1EdTech surface is broad OneRoster",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-002-surface-boundary"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]relationships
[ "Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.", "Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.", "Optional self-reference to one orgs row in the same tenant; one parent org can have many child orgs." ]
constraints
[ "Rows are tenant-scoped by tenant_id.", "Rows are evidence-scoped by import_batch_id.", "OneRoster source columns preserve exact CSV field names through csvName and snake_case SQL column names.", "metadata.* extension headers are allowed by OITD-009 when they use the metadata namespace.", "Allowed values preserve exact 1EdTech spelling, punctuation, and spaces.", "Tenant-scoped foreign keys use NO ACTION/RESTRICT by default; OneRoster lifecycle changes are represented through imports/status rather than ON DELETE CASCADE." ]
indexes
[ "primary key (tenant_id, sourced_id)", "index (tenant_id, import_batch_id)", "index (tenant_id, sourced_id)", "index (tenant_id, status)", "index (tenant_id, date_last_modified)" ]
invalidExamples
[ "A row whose tenant_id differs from the JWT tenant_id claim.", "A generated row missing import_batch_id evidence.", "A required source field is blank in the mode where OneRoster requires it.", "An enum value differs by capitalization, spacing, or punctuation.", "A GUID Reference points to a row outside the tenant or absent from required files." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"import_batch_id": "orbatch_20260522_001",
"sourced_id": "orgs-001",
"status": "active",
"date_last_modified": "2026-05-22T13:45:30.000Z",
"name": "North Valley High School",
"type": "school",
"identifier": "NCES-0600001",
"parent_sourced_id": "org-district-north-valley"
}queries
[ "select * from oneroster.orgs where tenant_id = $1 limit 20;", "select * from oneroster.orgs where tenant_id = $1 and sourced_id = $2;" ]
Fields (9)
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-orgs-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
import_batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Import/export evidence row that produced this generated OneRoster projection row.
- constraints
- Must pair with tenant_id to reference oneroster.import_batch(tenant_id, batch_id) and should be stable for all rows created by the same validated package.
- range
- Text domain pinned by this field's constraints.
- relationship
- Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.
- ddl
- import_batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, import_batch_id) on generated OneRoster tables.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Missing, points to a batch owned by another tenant, or does not match the package that supplied this row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 makes import/export batch evidence first-class.
- anchor
- field-oneroster-orgs-import-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
}
]allowedValues
[]
sourced_id
- csvName
- sourcedId
- type
- text
- csvFormat
- GUID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- Natural key within tenant and table
- meaning
- Tenant-scoped OneRoster identifier for this orgs row.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object. Enforce uniqueness within tenant and table.
- range
- 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object.
- relationship
- Tenant-scoped OneRoster identifier for this orgs row. Other tables may reference it according to the CSV dependency matrix.
- ddl
- sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Part of primary key (tenant_id, sourced_id); this is the target column for same-tenant references into oneroster.orgs.
- cascadePolicy
- multiValueExample
- example
- orgs-001
- invalidWhen
- Blank, duplicated within the same tenant and table, or changed between imports for the same logical object.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for orgs.csv.
- anchor
- field-oneroster-orgs-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
status
- csvName
- status
- type
- text
- csvFormat
- Enumeration
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Must be one of the documented allowed values, preserving exact spelling and spaces. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- Allowed values: active, tobedeleted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- status text; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, status) on high-volume tables that expose active/tobedeleted filtering; pair with date_last_modified for delta replay.
- cascadePolicy
- multiValueExample
- example
- active
- invalidWhen
- Provided in a bulk file, missing in a delta file, or outside active/tobedeleted.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for orgs.csv.
- anchor
- field-oneroster-orgs-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for orgs.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for orgs.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]date_last_modified
- csvName
- dateLastModified
- type
- timestamptz
- csvFormat
- DateTime
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Use ISO 8601 UTC resolution YYYY-MM-DDTHH:MM:SS.sssZ. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- ISO 8601 UTC timestamp at millisecond resolution.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- date_last_modified timestamptz; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, date_last_modified) when serving modifiedSince or delta-audit reads.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:45:30.000Z
- invalidWhen
- Provided in a bulk file, missing in a delta file, not ISO 8601 UTC, or earlier than a previous delta for the same sourcedId.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for orgs.csv.
- anchor
- field-oneroster-orgs-date-last-modified
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
name
- csvName
- name
- type
- text
- csvFormat
- String
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Name of the organization.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 visible characters for organization names. Use a NOT NULL plus btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 1 to 255 visible characters for organization names.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- name text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- North Valley High School
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for orgs.csv.
- anchor
- field-oneroster-orgs-name
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
type
- csvName
- type
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Organization classification that determines which references this org row can satisfy. school is the value required by classes.school_sourced_id, enrollments.school_sourced_id, and line_items.school_sourced_id; district, local, state, and national rows are normally hierarchy parents rather than class-enrollment scopes.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: department, school, district, local, state, national.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- type text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- school
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for orgs.csv.
- anchor
- field-oneroster-orgs-type
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "department",
"meaning": "Department-level organization, usually below a school or district.",
"useWhen": "Use for academic/administrative departments that can own courses or roles but should not satisfy school_sourced_id references.",
"invalidWhen": "Invalid as the target of classes.school_sourced_id or enrollments.school_sourced_id.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for orgs.type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "school",
"meaning": "School/building organization and the required org type for school-scoped class, enrollment, and line-item references.",
"useWhen": "Use when a row can be referenced by classes.school_sourced_id, enrollments.school_sourced_id, or line_items.school_sourced_id.",
"invalidWhen": "Invalid for district or department rows that should only be hierarchy parents.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for orgs.type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "district",
"meaning": "District organization that commonly parents school rows.",
"useWhen": "Use as parent_sourced_id for schools or for district-level roles/courses where the source sends them.",
"invalidWhen": "Invalid as a class/enrollment school_sourced_id target.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for orgs.type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "local",
"meaning": "Local education authority or local-level organization.",
"useWhen": "Use when the source models an LEA/local authority distinct from a district.",
"invalidWhen": "Invalid as a school_sourced_id target unless the source profile explicitly says local rows are schools.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for orgs.type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "state",
"meaning": "State-level education agency or authority.",
"useWhen": "Use as a hierarchy ancestor or role scope when supplied by the source.",
"invalidWhen": "Invalid as a class/enrollment school_sourced_id target.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for orgs.type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "national",
"meaning": "National-level education agency or authority.",
"useWhen": "Use only for national hierarchy/role contexts supplied by the source.",
"invalidWhen": "Invalid as a school_sourced_id target or ordinary school parent when a district/local row exists.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for orgs.type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]identifier
- csvName
- identifier
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Human readable identifier for this org e.g. NCES ID.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 255 visible characters; unique only when the source profile says it is unique; do not use as the primary key. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 255 visible characters; unique only when the source profile says it is unique; do not use as the primary key.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- identifier text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- NCES-0600001
- invalidWhen
- Missing when required, over 255 characters, duplicated where the source profile guarantees uniqueness, or used as the tenant-scoped primary key.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for orgs.csv.
- anchor
- field-oneroster-orgs-identifier
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
parent_sourced_id
- csvName
- parentSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of an Org representing the Parent organization.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- Optional self-reference to one orgs row in the same tenant; one parent org can have many child orgs.
- ddl
- parent_sourced_id text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- org-district-north-valley
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for orgs.csv.
- anchor
- field-oneroster-orgs-parent-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
oneroster.resources · Resources
- fileName
- resources.csv
- schemaName
- Resources
- sourceCaption
- The 'resources.csv' file format and contents.
- purpose
- Use this table to keep vendor resource IDs, audience roles, importance, vendor identity, and application identity for resource exchange.
- lifecycle
- Loaded before classResources.csv, courseResources.csv, and userResources.csv rows that point at resources.
- sourceClass
- 1EdTech pass-through with generated platform projection fields
- sourceBasis
- CSV fields, names, requiredness, formats, and values come from resources.csv in OneRoster CSV Binding 1.2.1. tenant_id and import_batch_id are platform3 gap fills.
- primaryKey
- (tenant_id, sourced_id)
- anchor
- table-oneroster-resources
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-002-surface-boundary",
"title": "OITD-002 The 1EdTech surface is broad OneRoster",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-002-surface-boundary"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]relationships
[ "Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.", "Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows." ]
constraints
[ "Rows are tenant-scoped by tenant_id.", "Rows are evidence-scoped by import_batch_id.", "OneRoster source columns preserve exact CSV field names through csvName and snake_case SQL column names.", "metadata.* extension headers are allowed by OITD-009 when they use the metadata namespace.", "Allowed values preserve exact 1EdTech spelling, punctuation, and spaces.", "Tenant-scoped foreign keys use NO ACTION/RESTRICT by default; OneRoster lifecycle changes are represented through imports/status rather than ON DELETE CASCADE." ]
indexes
[ "primary key (tenant_id, sourced_id)", "index (tenant_id, import_batch_id)", "index (tenant_id, sourced_id)", "index (tenant_id, status)", "index (tenant_id, date_last_modified)" ]
invalidExamples
[ "A row whose tenant_id differs from the JWT tenant_id claim.", "A generated row missing import_batch_id evidence.", "A required source field is blank in the mode where OneRoster requires it.", "An enum value differs by capitalization, spacing, or punctuation.", "A GUID Reference points to a row outside the tenant or absent from required files." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"import_batch_id": "orbatch_20260522_001",
"sourced_id": "resources-001",
"status": "active",
"date_last_modified": "2026-05-22T13:45:30.000Z",
"vendor_resource_id": "vendor-resource-987",
"title": "Resources sample",
"roles": "administrator",
"importance": "primary",
"vendor_id": "vendor-north-apps",
"application_id": "app-practice-portal"
}queries
[ "select * from oneroster.resources where tenant_id = $1 limit 20;", "select * from oneroster.resources where tenant_id = $1 and sourced_id = $2;" ]
Fields (11)
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-resources-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
import_batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Import/export evidence row that produced this generated OneRoster projection row.
- constraints
- Must pair with tenant_id to reference oneroster.import_batch(tenant_id, batch_id) and should be stable for all rows created by the same validated package.
- range
- Text domain pinned by this field's constraints.
- relationship
- Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.
- ddl
- import_batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, import_batch_id) on generated OneRoster tables.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Missing, points to a batch owned by another tenant, or does not match the package that supplied this row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 makes import/export batch evidence first-class.
- anchor
- field-oneroster-resources-import-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
}
]allowedValues
[]
sourced_id
- csvName
- sourcedId
- type
- text
- csvFormat
- GUID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- Natural key within tenant and table
- meaning
- Tenant-scoped OneRoster identifier for this resources row.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object. Enforce uniqueness within tenant and table.
- range
- 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object.
- relationship
- Tenant-scoped OneRoster identifier for this resources row. Other tables may reference it according to the CSV dependency matrix.
- ddl
- sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Part of primary key (tenant_id, sourced_id); this is the target column for same-tenant references into oneroster.resources.
- cascadePolicy
- multiValueExample
- example
- resources-001
- invalidWhen
- Blank, duplicated within the same tenant and table, or changed between imports for the same logical object.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resources.csv.
- anchor
- field-oneroster-resources-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
status
- csvName
- status
- type
- text
- csvFormat
- Enumeration
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Must be one of the documented allowed values, preserving exact spelling and spaces. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- Allowed values: active, tobedeleted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- status text; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, status) on high-volume tables that expose active/tobedeleted filtering; pair with date_last_modified for delta replay.
- cascadePolicy
- multiValueExample
- example
- active
- invalidWhen
- Provided in a bulk file, missing in a delta file, or outside active/tobedeleted.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resources.csv.
- anchor
- field-oneroster-resources-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]date_last_modified
- csvName
- dateLastModified
- type
- timestamptz
- csvFormat
- DateTime
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Use ISO 8601 UTC resolution YYYY-MM-DDTHH:MM:SS.sssZ. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- ISO 8601 UTC timestamp at millisecond resolution.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- date_last_modified timestamptz; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, date_last_modified) when serving modifiedSince or delta-audit reads.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:45:30.000Z
- invalidWhen
- Provided in a bulk file, missing in a delta file, not ISO 8601 UTC, or earlier than a previous delta for the same sourcedId.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resources.csv.
- anchor
- field-oneroster-resources-date-last-modified
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
vendor_resource_id
- csvName
- vendorResourceId
- type
- text
- csvFormat
- ID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Unique ID of this resource as allocated by the vendor. It is unique in the context of resource identifiers allocated by the vendor.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters. Use a NOT NULL plus btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 1 to 255 printable characters.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- vendor_resource_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- vendor-resource-987
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resources.csv.
- anchor
- field-oneroster-resources-vendor-resource-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
title
- csvName
- title
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Name of this resource.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 1 to 255 visible characters when required; 0 to 255 when optional. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 1 to 255 visible characters when required; 0 to 255 when optional.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- title text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- Resources sample
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resources.csv.
- anchor
- field-oneroster-resources-title
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
roles
- csvName
- roles
- type
- text
- csvFormat
- Enumeration List
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Audience roles for which a resource is intended. This is an enum list in one CSV cell, so several roles may receive the same resource without creating separate resource rows.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 2048 characters for the full RFC4180 CSV cell; each token must pass the field-specific vocabulary or reference check. CSV list values must follow RFC4180 quoting rules when they contain commas.
- range
- Allowed values: administrator, aide, guardian, parent, proctor, relative, student, teacher.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- roles text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- Do not index the raw CSV cell for joins; build a documented helper view or expression index after RFC4180 token validation if a query path needs it.
- cascadePolicy
- multiValueExample
- Stored cell example: administrator; parse as an RFC4180 list before validation, search, or joins.
- example
- administrator
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- This enum list is stored as one raw CSV cell; split it only in read helpers and validate each role against the resource-audience vocabulary before filtering resources.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resources.csv.
- anchor
- field-oneroster-resources-roles
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "administrator",
"meaning": "The resource is intended for administrator users.",
"useWhen": "Use when administrative users should see the resource.",
"invalidWhen": "Invalid as a learner-only audience.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.roles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "aide",
"meaning": "The resource is intended for aide/support roles.",
"useWhen": "Use when aides need resource access.",
"invalidWhen": "Invalid as a teacher-only audience.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.roles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "guardian",
"meaning": "The resource is intended for guardian users.",
"useWhen": "Use for family/guardian access flows.",
"invalidWhen": "Invalid for student-only or teacher-only resources.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.roles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "parent",
"meaning": "The resource is intended for parent users.",
"useWhen": "Use for parent access flows.",
"invalidWhen": "Invalid for staff-only resources.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.roles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "proctor",
"meaning": "The resource is intended for proctors.",
"useWhen": "Use for assessment supervision resources.",
"invalidWhen": "Invalid for ordinary learner content unless also listed as student.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.roles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "relative",
"meaning": "The resource is intended for relative relationships.",
"useWhen": "Use when the source differentiates relative from parent/guardian.",
"invalidWhen": "Invalid for school staff roles.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.roles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "student",
"meaning": "The resource is intended for learners.",
"useWhen": "Use for student-facing resource access.",
"invalidWhen": "Invalid for staff-only resources.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.roles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "teacher",
"meaning": "The resource is intended for teachers.",
"useWhen": "Use for instructor-facing resource access.",
"invalidWhen": "Invalid for learner-only resources.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.roles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]importance
- csvName
- importance
- type
- text
- csvFormat
- Enumeration
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Resource priority inside its class, course, or user context. primary marks the main resource mapping; secondary marks supporting material.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: primary, secondary.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- importance text. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- primary
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resources.csv.
- anchor
- field-oneroster-resources-importance
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "primary",
"meaning": "Primary resource or score-scale mapping importance.",
"useWhen": "Use when this row is the main relationship in its context.",
"invalidWhen": "Invalid when another row is already primary where the spec allows only one.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.importance.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "secondary",
"meaning": "Secondary resource or score-scale mapping importance.",
"useWhen": "Use for non-primary relationships.",
"invalidWhen": "Invalid if the relationship is required to be primary.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.importance.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]vendor_id
- csvName
- vendorId
- type
- text
- csvFormat
- ID
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Identifier of the vendor responsible for this resource. This unique ID will be assigned by 1EdTech during the OneRoster conformance process.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 255 printable characters. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 255 printable characters.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- vendor_id text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- vendor-north-apps
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resources.csv.
- anchor
- field-oneroster-resources-vendor-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
application_id
- csvName
- applicationId
- type
- text
- csvFormat
- ID
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Identifier of the application associated with this resource. This identifier is assigned by the creator/vendor of the resource.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 255 printable characters. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 255 printable characters.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- application_id text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- app-practice-portal
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resources.csv.
- anchor
- field-oneroster-resources-application-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
oneroster.result_learning_objective_ids · Result Learning Objective IDs
- fileName
- resultLearningObjectiveIds.csv
- schemaName
- ResultLearningObjectiveIds
- sourceCaption
- The 'resultLearningObjectiveIds.csv' file format and contents.
- purpose
- Use this table to align a student's result to standards or CASE identifiers while preserving the OneRoster result relationship.
- lifecycle
- Loaded after results.csv and validated according to source=case or source=unknown.
- sourceClass
- 1EdTech pass-through with generated platform projection fields
- sourceBasis
- CSV fields, names, requiredness, formats, and values come from resultLearningObjectiveIds.csv in OneRoster CSV Binding 1.2.1. tenant_id and import_batch_id are platform3 gap fills.
- primaryKey
- (tenant_id, sourced_id)
- anchor
- table-oneroster-result-learning-objective-ids
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-002-surface-boundary",
"title": "OITD-002 The 1EdTech surface is broad OneRoster",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-002-surface-boundary"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]relationships
[ "Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.", "Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.", "References one oneroster.results.sourced_id in the same tenant; many objective or score-scale rows may reference one result." ]
constraints
[ "Rows are tenant-scoped by tenant_id.", "Rows are evidence-scoped by import_batch_id.", "OneRoster source columns preserve exact CSV field names through csvName and snake_case SQL column names.", "metadata.* extension headers are allowed by OITD-009 when they use the metadata namespace.", "Allowed values preserve exact 1EdTech spelling, punctuation, and spaces.", "Tenant-scoped foreign keys use NO ACTION/RESTRICT by default; OneRoster lifecycle changes are represented through imports/status rather than ON DELETE CASCADE." ]
indexes
[ "primary key (tenant_id, sourced_id)", "index (tenant_id, import_batch_id)", "index (tenant_id, sourced_id)", "index (tenant_id, result_sourced_id)", "index (tenant_id, status)", "index (tenant_id, date_last_modified)" ]
invalidExamples
[ "A row whose tenant_id differs from the JWT tenant_id claim.", "A generated row missing import_batch_id evidence.", "A required source field is blank in the mode where OneRoster requires it.", "An enum value differs by capitalization, spacing, or punctuation.", "A GUID Reference points to a row outside the tenant or absent from required files." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"import_batch_id": "orbatch_20260522_001",
"sourced_id": "result_learning_objective_ids-001",
"status": "active",
"date_last_modified": "2026-05-22T13:45:30.000Z",
"result_sourced_id": "result-alex-unit-1-quiz",
"source": "case",
"learning_objective_id": "urn:uuid:3bfe62a2-0f9d-4fd0-9d2f-d2f826cb3368",
"score": "0",
"text_score": "0"
}queries
[ "select * from oneroster.result_learning_objective_ids where tenant_id = $1 limit 20;", "select * from oneroster.result_learning_objective_ids where tenant_id = $1 and sourced_id = $2;" ]
Fields (10)
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-result-learning-objective-ids-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
import_batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Import/export evidence row that produced this generated OneRoster projection row.
- constraints
- Must pair with tenant_id to reference oneroster.import_batch(tenant_id, batch_id) and should be stable for all rows created by the same validated package.
- range
- Text domain pinned by this field's constraints.
- relationship
- Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.
- ddl
- import_batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, import_batch_id) on generated OneRoster tables.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Missing, points to a batch owned by another tenant, or does not match the package that supplied this row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 makes import/export batch evidence first-class.
- anchor
- field-oneroster-result-learning-objective-ids-import-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
}
]allowedValues
[]
sourced_id
- csvName
- sourcedId
- type
- text
- csvFormat
- GUID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- Natural key within tenant and table
- meaning
- Tenant-scoped OneRoster identifier for this result learning objective ids row.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object. Enforce uniqueness within tenant and table.
- range
- 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object.
- relationship
- Tenant-scoped OneRoster identifier for this result_learning_objective_ids row. Other tables may reference it according to the CSV dependency matrix.
- ddl
- sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Part of primary key (tenant_id, sourced_id); this is the target column for same-tenant references into oneroster.result_learning_objective_ids.
- cascadePolicy
- multiValueExample
- example
- result_learning_objective_ids-001
- invalidWhen
- Blank, duplicated within the same tenant and table, or changed between imports for the same logical object.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resultLearningObjectiveIds.csv.
- anchor
- field-oneroster-result-learning-objective-ids-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
status
- csvName
- status
- type
- text
- csvFormat
- Enumeration
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Must be one of the documented allowed values, preserving exact spelling and spaces. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- Allowed values: active, tobedeleted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- status text; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, status) on high-volume tables that expose active/tobedeleted filtering; pair with date_last_modified for delta replay.
- cascadePolicy
- multiValueExample
- example
- active
- invalidWhen
- Provided in a bulk file, missing in a delta file, or outside active/tobedeleted.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resultLearningObjectiveIds.csv.
- anchor
- field-oneroster-result-learning-objective-ids-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for result_learning_objective_ids.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for result_learning_objective_ids.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]date_last_modified
- csvName
- dateLastModified
- type
- timestamptz
- csvFormat
- DateTime
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Use ISO 8601 UTC resolution YYYY-MM-DDTHH:MM:SS.sssZ. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- ISO 8601 UTC timestamp at millisecond resolution.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- date_last_modified timestamptz; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, date_last_modified) when serving modifiedSince or delta-audit reads.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:45:30.000Z
- invalidWhen
- Provided in a bulk file, missing in a delta file, not ISO 8601 UTC, or earlier than a previous delta for the same sourcedId.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resultLearningObjectiveIds.csv.
- anchor
- field-oneroster-result-learning-objective-ids-date-last-modified
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
result_sourced_id
- csvName
- resultSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the parent Result for this learning objective.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.results.sourced_id in the same tenant; many objective or score-scale rows may reference one result.
- ddl
- result_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, result_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- result-alex-unit-1-quiz
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resultLearningObjectiveIds.csv.
- anchor
- field-oneroster-result-learning-objective-ids-result-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
source
- csvName
- source
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Vocabulary source for the learning objective identifier attached to a result. case means the identifier should validate as an IMS CASE identifier; unknown preserves a sender value whose source cannot be asserted.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: case, unknown.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- source text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- case
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resultLearningObjectiveIds.csv.
- anchor
- field-oneroster-result-learning-objective-ids-source
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "case",
"meaning": "The learning objective identifier is an IMS CASE identifier.",
"useWhen": "Use when learningObjectiveId is a CASE UUID URN or CASE-aligned identifier.",
"invalidWhen": "Invalid when the identifier is local or unknown.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for result_learning_objective_ids.source.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "unknown",
"meaning": "The learning objective identifier source is unknown to the sender.",
"useWhen": "Use when the source cannot identify CASE or another controlled system.",
"invalidWhen": "Invalid when the source is known and should be labeled.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for result_learning_objective_ids.source.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]learning_objective_id
- csvName
- learningObjectiveId
- type
- text
- csvFormat
- String
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Unique identifier for the associated learning objective. If a CASE identifier then it MUST be a valid UUID URN.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 visible characters; when source is case, use a CASE UUID URN or UUID-shaped CASE identifier. Use a NOT NULL plus btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 1 to 255 visible characters; when source is case, use a CASE UUID URN or UUID-shaped CASE identifier.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- learning_objective_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- urn:uuid:3bfe62a2-0f9d-4fd0-9d2f-d2f826cb3368
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resultLearningObjectiveIds.csv.
- anchor
- field-oneroster-result-learning-objective-ids-learning-objective-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
score
- csvName
- score
- type
- double precision
- csvFormat
- Float
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The optional mastery score supplied as a numeric value.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Use a numeric value parseable as a decimal floating point number.
- range
- Any decimal score value accepted by the source profile; lineItems.resultValueMin/resultValueMax constrain result scores.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- score double precision. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- 0
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resultLearningObjectiveIds.csv.
- anchor
- field-oneroster-result-learning-objective-ids-score
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
text_score
- csvName
- textScore
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The optional mastery score supplied as a string.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 255 visible characters; should align to the score scale when one is attached. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 255 visible characters; should align to the score scale when one is attached.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- text_score text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- 0
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resultLearningObjectiveIds.csv.
- anchor
- field-oneroster-result-learning-objective-ids-text-score
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
oneroster.results · Results
- fileName
- results.csv
- schemaName
- Results
- sourceCaption
- The 'results.csv' file format and contents.
- purpose
- Use this table to answer what score/status a student has for an assigned line item and which workflow flags apply.
- lifecycle
- Loaded after lineItems.csv, users.csv, and any referenced classes are valid for the same tenant.
- sourceClass
- 1EdTech pass-through with generated platform projection fields
- sourceBasis
- CSV fields, names, requiredness, formats, and values come from results.csv in OneRoster CSV Binding 1.2.1. tenant_id and import_batch_id are platform3 gap fills.
- primaryKey
- (tenant_id, sourced_id)
- anchor
- table-oneroster-results
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-002-surface-boundary",
"title": "OITD-002 The 1EdTech surface is broad OneRoster",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-002-surface-boundary"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]relationships
[ "Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.", "Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.", "References one oneroster.line_items.sourced_id in the same tenant; many objective or score-scale rows may reference one line item.", "References one oneroster.users.sourced_id in the same tenant; many result rows may reference one student user.", "References one oneroster.classes.sourced_id in the same tenant; many dependent rows may reference one class." ]
constraints
[ "Rows are tenant-scoped by tenant_id.", "Rows are evidence-scoped by import_batch_id.", "OneRoster source columns preserve exact CSV field names through csvName and snake_case SQL column names.", "metadata.* extension headers are allowed by OITD-009 when they use the metadata namespace.", "Allowed values preserve exact 1EdTech spelling, punctuation, and spaces.", "Tenant-scoped foreign keys use NO ACTION/RESTRICT by default; OneRoster lifecycle changes are represented through imports/status rather than ON DELETE CASCADE." ]
indexes
[ "primary key (tenant_id, sourced_id)", "index (tenant_id, import_batch_id)", "index (tenant_id, sourced_id)", "index (tenant_id, line_item_sourced_id)", "index (tenant_id, student_sourced_id)", "index (tenant_id, class_sourced_id)", "index (tenant_id, status)", "index (tenant_id, date_last_modified)" ]
invalidExamples
[ "A row whose tenant_id differs from the JWT tenant_id claim.", "A generated row missing import_batch_id evidence.", "A required source field is blank in the mode where OneRoster requires it.", "An enum value differs by capitalization, spacing, or punctuation.", "A GUID Reference points to a row outside the tenant or absent from required files." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"import_batch_id": "orbatch_20260522_001",
"sourced_id": "results-001",
"status": "active",
"date_last_modified": "2026-05-22T13:45:30.000Z",
"line_item_sourced_id": "lineitem-unit-1-quiz",
"student_sourced_id": "user-alex-001",
"score_status": "fully graded",
"score": "0",
"score_date": "2026-08-15",
"comment": "Student should review factoring practice.",
"text_score": "0",
"class_sourced_id": "class-algebra-1-a",
"in_progress": "false",
"incomplete": "false",
"late": "false",
"missing": "false"
}queries
[ "select * from oneroster.results where tenant_id = $1 limit 20;", "select * from oneroster.results where tenant_id = $1 and sourced_id = $2;" ]
Fields (17)
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-results-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
import_batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Import/export evidence row that produced this generated OneRoster projection row.
- constraints
- Must pair with tenant_id to reference oneroster.import_batch(tenant_id, batch_id) and should be stable for all rows created by the same validated package.
- range
- Text domain pinned by this field's constraints.
- relationship
- Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.
- ddl
- import_batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, import_batch_id) on generated OneRoster tables.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Missing, points to a batch owned by another tenant, or does not match the package that supplied this row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 makes import/export batch evidence first-class.
- anchor
- field-oneroster-results-import-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
}
]allowedValues
[]
sourced_id
- csvName
- sourcedId
- type
- text
- csvFormat
- GUID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- Natural key within tenant and table
- meaning
- Tenant-scoped OneRoster identifier for this results row.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object. Enforce uniqueness within tenant and table.
- range
- 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object.
- relationship
- Tenant-scoped OneRoster identifier for this results row. Other tables may reference it according to the CSV dependency matrix.
- ddl
- sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Part of primary key (tenant_id, sourced_id); this is the target column for same-tenant references into oneroster.results.
- cascadePolicy
- multiValueExample
- example
- results-001
- invalidWhen
- Blank, duplicated within the same tenant and table, or changed between imports for the same logical object.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for results.csv.
- anchor
- field-oneroster-results-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
status
- csvName
- status
- type
- text
- csvFormat
- Enumeration
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Must be one of the documented allowed values, preserving exact spelling and spaces. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- Allowed values: active, tobedeleted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- status text; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, status) on high-volume tables that expose active/tobedeleted filtering; pair with date_last_modified for delta replay.
- cascadePolicy
- multiValueExample
- example
- active
- invalidWhen
- Provided in a bulk file, missing in a delta file, or outside active/tobedeleted.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for results.csv.
- anchor
- field-oneroster-results-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]date_last_modified
- csvName
- dateLastModified
- type
- timestamptz
- csvFormat
- DateTime
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Use ISO 8601 UTC resolution YYYY-MM-DDTHH:MM:SS.sssZ. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- ISO 8601 UTC timestamp at millisecond resolution.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- date_last_modified timestamptz; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, date_last_modified) when serving modifiedSince or delta-audit reads.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:45:30.000Z
- invalidWhen
- Provided in a bulk file, missing in a delta file, not ISO 8601 UTC, or earlier than a previous delta for the same sourcedId.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for results.csv.
- anchor
- field-oneroster-results-date-last-modified
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
line_item_sourced_id
- csvName
- lineItemSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Unique identifier of the lineItem.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.line_items.sourced_id in the same tenant; many objective or score-scale rows may reference one line item.
- ddl
- line_item_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, line_item_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- lineitem-unit-1-quiz
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for results.csv.
- anchor
- field-oneroster-results-line-item-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[]
student_sourced_id
- csvName
- studentSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- Identifier
- privacyTag
- PII: Identifier
- key
- meaning
- Unique identifier of the student (user). References a record that is/was created in the users.csv file with type of 'student'.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.users.sourced_id in the same tenant; many result rows may reference one student user.
- ddl
- student_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, student_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- user-alex-001
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- Production results.student_sourced_id values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for results.csv.
- anchor
- field-oneroster-results-student-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
score_status
- csvName
- scoreStatus
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Gradebook result state for the student's line item. It tells consumers whether the result is submitted, graded, exempt, or still missing work.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: exempt, fully graded, not submitted, partially graded, submitted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- score_status text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- fully graded
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for results.csv.
- anchor
- field-oneroster-results-score-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "exempt",
"meaning": "The student is exempt from this line item/result.",
"useWhen": "Use when the score should not count as a missing or graded submission.",
"invalidWhen": "Invalid when the work was submitted and graded.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.score_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "fully graded",
"meaning": "The result has been completely graded.",
"useWhen": "Use when the score/result is final enough for reporting.",
"invalidWhen": "Invalid when grading is partial or not submitted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.score_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "not submitted",
"meaning": "The expected student work has not been submitted.",
"useWhen": "Use when no submission exists.",
"invalidWhen": "Invalid when a submission exists but is incomplete or partially graded.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.score_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "partially graded",
"meaning": "The result has some grading but is not complete.",
"useWhen": "Use during partial grading workflows.",
"invalidWhen": "Invalid when fully graded.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.score_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "submitted",
"meaning": "The student submitted work, but grading status may still need completion.",
"useWhen": "Use after submission before full grading.",
"invalidWhen": "Invalid when work has not been submitted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.score_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]score
- csvName
- score
- type
- double precision
- csvFormat
- Float
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Numeric result value for the student's line item. When present, it must resolve to exactly one same-tenant effective score scale before persistence and must stay consistent with lineItems resultValueMin/resultValueMax.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Use a numeric value parseable as a decimal floating point number. If populated, the row must resolve to exactly one effective score scale through an active resultScoreScales row or exactly one active lineItemScoreScales row for the result's lineItem.
- range
- Any decimal score value accepted by the source profile; lineItems.resultValueMin/resultValueMax constrain result scores.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- score double precision. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- 0
- invalidWhen
- Persisted with no active same-tenant effective score scale, with multiple unselected candidate score scales, or with a value that conflicts with the selected scoreScaleValue mapping.
- edgeCases
- OITD-113 makes this a write-time validation field when populated: first prefer an active resultScoreScales row for this result, otherwise require exactly one active lineItemScoreScales row for the result's lineItem, then expose effectiveScoreScaleSourcedId on gradebook reads.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for results.csv.
- anchor
- field-oneroster-results-score
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[]
score_date
- csvName
- scoreDate
- type
- date
- csvFormat
- Date
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The date the result was submitted and/or the 'scoreStatus' was changed.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Use ISO 8601 calendar date YYYY-MM-DD.
- range
- ISO 8601 date.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- score_date date not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- 2026-08-15
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for results.csv.
- anchor
- field-oneroster-results-score-date
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
comment
- csvName
- comment
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Human readable comment about the result.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 1000 visible characters; must not include secrets and is treated as student-result data. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 1000 visible characters; must not include secrets and is treated as student-result data.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- comment text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- Student should review factoring practice.
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for results.csv.
- anchor
- field-oneroster-results-comment
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
text_score
- csvName
- textScore
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Non-numeric gradebook value for the student's line item. When present, it must align with exactly one same-tenant effective score scale before persistence; a read-time hint cannot substitute for rejecting invalid state.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 255 visible characters; should align to the score scale when one is attached. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise. If populated, the row must resolve to exactly one effective score scale through an active resultScoreScales row or exactly one active lineItemScoreScales row for the result's lineItem.
- range
- 0 to 255 visible characters; should align to the score scale when one is attached.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- text_score text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- 0
- invalidWhen
- Persisted with no active same-tenant effective score scale, with multiple unselected candidate score scales, or with a value that conflicts with the selected scoreScaleValue mapping.
- edgeCases
- OITD-113 makes this a write-time validation field when populated: first prefer an active resultScoreScales row for this result, otherwise require exactly one active lineItemScoreScales row for the result's lineItem, then expose effectiveScoreScaleSourcedId on gradebook reads.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for results.csv.
- anchor
- field-oneroster-results-text-score
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[]
class_sourced_id
- csvName
- classSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Unique identifier of the class. References a record that is/was created in the classes.csv file. This is a new column added in version 1.2.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.classes.sourced_id in the same tenant; many dependent rows may reference one class.
- ddl
- class_sourced_id text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- Use index (tenant_id, class_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- class-algebra-1-a
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for results.csv.
- anchor
- field-oneroster-results-class-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
in_progress
- csvName
- inProgress
- type
- text
- csvFormat
- Enumeration
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Workflow flag that says assigned work is still in progress and a submitted work product is not expected yet. It affects gradebook interpretation, not row lifecycle.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: true, false.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- in_progress text. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- false
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for results.csv.
- anchor
- field-oneroster-results-in-progress
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "true",
"meaning": "Assigned work is still in progress and the student's work product is not expected yet.",
"useWhen": "Use while the task is open and not yet ready for submitted/missing judgment.",
"invalidWhen": "Invalid when the work has already been submitted or graded.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.in_progress.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source is not marking the result as in progress.",
"useWhen": "Use when normal score_status semantics describe the result without the in-progress branch.",
"invalidWhen": "Invalid if used to infer completion without checking score_status and submission dates.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.in_progress.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]incomplete
- csvName
- incomplete
- type
- text
- csvFormat
- Enumeration
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Workflow flag that says submitted student work is present but incomplete. It can coexist with score_status values while the teacher resolves grading.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: true, false.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- incomplete text. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- false
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for results.csv.
- anchor
- field-oneroster-results-incomplete
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "true",
"meaning": "Submitted work exists but is deemed incomplete by the teacher/source.",
"useWhen": "Use after submission when the teacher needs the student to complete or correct work.",
"invalidWhen": "Invalid for work that is merely not submitted or fully graded.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.incomplete.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source is not marking the submitted work incomplete.",
"useWhen": "Use when score_status and other flags carry the workflow state.",
"invalidWhen": "Invalid if used to infer that the work was fully graded.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.incomplete.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]late
- csvName
- late
- type
- text
- csvFormat
- Enumeration
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Workflow flag that says the work was submitted after the due date or is otherwise past due. It may affect scoring policy but does not change the result row's tenant-scoped identity.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: true, false.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- late text. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- false
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for results.csv.
- anchor
- field-oneroster-results-late
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "true",
"meaning": "The work is past due or was submitted after the due date.",
"useWhen": "Use when lateness may affect score interpretation or interventions.",
"invalidWhen": "Invalid when the due-date policy does not mark the work late.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.late.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source is not marking the work late.",
"useWhen": "Use when lateness is absent or unknown in the source.",
"invalidWhen": "Invalid if used to overwrite a true late flag from the source.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.late.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]missing
- csvName
- missing
- type
- text
- csvFormat
- Enumeration
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Workflow flag that says expected work has not been submitted and is considered missing. It should not be inferred only from a blank score; the source must send the flag.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: true, false.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- missing text. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- false
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for results.csv.
- anchor
- field-oneroster-results-missing
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "true",
"meaning": "Expected work has not been submitted and is considered missing.",
"useWhen": "Use when the source/teacher has made a missing-work determination.",
"invalidWhen": "Invalid for work that is merely in progress or exempt.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.missing.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source is not marking the work missing.",
"useWhen": "Use when score_status or other workflow flags explain the result.",
"invalidWhen": "Invalid if used to infer submission without checking score_status.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.missing.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]oneroster.result_score_scales · Result Score Scales
- fileName
- resultScoreScales.csv
- schemaName
- ResultScoreScales
- sourceCaption
- The 'resultScoreScales.csv' file format and contents.
- purpose
- Use this table to determine which scale interprets a particular result when it differs from or supplements the line-item scale.
- lifecycle
- Loaded after results.csv and scoreScales.csv are valid for the same tenant.
- sourceClass
- 1EdTech pass-through with generated platform projection fields
- sourceBasis
- CSV fields, names, requiredness, formats, and values come from resultScoreScales.csv in OneRoster CSV Binding 1.2.1. tenant_id and import_batch_id are platform3 gap fills.
- primaryKey
- (tenant_id, sourced_id)
- anchor
- table-oneroster-result-score-scales
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-002-surface-boundary",
"title": "OITD-002 The 1EdTech surface is broad OneRoster",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-002-surface-boundary"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]relationships
[ "Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.", "Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.", "References one oneroster.results.sourced_id in the same tenant; many objective or score-scale rows may reference one result.", "References one oneroster.score_scales.sourced_id in the same tenant; many join rows may reference one score scale." ]
constraints
[ "Rows are tenant-scoped by tenant_id.", "Rows are evidence-scoped by import_batch_id.", "OneRoster source columns preserve exact CSV field names through csvName and snake_case SQL column names.", "metadata.* extension headers are allowed by OITD-009 when they use the metadata namespace.", "Allowed values preserve exact 1EdTech spelling, punctuation, and spaces.", "Tenant-scoped foreign keys use NO ACTION/RESTRICT by default; OneRoster lifecycle changes are represented through imports/status rather than ON DELETE CASCADE." ]
indexes
[ "primary key (tenant_id, sourced_id)", "index (tenant_id, import_batch_id)", "index (tenant_id, sourced_id)", "index (tenant_id, result_sourced_id)", "index (tenant_id, score_scale_sourced_id)", "index (tenant_id, status)", "index (tenant_id, date_last_modified)" ]
invalidExamples
[ "A row whose tenant_id differs from the JWT tenant_id claim.", "A generated row missing import_batch_id evidence.", "A required source field is blank in the mode where OneRoster requires it.", "An enum value differs by capitalization, spacing, or punctuation.", "A GUID Reference points to a row outside the tenant or absent from required files." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"import_batch_id": "orbatch_20260522_001",
"sourced_id": "result_score_scales-001",
"status": "active",
"date_last_modified": "2026-05-22T13:45:30.000Z",
"title": "Result Score Scales sample",
"result_sourced_id": "result-alex-unit-1-quiz",
"score_scale_sourced_id": "scorescale-letter"
}queries
[ "select * from oneroster.result_score_scales where tenant_id = $1 limit 20;", "select * from oneroster.result_score_scales where tenant_id = $1 and sourced_id = $2;" ]
Fields (8)
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-result-score-scales-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
import_batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Import/export evidence row that produced this generated OneRoster projection row.
- constraints
- Must pair with tenant_id to reference oneroster.import_batch(tenant_id, batch_id) and should be stable for all rows created by the same validated package.
- range
- Text domain pinned by this field's constraints.
- relationship
- Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.
- ddl
- import_batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, import_batch_id) on generated OneRoster tables.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Missing, points to a batch owned by another tenant, or does not match the package that supplied this row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 makes import/export batch evidence first-class.
- anchor
- field-oneroster-result-score-scales-import-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
}
]allowedValues
[]
sourced_id
- csvName
- sourcedId
- type
- text
- csvFormat
- GUID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- Natural key within tenant and table
- meaning
- Tenant-scoped OneRoster identifier for this result score scales row.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object. Enforce uniqueness within tenant and table.
- range
- 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object.
- relationship
- Tenant-scoped OneRoster identifier for this result_score_scales row. Other tables may reference it according to the CSV dependency matrix.
- ddl
- sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Part of primary key (tenant_id, sourced_id); this is the target column for same-tenant references into oneroster.result_score_scales.
- cascadePolicy
- multiValueExample
- example
- result_score_scales-001
- invalidWhen
- Blank, duplicated within the same tenant and table, or changed between imports for the same logical object.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resultScoreScales.csv.
- anchor
- field-oneroster-result-score-scales-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[]
status
- csvName
- status
- type
- text
- csvFormat
- Enumeration
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Must be one of the documented allowed values, preserving exact spelling and spaces. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- Allowed values: active, tobedeleted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- status text; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, status) on high-volume tables that expose active/tobedeleted filtering; pair with date_last_modified for delta replay.
- cascadePolicy
- multiValueExample
- example
- active
- invalidWhen
- Provided in a bulk file, missing in a delta file, or outside active/tobedeleted.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resultScoreScales.csv.
- anchor
- field-oneroster-result-score-scales-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for result_score_scales.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for result_score_scales.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]date_last_modified
- csvName
- dateLastModified
- type
- timestamptz
- csvFormat
- DateTime
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Use ISO 8601 UTC resolution YYYY-MM-DDTHH:MM:SS.sssZ. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- ISO 8601 UTC timestamp at millisecond resolution.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- date_last_modified timestamptz; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, date_last_modified) when serving modifiedSince or delta-audit reads.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:45:30.000Z
- invalidWhen
- Provided in a bulk file, missing in a delta file, not ISO 8601 UTC, or earlier than a previous delta for the same sourcedId.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resultScoreScales.csv.
- anchor
- field-oneroster-result-score-scales-date-last-modified
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[]
title
- csvName
- title
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Name of the related scoreScale.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 1 to 255 visible characters when required; 0 to 255 when optional. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 1 to 255 visible characters when required; 0 to 255 when optional.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- title text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- Result Score Scales sample
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resultScoreScales.csv.
- anchor
- field-oneroster-result-score-scales-title
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[]
result_sourced_id
- csvName
- resultSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the reference Result.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.results.sourced_id in the same tenant; many objective or score-scale rows may reference one result.
- ddl
- result_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, result_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- result-alex-unit-1-quiz
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resultScoreScales.csv.
- anchor
- field-oneroster-result-score-scales-result-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[]
score_scale_sourced_id
- csvName
- scoreScaleSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the reference ScoreScale.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.score_scales.sourced_id in the same tenant; many join rows may reference one score scale.
- ddl
- score_scale_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, score_scale_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- scorescale-letter
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for resultScoreScales.csv.
- anchor
- field-oneroster-result-score-scales-score-scale-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[]
oneroster.roles · Roles
- fileName
- roles.csv
- schemaName
- Roles
- sourceCaption
- The 'roles.csv' file format and contents.
- purpose
- Use this table to answer what role a user has in an organization and whether it is primary or secondary during a date window.
- lifecycle
- Loaded after users.csv and orgs.csv dependencies are valid for the same tenant.
- sourceClass
- 1EdTech pass-through with generated platform projection fields
- sourceBasis
- CSV fields, names, requiredness, formats, and values come from roles.csv in OneRoster CSV Binding 1.2.1. tenant_id and import_batch_id are platform3 gap fills.
- primaryKey
- (tenant_id, sourced_id)
- anchor
- table-oneroster-roles
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-002-surface-boundary",
"title": "OITD-002 The 1EdTech surface is broad OneRoster",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-002-surface-boundary"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]relationships
[ "Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.", "Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.", "References one oneroster.users.sourced_id in the same tenant; many enrollments, roles, profiles, or resource rows may reference one user.", "References one oneroster.orgs.sourced_id in the same tenant; many courses or roles may reference one org.", "Optionally references one oneroster.user_profiles.sourced_id in the same tenant; many role rows may reference one user profile." ]
constraints
[ "Rows are tenant-scoped by tenant_id.", "Rows are evidence-scoped by import_batch_id.", "OneRoster source columns preserve exact CSV field names through csvName and snake_case SQL column names.", "metadata.* extension headers are allowed by OITD-009 when they use the metadata namespace.", "Allowed values preserve exact 1EdTech spelling, punctuation, and spaces.", "Tenant-scoped foreign keys use NO ACTION/RESTRICT by default; OneRoster lifecycle changes are represented through imports/status rather than ON DELETE CASCADE." ]
indexes
[ "primary key (tenant_id, sourced_id)", "index (tenant_id, import_batch_id)", "index (tenant_id, sourced_id)", "index (tenant_id, user_sourced_id)", "index (tenant_id, org_sourced_id)", "index (tenant_id, user_profile_sourced_id)", "index (tenant_id, status)", "index (tenant_id, date_last_modified)" ]
invalidExamples
[ "A row whose tenant_id differs from the JWT tenant_id claim.", "A generated row missing import_batch_id evidence.", "A required source field is blank in the mode where OneRoster requires it.", "An enum value differs by capitalization, spacing, or punctuation.", "A GUID Reference points to a row outside the tenant or absent from required files." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"import_batch_id": "orbatch_20260522_001",
"sourced_id": "roles-001",
"status": "active",
"date_last_modified": "2026-05-22T13:45:30.000Z",
"user_sourced_id": "user-alex-001",
"role_type": "primary",
"role": "teacher",
"begin_date": "2026-08-15",
"end_date": "2027-06-01",
"org_sourced_id": "org-north-valley-high",
"user_profile_sourced_id": "profile-alex-lms"
}queries
[ "select * from oneroster.roles where tenant_id = $1 limit 20;", "select * from oneroster.roles where tenant_id = $1 and sourced_id = $2;" ]
Fields (12)
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-roles-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
import_batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Import/export evidence row that produced this generated OneRoster projection row.
- constraints
- Must pair with tenant_id to reference oneroster.import_batch(tenant_id, batch_id) and should be stable for all rows created by the same validated package.
- range
- Text domain pinned by this field's constraints.
- relationship
- Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.
- ddl
- import_batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, import_batch_id) on generated OneRoster tables.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Missing, points to a batch owned by another tenant, or does not match the package that supplied this row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 makes import/export batch evidence first-class.
- anchor
- field-oneroster-roles-import-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
}
]allowedValues
[]
sourced_id
- csvName
- sourcedId
- type
- text
- csvFormat
- GUID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- Natural key within tenant and table
- meaning
- Tenant-scoped OneRoster identifier for this roles row.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object. Enforce uniqueness within tenant and table.
- range
- 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object.
- relationship
- Tenant-scoped OneRoster identifier for this roles row. Other tables may reference it according to the CSV dependency matrix.
- ddl
- sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Part of primary key (tenant_id, sourced_id); this is the target column for same-tenant references into oneroster.roles.
- cascadePolicy
- multiValueExample
- example
- roles-001
- invalidWhen
- Blank, duplicated within the same tenant and table, or changed between imports for the same logical object.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for roles.csv.
- anchor
- field-oneroster-roles-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
status
- csvName
- status
- type
- text
- csvFormat
- Enumeration
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Must be one of the documented allowed values, preserving exact spelling and spaces. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- Allowed values: active, tobedeleted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- status text; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, status) on high-volume tables that expose active/tobedeleted filtering; pair with date_last_modified for delta replay.
- cascadePolicy
- multiValueExample
- example
- active
- invalidWhen
- Provided in a bulk file, missing in a delta file, or outside active/tobedeleted.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for roles.csv.
- anchor
- field-oneroster-roles-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]date_last_modified
- csvName
- dateLastModified
- type
- timestamptz
- csvFormat
- DateTime
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Use ISO 8601 UTC resolution YYYY-MM-DDTHH:MM:SS.sssZ. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- ISO 8601 UTC timestamp at millisecond resolution.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- date_last_modified timestamptz; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, date_last_modified) when serving modifiedSince or delta-audit reads.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:45:30.000Z
- invalidWhen
- Provided in a bulk file, missing in a delta file, not ISO 8601 UTC, or earlier than a previous delta for the same sourcedId.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for roles.csv.
- anchor
- field-oneroster-roles-date-last-modified
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
user_sourced_id
- csvName
- userSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- Identifier
- privacyTag
- PII: Identifier
- key
- meaning
- The user whose role is being defined.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.users.sourced_id in the same tenant; many enrollments, roles, profiles, or resource rows may reference one user.
- ddl
- user_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, user_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- user-alex-001
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- Production roles.user_sourced_id values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for roles.csv.
- anchor
- field-oneroster-roles-user-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
role_type
- csvName
- roleType
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Primary/secondary marker for a user's role inside one organization. Only one role per user/org should be primary for the same active date window.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: primary, secondary.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- role_type text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- primary
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for roles.csv.
- anchor
- field-oneroster-roles-role-type
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "primary",
"meaning": "This is the user's primary role in the organization/date window.",
"useWhen": "Use when one role should be treated as the main role for org-scoped lookups.",
"invalidWhen": "Invalid if another role is already primary for the same user/org/window under the local profile.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role_type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "secondary",
"meaning": "This is an additional non-primary role in the organization/date window.",
"useWhen": "Use when the user has more than one org role.",
"invalidWhen": "Invalid if the source intends the role to be primary.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role_type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]role
- csvName
- role
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- Organization-level role assigned to the user. It is separate from enrollments.role: this field says what the person is in an org, while enrollments.role says what they are in a class.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: aide, counselor, districtAdministrator, guardian, parent, principal, proctor, relative, siteAdministrator, student, systemAdministrator, teacher.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- role text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- teacher
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- Production roles.role values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for roles.csv.
- anchor
- field-oneroster-roles-role
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[
{
"value": "aide",
"meaning": "Aide role in an organization or resource audience.",
"useWhen": "Use for an aide/support role.",
"invalidWhen": "Invalid for teacher or administrator role rows.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "counselor",
"meaning": "Counselor role in an organization.",
"useWhen": "Use when the user is assigned as counselor.",
"invalidWhen": "Invalid for teacher or guardian role rows.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "districtAdministrator",
"meaning": "District administrator role.",
"useWhen": "Use for district-level administrative users.",
"invalidWhen": "Invalid for school-site administrator role rows.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "guardian",
"meaning": "Guardian relationship/role.",
"useWhen": "Use for a guardian associated with a student.",
"invalidWhen": "Invalid as a student or teacher role.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "parent",
"meaning": "Parent relationship/role.",
"useWhen": "Use for parent access or role rows.",
"invalidWhen": "Invalid as a teacher or student role.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "principal",
"meaning": "Principal role in an organization.",
"useWhen": "Use for the school principal role.",
"invalidWhen": "Invalid for district administrator role rows.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "proctor",
"meaning": "A user acting as a proctor.",
"useWhen": "Use when the user supervises assessment or class activity.",
"invalidWhen": "Invalid for a teacher unless the source explicitly sends proctor.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "relative",
"meaning": "Relative relationship/role.",
"useWhen": "Use when the source identifies a related person who is not parent/guardian.",
"invalidWhen": "Invalid as a school staff role.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "siteAdministrator",
"meaning": "School/site administrator role.",
"useWhen": "Use for site-level administrators.",
"invalidWhen": "Invalid for district-level administrator rows.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "student",
"meaning": "A learner/student role.",
"useWhen": "Use for student enrollments, role rows, or resource audiences.",
"invalidWhen": "Invalid for teachers, parents, or administrators.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "systemAdministrator",
"meaning": "System administrator role.",
"useWhen": "Use for platform or SIS system administration roles.",
"invalidWhen": "Invalid for ordinary school staff roles.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "teacher",
"meaning": "A teacher/instructor role.",
"useWhen": "Use for teacher enrollments, role rows, or resource audiences.",
"invalidWhen": "Invalid for student enrollments.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]begin_date
- csvName
- beginDate
- type
- date
- csvFormat
- Date
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The start date on which the role became active (inclusive).
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Use ISO 8601 calendar date YYYY-MM-DD.
- range
- ISO 8601 date.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- begin_date date. Nullability: nullable.
- indexPolicy
- No standalone index required; include begin_date in a composite index only for date-window queries such as active enrollments.
- cascadePolicy
- multiValueExample
- example
- 2026-08-15
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for roles.csv.
- anchor
- field-oneroster-roles-begin-date
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
end_date
- csvName
- endDate
- type
- date
- csvFormat
- Date
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The end date on which the role ceased to be active (exclusive).
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Use ISO 8601 calendar date YYYY-MM-DD.
- range
- ISO 8601 date.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- end_date date. Nullability: nullable.
- indexPolicy
- No standalone index required; include end_date in a composite index only for date-window queries such as active enrollments.
- cascadePolicy
- multiValueExample
- example
- 2027-06-01
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for roles.csv.
- anchor
- field-oneroster-roles-end-date
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
org_sourced_id
- csvName
- orgSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the Org within which the User has the assigned role.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.orgs.sourced_id in the same tenant; many courses or roles may reference one org.
- ddl
- org_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, org_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- org-north-valley-high
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for roles.csv.
- anchor
- field-oneroster-roles-org-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
user_profile_sourced_id
- csvName
- userProfileSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Identifier
- privacyTag
- PII: Identifier
- key
- meaning
- SourcedId of the UserProfile for the User.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- Optionally references one oneroster.user_profiles.sourced_id in the same tenant; many role rows may reference one user profile.
- ddl
- user_profile_sourced_id text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- Use index (tenant_id, user_profile_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- profile-alex-lms
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- Production roles.user_profile_sourced_id values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for roles.csv.
- anchor
- field-oneroster-roles-user-profile-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
oneroster.score_scales · Score Scales
- fileName
- scoreScales.csv
- schemaName
- ScoreScales
- sourceCaption
- The 'scoreScales.csv' file format and contents.
- purpose
- Use this table to preserve the scoring scale names and mapping syntax supplied by the source system.
- lifecycle
- Loaded before lineItemScoreScales.csv and resultScoreScales.csv rows that point at score scales.
- sourceClass
- 1EdTech pass-through with generated platform projection fields
- sourceBasis
- CSV fields, names, requiredness, formats, and values come from scoreScales.csv in OneRoster CSV Binding 1.2.1. tenant_id and import_batch_id are platform3 gap fills.
- primaryKey
- (tenant_id, sourced_id)
- anchor
- table-oneroster-score-scales
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-002-surface-boundary",
"title": "OITD-002 The 1EdTech surface is broad OneRoster",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-002-surface-boundary"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]relationships
[ "Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.", "Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.", "References one oneroster.orgs.sourced_id in the same tenant; many courses or roles may reference one org.", "References one oneroster.courses.sourced_id in the same tenant; many classes or course resources may reference one course.", "References one oneroster.classes.sourced_id in the same tenant; many dependent rows may reference one class." ]
constraints
[ "Rows are tenant-scoped by tenant_id.", "Rows are evidence-scoped by import_batch_id.", "OneRoster source columns preserve exact CSV field names through csvName and snake_case SQL column names.", "metadata.* extension headers are allowed by OITD-009 when they use the metadata namespace.", "Allowed values preserve exact 1EdTech spelling, punctuation, and spaces.", "Tenant-scoped foreign keys use NO ACTION/RESTRICT by default; OneRoster lifecycle changes are represented through imports/status rather than ON DELETE CASCADE." ]
indexes
[ "primary key (tenant_id, sourced_id)", "index (tenant_id, import_batch_id)", "index (tenant_id, sourced_id)", "index (tenant_id, org_sourced_id)", "index (tenant_id, course_sourced_id)", "index (tenant_id, class_sourced_id)", "index (tenant_id, status)", "index (tenant_id, date_last_modified)" ]
invalidExamples
[ "A row whose tenant_id differs from the JWT tenant_id claim.", "A generated row missing import_batch_id evidence.", "A required source field is blank in the mode where OneRoster requires it.", "An enum value differs by capitalization, spacing, or punctuation.", "A GUID Reference points to a row outside the tenant or absent from required files." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"import_batch_id": "orbatch_20260522_001",
"sourced_id": "score_scales-001",
"status": "active",
"date_last_modified": "2026-05-22T13:45:30.000Z",
"title": "Score Scales sample",
"type": "percent",
"org_sourced_id": "org-north-valley-high",
"course_sourced_id": "course-algebra-1",
"class_sourced_id": "class-algebra-1-a",
"score_scale_value": "\"{A:94},{B:84},{C:74}\""
}queries
[ "select * from oneroster.score_scales where tenant_id = $1 limit 20;", "select * from oneroster.score_scales where tenant_id = $1 and sourced_id = $2;" ]
Fields (11)
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-score-scales-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
import_batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Import/export evidence row that produced this generated OneRoster projection row.
- constraints
- Must pair with tenant_id to reference oneroster.import_batch(tenant_id, batch_id) and should be stable for all rows created by the same validated package.
- range
- Text domain pinned by this field's constraints.
- relationship
- Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.
- ddl
- import_batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, import_batch_id) on generated OneRoster tables.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Missing, points to a batch owned by another tenant, or does not match the package that supplied this row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 makes import/export batch evidence first-class.
- anchor
- field-oneroster-score-scales-import-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
}
]allowedValues
[]
sourced_id
- csvName
- sourcedId
- type
- text
- csvFormat
- GUID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- Natural key within tenant and table
- meaning
- Tenant-scoped OneRoster identifier for this score scales row.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object. Enforce uniqueness within tenant and table.
- range
- 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object.
- relationship
- Tenant-scoped OneRoster identifier for this score_scales row. Other tables may reference it according to the CSV dependency matrix.
- ddl
- sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Part of primary key (tenant_id, sourced_id); this is the target column for same-tenant references into oneroster.score_scales.
- cascadePolicy
- multiValueExample
- example
- score_scales-001
- invalidWhen
- Blank, duplicated within the same tenant and table, or changed between imports for the same logical object.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for scoreScales.csv.
- anchor
- field-oneroster-score-scales-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[]
status
- csvName
- status
- type
- text
- csvFormat
- Enumeration
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Must be one of the documented allowed values, preserving exact spelling and spaces. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- Allowed values: active, tobedeleted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- status text; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, status) on high-volume tables that expose active/tobedeleted filtering; pair with date_last_modified for delta replay.
- cascadePolicy
- multiValueExample
- example
- active
- invalidWhen
- Provided in a bulk file, missing in a delta file, or outside active/tobedeleted.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for scoreScales.csv.
- anchor
- field-oneroster-score-scales-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for score_scales.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for score_scales.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]date_last_modified
- csvName
- dateLastModified
- type
- timestamptz
- csvFormat
- DateTime
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Use ISO 8601 UTC resolution YYYY-MM-DDTHH:MM:SS.sssZ. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- ISO 8601 UTC timestamp at millisecond resolution.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- date_last_modified timestamptz; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, date_last_modified) when serving modifiedSince or delta-audit reads.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:45:30.000Z
- invalidWhen
- Provided in a bulk file, missing in a delta file, not ISO 8601 UTC, or earlier than a previous delta for the same sourcedId.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for scoreScales.csv.
- anchor
- field-oneroster-score-scales-date-last-modified
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[]
title
- csvName
- title
- type
- text
- csvFormat
- String
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- A human readable title for the score scale.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 visible characters when required; 0 to 255 when optional. Use a NOT NULL plus btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 1 to 255 visible characters when required; 0 to 255 when optional.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- title text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- Score Scales sample
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for scoreScales.csv.
- anchor
- field-oneroster-score-scales-title
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[]
type
- csvName
- type
- type
- text
- csvFormat
- String
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The type of score scaling e.g. percent.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 120 visible characters when the OneRoster field is not a closed enum. Use a NOT NULL plus btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 1 to 120 visible characters when the OneRoster field is not a closed enum.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- type text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- percent
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for scoreScales.csv.
- anchor
- field-oneroster-score-scales-type
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[]
org_sourced_id
- csvName
- orgSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The org for which the score scale is used.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.orgs.sourced_id in the same tenant; many courses or roles may reference one org.
- ddl
- org_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, org_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- org-north-valley-high
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for scoreScales.csv.
- anchor
- field-oneroster-score-scales-org-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[]
course_sourced_id
- csvName
- courseSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The course for which the score scale is used.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.courses.sourced_id in the same tenant; many classes or course resources may reference one course.
- ddl
- course_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, course_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- course-algebra-1
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for scoreScales.csv.
- anchor
- field-oneroster-score-scales-course-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[]
class_sourced_id
- csvName
- classSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The class for which the score scale is used.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.classes.sourced_id in the same tenant; many dependent rows may reference one class.
- ddl
- class_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, class_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- class-algebra-1-a
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for scoreScales.csv.
- anchor
- field-oneroster-score-scales-class-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[]
score_scale_value
- csvName
- scoreScaleValue
- type
- text
- csvFormat
- List of Strings
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- OneRoster score-scale mapping cell. Each {left:right} pair maps a source scale label or range to a target value and multiple mappings stay in the same CSV cell.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 2048 characters for the full CSV cell; each {label:value} mapping should be 1 to 255 visible characters. CSV list values must follow RFC4180 quoting rules when they contain commas.
- range
- Pattern examples: Pass:50. Other source values are valid when they follow the documented micro-syntax.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- score_scale_value text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Do not index the raw CSV cell for joins; build a documented helper view or expression index after RFC4180 token validation if a query path needs it.
- cascadePolicy
- multiValueExample
- Stored cell: "{A:94},{B:84},{C:74}"; parsed mappings: A -> 94, B -> 84, C -> 74.
- example
- "{A:94},{B:84},{C:74}"
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- Each mapping uses {left:right} syntax and multiple mappings stay in one RFC4180 CSV cell. Preserve the raw source text; parse into pairs only in validation/read helpers.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for scoreScales.csv.
- anchor
- field-oneroster-score-scales-score-scale-value
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]allowedValues
[
{
"value": "Pass:50",
"meaning": "Pattern example for scoreScaleValue: a scale label mapped to a numeric threshold.",
"useWhen": "Use only as an example of {label:value} syntax; real score scales may send multiple mappings such as {A:94},{B:84}.",
"invalidWhen": "Invalid if treated as the complete allowed vocabulary.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for score_scales.score_scale_value.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]oneroster.user_profiles · User Profiles
- fileName
- userProfiles.csv
- schemaName
- UserProfiles
- sourceCaption
- The userProfiles.csv file format and contents.
- purpose
- Use this table to exchange profile context for a user without flattening it into the user record.
- lifecycle
- Loaded after users.csv and the referenced course or class exists for the tenant.
- sourceClass
- 1EdTech pass-through with generated platform projection fields
- sourceBasis
- CSV fields, names, requiredness, formats, and values come from userProfiles.csv in OneRoster CSV Binding 1.2.1. tenant_id and import_batch_id are platform3 gap fills.
- primaryKey
- (tenant_id, sourced_id)
- anchor
- table-oneroster-user-profiles
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-002-surface-boundary",
"title": "OITD-002 The 1EdTech surface is broad OneRoster",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-002-surface-boundary"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]relationships
[ "Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.", "Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.", "References one oneroster.users.sourced_id in the same tenant; many enrollments, roles, profiles, or resource rows may reference one user." ]
constraints
[ "Rows are tenant-scoped by tenant_id.", "Rows are evidence-scoped by import_batch_id.", "OneRoster source columns preserve exact CSV field names through csvName and snake_case SQL column names.", "metadata.* extension headers are allowed by OITD-009 when they use the metadata namespace.", "Allowed values preserve exact 1EdTech spelling, punctuation, and spaces.", "Tenant-scoped foreign keys use NO ACTION/RESTRICT by default; OneRoster lifecycle changes are represented through imports/status rather than ON DELETE CASCADE." ]
indexes
[ "primary key (tenant_id, sourced_id)", "index (tenant_id, import_batch_id)", "index (tenant_id, sourced_id)", "index (tenant_id, user_sourced_id)", "index (tenant_id, status)", "index (tenant_id, date_last_modified)" ]
invalidExamples
[ "A row whose tenant_id differs from the JWT tenant_id claim.", "A generated row missing import_batch_id evidence.", "A required source field is blank in the mode where OneRoster requires it.", "An enum value differs by capitalization, spacing, or punctuation.", "A GUID Reference points to a row outside the tenant or absent from required files." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"import_batch_id": "orbatch_20260522_001",
"sourced_id": "user_profiles-001",
"status": "active",
"date_last_modified": "2026-05-22T13:45:30.000Z",
"user_sourced_id": "user-alex-001",
"profile_type": "lms-login",
"vendor_id": "vendor-north-apps",
"application_id": "app-practice-portal",
"description": "Login profile for the North Valley LMS.",
"credential_type": "saml-subject",
"username": "alex.example.lms",
"password": "<redacted>"
}queries
[ "select * from oneroster.user_profiles where tenant_id = $1 limit 20;", "select * from oneroster.user_profiles where tenant_id = $1 and sourced_id = $2;" ]
Fields (13)
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-user-profiles-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
import_batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Import/export evidence row that produced this generated OneRoster projection row.
- constraints
- Must pair with tenant_id to reference oneroster.import_batch(tenant_id, batch_id) and should be stable for all rows created by the same validated package.
- range
- Text domain pinned by this field's constraints.
- relationship
- Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.
- ddl
- import_batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, import_batch_id) on generated OneRoster tables.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Missing, points to a batch owned by another tenant, or does not match the package that supplied this row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 makes import/export batch evidence first-class.
- anchor
- field-oneroster-user-profiles-import-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
}
]allowedValues
[]
sourced_id
- csvName
- sourcedId
- type
- text
- csvFormat
- GUID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- Identifier
- privacyTag
- PII: Identifier
- key
- Natural key within tenant and table
- meaning
- Tenant-scoped OneRoster identifier for this user profiles row.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object. Enforce uniqueness within tenant and table.
- range
- 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object.
- relationship
- Tenant-scoped OneRoster identifier for this user_profiles row. Other tables may reference it according to the CSV dependency matrix.
- ddl
- sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Part of primary key (tenant_id, sourced_id); this is the target column for same-tenant references into oneroster.user_profiles.
- cascadePolicy
- multiValueExample
- example
- user_profiles-001
- invalidWhen
- Blank, duplicated within the same tenant and table, or changed between imports for the same logical object.
- edgeCases
- Production user_profiles.sourced_id values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for userProfiles.csv.
- anchor
- field-oneroster-user-profiles-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
status
- csvName
- status
- type
- text
- csvFormat
- Enumeration
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Must be one of the documented allowed values, preserving exact spelling and spaces. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- Allowed values: active, tobedeleted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- status text; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, status) on high-volume tables that expose active/tobedeleted filtering; pair with date_last_modified for delta replay.
- cascadePolicy
- multiValueExample
- example
- active
- invalidWhen
- Provided in a bulk file, missing in a delta file, or outside active/tobedeleted.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for userProfiles.csv.
- anchor
- field-oneroster-user-profiles-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for user_profiles.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for user_profiles.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]date_last_modified
- csvName
- dateLastModified
- type
- timestamptz
- csvFormat
- DateTime
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Use ISO 8601 UTC resolution YYYY-MM-DDTHH:MM:SS.sssZ. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- ISO 8601 UTC timestamp at millisecond resolution.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- date_last_modified timestamptz; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, date_last_modified) when serving modifiedSince or delta-audit reads.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:45:30.000Z
- invalidWhen
- Provided in a bulk file, missing in a delta file, not ISO 8601 UTC, or earlier than a previous delta for the same sourcedId.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for userProfiles.csv.
- anchor
- field-oneroster-user-profiles-date-last-modified
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
user_sourced_id
- csvName
- userSourcedId
- type
- text
- csvFormat
- GUID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- Identifier
- privacyTag
- PII: Identifier
- key
- meaning
- Unique ID for the corresponding user.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Enforce uniqueness within tenant and table.
- range
- OneRoster sourcedId/GUID string within the tenant.
- relationship
- References one oneroster.users.sourced_id in the same tenant; many enrollments, roles, profiles, or resource rows may reference one user.
- ddl
- user_sourced_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, user_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- user-alex-001
- invalidWhen
- Missing when required, malformed for its OneRoster format/domain, or attached to the wrong tenant/user row.
- edgeCases
- Production user_profiles.user_sourced_id values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for userProfiles.csv.
- anchor
- field-oneroster-user-profiles-user-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
profile_type
- csvName
- profileType
- type
- text
- csvFormat
- String
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The type of user profile. This should be a human readable label that has some significance in the context of the related system, app, tool, etc.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 120 visible characters. Use a NOT NULL plus btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 1 to 120 visible characters.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- profile_type text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- lms-login
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for userProfiles.csv.
- anchor
- field-oneroster-user-profiles-profile-type
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
vendor_id
- csvName
- vendorId
- type
- text
- csvFormat
- String
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The unique identifier for the vendor of the system, tool, app, etc. which requires the use of this user profile.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 0 to 255 printable characters. Use a NOT NULL plus btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 255 printable characters.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- vendor_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- vendor-north-apps
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for userProfiles.csv.
- anchor
- field-oneroster-user-profiles-vendor-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
application_id
- csvName
- applicationId
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- The unique identifier for the vendor of the system, tool, app, etc. which requires the use of this account.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 255 printable characters. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 255 printable characters.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- application_id text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- app-practice-portal
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for userProfiles.csv.
- anchor
- field-oneroster-user-profiles-application-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
description
- csvName
- description
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- A human readable description of the use of the account. This should not contain any security information for access to the account.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 1000 visible characters; must not include credentials or security secrets. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 1000 visible characters; must not include credentials or security secrets.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- description text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- Login profile for the North Valley LMS.
- invalidWhen
- Missing when required, malformed for its OneRoster format, or inconsistent with the field-level relationship and import mode.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for userProfiles.csv.
- anchor
- field-oneroster-user-profiles-description
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
credential_type
- csvName
- credentialType
- type
- text
- csvFormat
- String
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- Credential
- privacyTag
- PII: Credential
- key
- meaning
- The type of credentials for the user profile. This should be indicative of when this credential should be used.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 120 visible characters. Use a NOT NULL plus btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 1 to 120 visible characters.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- credential_type text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- saml-subject
- invalidWhen
- Missing when required, malformed for its OneRoster format/domain, or attached to the wrong tenant/user row.
- edgeCases
- Production user_profiles.credential_type values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for userProfiles.csv.
- anchor
- field-oneroster-user-profiles-credential-type
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
username
- csvName
- username
- type
- text
- csvFormat
- String
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- The username for this profile.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; trim surrounding whitespace; recommended CHECK length(btrim(username)) between 1 and 255. Use a NOT NULL plus btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 1 to 255 printable characters; trim surrounding whitespace; recommended CHECK length(btrim(username)) between 1 and 255.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- username text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- alex.example.lms
- invalidWhen
- Missing when required, malformed for its OneRoster format/domain, or attached to the wrong tenant/user row.
- edgeCases
- Production user_profiles.username values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for userProfiles.csv.
- anchor
- field-oneroster-user-profiles-username
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
password
- csvName
- password
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Credential
- privacyTag
- PII: Credential
- key
- meaning
- The password for the user. This may or may not be an encrypted string. If encrypted, the processing system must be aware of the encryption method.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 1024 characters when supplied; store only the source-provided value required for exchange and redact it from logs, examples, and Problems. Use a nullable length <= 1024 CHECK and redact on every read path that can be logged. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 1024 characters when supplied; store only the source-provided value required for exchange and redact it from logs, examples, and Problems.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- password text; Use a nullable length <= 1024 CHECK and redact on every read path that can be logged. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- <redacted>
- invalidWhen
- Over 1024 characters, supplied where the source profile forbids credential exchange, or returned from an ordinary roster read.
- edgeCases
- This is a credential-bearing exchange field. Store only when the source contract requires it, redact from HTML examples/logs/Problems, and never return it from ordinary roster read APIs.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for userProfiles.csv.
- anchor
- field-oneroster-user-profiles-password
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
oneroster.user_resources · User Resources
- fileName
- userResources.csv
- schemaName
- UserResources
- sourceCaption
- The 'userResources.csv' file format and contents.
- purpose
- Use this table to answer which resource is assigned or available to a user.
- lifecycle
- Loaded after users.csv, resources.csv, and optional classes.csv dependencies are valid.
- sourceClass
- 1EdTech pass-through with generated platform projection fields
- sourceBasis
- CSV fields, names, requiredness, formats, and values come from userResources.csv in OneRoster CSV Binding 1.2.1. tenant_id and import_batch_id are platform3 gap fills.
- primaryKey
- (tenant_id, sourced_id)
- anchor
- table-oneroster-user-resources
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-002-surface-boundary",
"title": "OITD-002 The 1EdTech surface is broad OneRoster",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-002-surface-boundary"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]relationships
[ "Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.", "Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.", "References one oneroster.users.sourced_id in the same tenant; many enrollments, roles, profiles, or resource rows may reference one user.", "References one oneroster.orgs.sourced_id in the same tenant; many courses or roles may reference one org.", "References one oneroster.classes.sourced_id in the same tenant; many dependent rows may reference one class.", "References one oneroster.resources.sourced_id in the same tenant; many join rows may reference one resource." ]
constraints
[ "Rows are tenant-scoped by tenant_id.", "Rows are evidence-scoped by import_batch_id.", "OneRoster source columns preserve exact CSV field names through csvName and snake_case SQL column names.", "metadata.* extension headers are allowed by OITD-009 when they use the metadata namespace.", "Allowed values preserve exact 1EdTech spelling, punctuation, and spaces.", "Tenant-scoped foreign keys use NO ACTION/RESTRICT by default; OneRoster lifecycle changes are represented through imports/status rather than ON DELETE CASCADE." ]
indexes
[ "primary key (tenant_id, sourced_id)", "index (tenant_id, import_batch_id)", "index (tenant_id, sourced_id)", "index (tenant_id, user_sourced_id)", "index (tenant_id, org_sourced_id)", "index (tenant_id, class_sourced_id)", "index (tenant_id, resource_sourced_id)", "index (tenant_id, status)", "index (tenant_id, date_last_modified)" ]
invalidExamples
[ "A row whose tenant_id differs from the JWT tenant_id claim.", "A generated row missing import_batch_id evidence.", "A required source field is blank in the mode where OneRoster requires it.", "An enum value differs by capitalization, spacing, or punctuation.", "A GUID Reference points to a row outside the tenant or absent from required files." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"import_batch_id": "orbatch_20260522_001",
"sourced_id": "user_resources-001",
"status": "active",
"date_last_modified": "2026-05-22T13:45:30.000Z",
"user_sourced_id": "user-alex-001",
"org_sourced_id": "org-north-valley-high",
"class_sourced_id": "class-algebra-1-a",
"resource_sourced_id": "resource-001"
}queries
[ "select * from oneroster.user_resources where tenant_id = $1 limit 20;", "select * from oneroster.user_resources where tenant_id = $1 and sourced_id = $2;" ]
Fields (9)
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-user-resources-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
import_batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Import/export evidence row that produced this generated OneRoster projection row.
- constraints
- Must pair with tenant_id to reference oneroster.import_batch(tenant_id, batch_id) and should be stable for all rows created by the same validated package.
- range
- Text domain pinned by this field's constraints.
- relationship
- Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.
- ddl
- import_batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, import_batch_id) on generated OneRoster tables.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Missing, points to a batch owned by another tenant, or does not match the package that supplied this row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 makes import/export batch evidence first-class.
- anchor
- field-oneroster-user-resources-import-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
}
]allowedValues
[]
sourced_id
- csvName
- sourcedId
- type
- text
- csvFormat
- GUID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- Natural key within tenant and table
- meaning
- Tenant-scoped OneRoster identifier for this user resources row.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object. Enforce uniqueness within tenant and table.
- range
- 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object.
- relationship
- Tenant-scoped OneRoster identifier for this user_resources row. Other tables may reference it according to the CSV dependency matrix.
- ddl
- sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Part of primary key (tenant_id, sourced_id); this is the target column for same-tenant references into oneroster.user_resources.
- cascadePolicy
- multiValueExample
- example
- user_resources-001
- invalidWhen
- Blank, duplicated within the same tenant and table, or changed between imports for the same logical object.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for userResources.csv.
- anchor
- field-oneroster-user-resources-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
status
- csvName
- status
- type
- text
- csvFormat
- Enumeration
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Must be one of the documented allowed values, preserving exact spelling and spaces. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- Allowed values: active, tobedeleted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- status text; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, status) on high-volume tables that expose active/tobedeleted filtering; pair with date_last_modified for delta replay.
- cascadePolicy
- multiValueExample
- example
- active
- invalidWhen
- Provided in a bulk file, missing in a delta file, or outside active/tobedeleted.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for userResources.csv.
- anchor
- field-oneroster-user-resources-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for user_resources.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for user_resources.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]date_last_modified
- csvName
- dateLastModified
- type
- timestamptz
- csvFormat
- DateTime
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Use ISO 8601 UTC resolution YYYY-MM-DDTHH:MM:SS.sssZ. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- ISO 8601 UTC timestamp at millisecond resolution.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- date_last_modified timestamptz; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, date_last_modified) when serving modifiedSince or delta-audit reads.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:45:30.000Z
- invalidWhen
- Provided in a bulk file, missing in a delta file, not ISO 8601 UTC, or earlier than a previous delta for the same sourcedId.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for userResources.csv.
- anchor
- field-oneroster-user-resources-date-last-modified
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
user_sourced_id
- csvName
- userSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- Identifier
- privacyTag
- PII: Identifier
- key
- meaning
- SourcedId of the user who will have access to this resource.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.users.sourced_id in the same tenant; many enrollments, roles, profiles, or resource rows may reference one user.
- ddl
- user_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, user_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- user-alex-001
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- Production user_resources.user_sourced_id values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for userResources.csv.
- anchor
- field-oneroster-user-resources-user-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
org_sourced_id
- csvName
- orgSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the reference Organization.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.orgs.sourced_id in the same tenant; many courses or roles may reference one org.
- ddl
- org_sourced_id text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- Use index (tenant_id, org_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- org-north-valley-high
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for userResources.csv.
- anchor
- field-oneroster-user-resources-org-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
class_sourced_id
- csvName
- classSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the reference Class.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.classes.sourced_id in the same tenant; many dependent rows may reference one class.
- ddl
- class_sourced_id text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- Use index (tenant_id, class_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- class-algebra-1-a
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for userResources.csv.
- anchor
- field-oneroster-user-resources-class-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
resource_sourced_id
- csvName
- resourceSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- SourcedId of the Resource associated with the User.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- References one oneroster.resources.sourced_id in the same tenant; many join rows may reference one resource.
- ddl
- resource_sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, resource_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- resource-001
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for userResources.csv.
- anchor
- field-oneroster-user-resources-resource-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
}
]allowedValues
[]
oneroster.users · Users
- fileName
- users.csv
- schemaName
- Users
- sourceCaption
- The 'users.csv' file format and contents.
- purpose
- Use this table to preserve OneRoster person identity fields and relationships while treating names, usernames, identifiers, agents, and grades as sensitive roster data.
- lifecycle
- Loaded before demographics, enrollments, roles, userProfiles, userResources, and results rows that reference users.
- sourceClass
- 1EdTech pass-through with generated platform projection fields
- sourceBasis
- CSV fields, names, requiredness, formats, and values come from users.csv in OneRoster CSV Binding 1.2.1. tenant_id and import_batch_id are platform3 gap fills.
- primaryKey
- (tenant_id, sourced_id)
- anchor
- table-oneroster-users
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-002-surface-boundary",
"title": "OITD-002 The 1EdTech surface is broad OneRoster",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-002-surface-boundary"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]relationships
[ "Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.", "Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.", "Optionally references one oneroster.orgs.sourced_id in the same tenant; many users may identify the same primary org." ]
constraints
[ "Rows are tenant-scoped by tenant_id.", "Rows are evidence-scoped by import_batch_id.", "OneRoster source columns preserve exact CSV field names through csvName and snake_case SQL column names.", "metadata.* extension headers are allowed by OITD-009 when they use the metadata namespace.", "Allowed values preserve exact 1EdTech spelling, punctuation, and spaces.", "Tenant-scoped foreign keys use NO ACTION/RESTRICT by default; OneRoster lifecycle changes are represented through imports/status rather than ON DELETE CASCADE." ]
indexes
[ "primary key (tenant_id, sourced_id)", "index (tenant_id, import_batch_id)", "index (tenant_id, sourced_id)", "index (tenant_id, primary_org_sourced_id)", "index (tenant_id, status)", "index (tenant_id, date_last_modified)" ]
invalidExamples
[ "A row whose tenant_id differs from the JWT tenant_id claim.", "A generated row missing import_batch_id evidence.", "A required source field is blank in the mode where OneRoster requires it.", "An enum value differs by capitalization, spacing, or punctuation.", "A GUID Reference points to a row outside the tenant or absent from required files." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"import_batch_id": "orbatch_20260522_001",
"sourced_id": "users-001",
"status": "active",
"date_last_modified": "2026-05-22T13:45:30.000Z",
"enabled_user": "false",
"username": "alex.example",
"user_ids": "\"{LDAP:alex.example},{LTI:learner-001}\"",
"given_name": "Alex",
"family_name": "Example",
"middle_name": "River",
"identifier": "sis-000123",
"email": "alex.example@example.invalid",
"sms": "+15555550101",
"phone": "+15555550100",
"agent_sourced_ids": "\"user-parent-001,user-guardian-001\"",
"grades": "\"09,10\"",
"password": "<redacted>",
"user_master_identifier": "muid-nv-000123",
"preferred_given_name": "Lex",
"preferred_middle_name": "R.",
"preferred_family_name": "Example",
"primary_org_sourced_id": "org-north-valley-high",
"pronouns": "they/them/theirs"
}queries
[ "select * from oneroster.users where tenant_id = $1 limit 20;", "select * from oneroster.users where tenant_id = $1 and sourced_id = $2;" ]
Fields (24)
tenant_id
- csvName
- type
- uuid
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Shared platform tenant that owns this OneRoster row.
- constraints
- Must reference platform.tenant(tenant_id), must equal the authenticated tenant_id claim, and must be part of every tenant-scoped uniqueness check.
- range
- PostgreSQL UUID value.
- relationship
- Belongs to exactly one platform.tenant. One tenant has many OneRoster rows.
- ddl
- tenant_id uuid not null. Nullability: NOT NULL.
- indexPolicy
- Included in tenant-scoped primary keys, foreign keys, and lookup indexes.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Missing, malformed, references a nonexistent tenant, or crosses the authenticated tenant boundary.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-005 requires tenant isolation on storage, validation, and reads.
- anchor
- field-oneroster-users-tenant-id
itds
[
{
"id": "oitd-004-module-schema-platform-schema",
"title": "OITD-004 Store OneRoster records in oneroster.* and shared concerns in platform.*",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-004-module-schema-platform-schema"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]allowedValues
[]
import_batch_id
- csvName
- type
- text
- csvFormat
- Platform field
- required
- Yes
- nullability
- Required by platform3 persistence; not present in the OneRoster CSV source file.
- pii
- No
- privacyTag
- PII: No
- key
- Composite key
- meaning
- Import/export evidence row that produced this generated OneRoster projection row.
- constraints
- Must pair with tenant_id to reference oneroster.import_batch(tenant_id, batch_id) and should be stable for all rows created by the same validated package.
- range
- Text domain pinned by this field's constraints.
- relationship
- Belongs to exactly one oneroster.import_batch through (tenant_id, import_batch_id) -> (tenant_id, batch_id). One batch can create many generated table rows.
- ddl
- import_batch_id text not null. Nullability: NOT NULL.
- indexPolicy
- Use index (tenant_id, import_batch_id) on generated OneRoster tables.
- cascadePolicy
- Use NO ACTION/RESTRICT; do not cascade-delete audit-significant OneRoster rows.
- multiValueExample
- example
- orbatch_20260522_001
- invalidWhen
- Missing, points to a batch owned by another tenant, or does not match the package that supplied this row.
- edgeCases
- This field is a platform gap fill. Do not export it as a OneRoster CSV column.
- sourceClass
- Platform gap fill
- sourceBasis
- OITD-006 makes import/export batch evidence first-class.
- anchor
- field-oneroster-users-import-batch-id
itds
[
{
"id": "oitd-006-import-export-evidence",
"title": "OITD-006 Import and export batches are first-class evidence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
}
]allowedValues
[]
sourced_id
- csvName
- sourcedId
- type
- text
- csvFormat
- GUID
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- Identifier
- privacyTag
- PII: Identifier
- key
- Natural key within tenant and table
- meaning
- Tenant-scoped OneRoster identifier for this users row.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object. Enforce uniqueness within tenant and table.
- range
- 1 to 255 printable characters; unique within (tenant_id, table) and stable across imports for the same logical object.
- relationship
- Tenant-scoped OneRoster identifier for this users row. Other tables may reference it according to the CSV dependency matrix.
- ddl
- sourced_id text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- Part of primary key (tenant_id, sourced_id); this is the target column for same-tenant references into oneroster.users.
- cascadePolicy
- multiValueExample
- example
- users-001
- invalidWhen
- Blank, duplicated within the same tenant and table, or changed between imports for the same logical object.
- edgeCases
- Production users.sourced_id values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for users.csv.
- anchor
- field-oneroster-users-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
status
- csvName
- status
- type
- text
- csvFormat
- Enumeration
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Must be one of the documented allowed values, preserving exact spelling and spaces. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- Allowed values: active, tobedeleted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- status text; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, status) on high-volume tables that expose active/tobedeleted filtering; pair with date_last_modified for delta replay.
- cascadePolicy
- multiValueExample
- example
- active
- invalidWhen
- Provided in a bulk file, missing in a delta file, or outside active/tobedeleted.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for users.csv.
- anchor
- field-oneroster-users-status
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for users.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for users.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]date_last_modified
- csvName
- dateLastModified
- type
- timestamptz
- csvFormat
- DateTime
- required
- Yes for Delta
- nullability
- Conditionally required: required in delta files, and must be empty in bulk files.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files.
- constraints
- Conditionally required: required in delta files, and must be empty in bulk files. Use ISO 8601 UTC resolution YYYY-MM-DDTHH:MM:SS.sssZ. Bulk imports must not provide a value; delta imports use this field to express row lifecycle.
- range
- ISO 8601 UTC timestamp at millisecond resolution.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- date_last_modified timestamptz; keep nullable in DDL and enforce bulk-vs-delta requiredness in source validation. Nullability: nullable storage; source validation requires a value for delta packages and forbids it for bulk packages.
- indexPolicy
- Use index (tenant_id, date_last_modified) when serving modifiedSince or delta-audit reads.
- cascadePolicy
- multiValueExample
- example
- 2026-05-22T13:45:30.000Z
- invalidWhen
- Provided in a bulk file, missing in a delta file, not ISO 8601 UTC, or earlier than a previous delta for the same sourcedId.
- edgeCases
- Bulk mode intentionally omits status/dateLastModified; do not backfill those fields during bulk import just to satisfy SQL shape.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for users.csv.
- anchor
- field-oneroster-users-date-last-modified
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
enabled_user
- csvName
- enabledUser
- type
- text
- csvFormat
- Enumeration
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- No
- privacyTag
- PII: No
- key
- meaning
- Source-system account availability flag for the user row. true means the source considers the user enabled; false preserves the roster identity but tells platform3 not to treat the user as eligible for new sign-in or new user-initiated roster actions unless a local admin override exists.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. Must be one of the documented allowed values, preserving exact spelling and spaces.
- range
- Allowed values: true, false.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- enabled_user text not null. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- false
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- enabledUser=false keeps the user row for roster history and references. It is not a delta delete and must not cascade-delete enrollments, roles, results, or demographics.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for users.csv.
- anchor
- field-oneroster-users-enabled-user
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[
{
"value": "true",
"meaning": "The source system says this user account is enabled.",
"useWhen": "Use when roster identity and ordinary user access may proceed under local administration rules.",
"invalidWhen": "Invalid when the source has disabled the account or when a local suspension should prevent new sign-in/actions.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for users.enabled_user.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source system keeps the user row but disables account access.",
"useWhen": "Use to preserve the user's roster history while preventing new user-initiated access or writes unless an admin override is documented.",
"invalidWhen": "Invalid if treated as a row deletion or if existing enrollments/results are cascaded away.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for users.enabled_user.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]username
- csvName
- username
- type
- text
- csvFormat
- String
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- Credential
- privacyTag
- PII: Credential
- key
- meaning
- User name.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 255 printable characters; trim surrounding whitespace; recommended CHECK length(btrim(username)) between 1 and 255. Use a NOT NULL plus btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 1 to 255 printable characters; trim surrounding whitespace; recommended CHECK length(btrim(username)) between 1 and 255.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- username text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- alex.example
- invalidWhen
- Missing when required, malformed for its OneRoster format/domain, or attached to the wrong tenant/user row.
- edgeCases
- Production users.username values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for users.csv.
- anchor
- field-oneroster-users-username
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
user_ids
- csvName
- userIds
- type
- text
- csvFormat
- List of Strings
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Identifier
- privacyTag
- PII: Identifier
- key
- meaning
- External machine-readable ID (e.g. LDAP id, LTI id) for this user. The ID must be accompanied by a type to indicate the nature of the Identifier. The Type and ID values are enclosed in '{}' with a colon used to separate the values. If more than one userId is needed, use double quotes, and separate with commas (per [RFC4180]). Examples: {LDAP:Id} and "{LDAP:Id},{LTI:Id},{Fed:Id}"
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 2048 characters for the full CSV cell; each {Type:Id} token should be 1 to 255 visible characters after stripping braces. CSV list values must follow RFC4180 quoting rules when they contain commas.
- range
- Pattern examples: LDAP:Id. Other source values are valid when they follow the documented micro-syntax.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- user_ids text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- Do not index the raw CSV cell for joins; build a documented helper view or expression index after RFC4180 token validation if a query path needs it.
- cascadePolicy
- multiValueExample
- Stored cell: "{LDAP:alex.example},{LTI:learner-001}"; parsed tokens: {LDAP:alex.example} and {LTI:learner-001}; do not treat LDAP/LTI/Fed as a closed vocabulary.
- example
- "{LDAP:alex.example},{LTI:learner-001}"
- invalidWhen
- Value is not one of the documented allowed values or uses different capitalization, punctuation, or spacing.
- edgeCases
- This column is stored as the raw RFC4180 CSV cell in the generated projection. Each token uses the {Type:Id} micro-syntax such as {LDAP:alex.example}; split and validate tokens in a helper view before search or joins, and never treat LDAP/LTI/Fed as the complete vocabulary.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for users.csv.
- anchor
- field-oneroster-users-user-ids
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[
{
"value": "LDAP:Id",
"meaning": "Pattern example for userIds: an identifier type and identifier separated by a colon.",
"useWhen": "Use only as an example of the {Type:Id} pattern, not as the only allowed value.",
"invalidWhen": "Invalid if treated as the complete vocabulary.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for users.user_ids.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]given_name
- csvName
- givenName
- type
- text
- csvFormat
- String
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- User's first name.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 200 visible characters when required; no control characters; preserve source spelling and diacritics if the database collation supports them. Use a NOT NULL plus btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 1 to 200 visible characters when required; no control characters; preserve source spelling and diacritics if the database collation supports them.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- given_name text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- Alex
- invalidWhen
- Missing when required, over 200 characters, contains control characters, or is assigned to the wrong person row.
- edgeCases
- Production users.given_name values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for users.csv.
- anchor
- field-oneroster-users-given-name
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
family_name
- csvName
- familyName
- type
- text
- csvFormat
- String
- required
- Yes
- nullability
- Required by OneRoster validation; persisted valid rows must contain a value.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- User's surname.
- constraints
- Required by OneRoster validation; persisted valid rows must contain a value. 1 to 200 visible characters when required; no control characters; preserve source spelling and spacing. Use a NOT NULL plus btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 1 to 200 visible characters when required; no control characters; preserve source spelling and spacing.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- family_name text not null; Use a NOT NULL plus btrim-length CHECK matching the domain. Nullability: NOT NULL.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- Example
- invalidWhen
- Missing when required, over 200 characters, contains control characters, or is assigned to the wrong person row.
- edgeCases
- Production users.family_name values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for users.csv.
- anchor
- field-oneroster-users-family-name
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
middle_name
- csvName
- middleName
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- User's middle name(s). If more than one then they are separated by a space.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 200 visible characters; space-separated middle names are permitted. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 200 visible characters; space-separated middle names are permitted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- middle_name text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- River
- invalidWhen
- Missing when required, over 200 characters, contains control characters, or is assigned to the wrong person row.
- edgeCases
- Production users.middle_name values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for users.csv.
- anchor
- field-oneroster-users-middle-name
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
identifier
- csvName
- identifier
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Identifier
- privacyTag
- PII: Identifier
- key
- meaning
- Identifier for the user with a human readable meaning.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 255 visible characters; unique only when the source profile says it is unique; do not use as the primary key. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 255 visible characters; unique only when the source profile says it is unique; do not use as the primary key.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- identifier text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- sis-000123
- invalidWhen
- Missing when required, over 255 characters, duplicated where the source profile guarantees uniqueness, or used as the tenant-scoped primary key.
- edgeCases
- Production users.identifier values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for users.csv.
- anchor
- field-oneroster-users-identifier
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
email
- csvName
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- Email address for the User.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. Maximum 320 characters; must contain one @ and no spaces when present; recommended CHECK email ~* '^[^@\s]+@[^@\s]+\.[^@\s]+$'. Use a nullable email-format CHECK plus length <= 320. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- Maximum 320 characters; must contain one @ and no spaces when present; recommended CHECK email ~* '^[^@\s]+@[^@\s]+\.[^@\s]+$'.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- email text; Use a nullable email-format CHECK plus length <= 320. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- alex.example@example.invalid
- invalidWhen
- Missing when required, over 320 characters, has no @, contains whitespace, or fails the email-format CHECK.
- edgeCases
- Production users.email values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for users.csv.
- anchor
- field-oneroster-users-email
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
sms
- csvName
- sms
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- SMS address for the User.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 8 to 32 characters when present; use the same E.164-compatible shape as phone because OneRoster treats sms as an addressable phone/SMS endpoint. Use a nullable E.164-compatible CHECK plus length <= 32. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 8 to 32 characters when present; use the same E.164-compatible shape as phone because OneRoster treats sms as an addressable phone/SMS endpoint.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- sms text; Use a nullable E.164-compatible CHECK plus length <= 32. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- +15555550101
- invalidWhen
- Missing when required, over 32 characters, contains letters, or fails the E.164-compatible phone CHECK.
- edgeCases
- Production users.sms values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for users.csv.
- anchor
- field-oneroster-users-sms
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
phone
- csvName
- phone
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- Phone number for the User.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 8 to 32 characters when present; recommended E.164-compatible CHECK phone ~ '^\+?[0-9][0-9 .()\-]{6,30}[0-9]$'. Use a nullable E.164-compatible CHECK plus length <= 32. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 8 to 32 characters when present; recommended E.164-compatible CHECK phone ~ '^\+?[0-9][0-9 .()\-]{6,30}[0-9]$'.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- phone text; Use a nullable E.164-compatible CHECK plus length <= 32. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- +15555550100
- invalidWhen
- Missing when required, over 32 characters, contains letters, or fails the E.164-compatible phone CHECK.
- edgeCases
- Production users.phone values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for users.csv.
- anchor
- field-oneroster-users-phone
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
agent_sourced_ids
- csvName
- agentSourcedIds
- type
- text
- csvFormat
- List of GUID References
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Identifier
- privacyTag
- PII: Identifier
- key
- meaning
- SourcedIds of the Users to which this user has a relationship. If multiple IDs are required then use double quotes and separate with commas. Note: In most cases this will be for indicating parental relationships.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 2048 characters for the full CSV cell; each sourcedId token should be 1 to 255 visible characters. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 0 to 2048 characters for the full CSV cell; each sourcedId token should be 1 to 255 visible characters.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- agent_sourced_ids text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- Do not index the raw CSV cell for joins; build a documented helper view or expression index after RFC4180 token validation if a query path needs it.
- cascadePolicy
- multiValueExample
- Stored cell: "user-parent-001,user-guardian-001"; parse each token before joining to users in the same tenant.
- example
- "user-parent-001,user-guardian-001"
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- This column is stored as raw CSV text containing one or more users.sourced_id tokens. Use RFC4180 parsing, then validate each token against oneroster.users for the same tenant before joining parent/guardian/agent relationships.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for users.csv.
- anchor
- field-oneroster-users-agent-sourced-ids
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
grades
- csvName
- grades
- type
- text
- csvFormat
- List of Strings
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- Grade(s) for which a user with role 'student' is enrolled. The permitted vocabulary should be agreed as part of the definition of the usage of this specification.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 512 characters for the full CSV cell; each grade token should be a CEDS-compatible grade-level code such as 09, 10, PK, or KG. CSV list values must follow RFC4180 quoting rules when they contain commas.
- range
- 0 to 512 characters for the full CSV cell; each grade token should be a CEDS-compatible grade-level code such as 09, 10, PK, or KG.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- grades text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- Do not index the raw CSV cell for joins; build a documented helper view or expression index after RFC4180 token validation if a query path needs it.
- cascadePolicy
- multiValueExample
- Stored cell example: "09,10"; parse as an RFC4180 list before validation, search, or joins.
- example
- "09,10"
- invalidWhen
- Missing when required, malformed for its OneRoster format/domain, or attached to the wrong tenant/user row.
- edgeCases
- OneRoster leaves grade vocabulary to the profile; platform3 treats each token as a CEDS-compatible grade-level code where possible. The raw CSV cell is stored unchanged, and local Alpha restrictions must be documented separately.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for users.csv.
- anchor
- field-oneroster-users-grades
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
password
- csvName
- password
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Credential
- privacyTag
- PII: Credential
- key
- meaning
- The password for the user. This may or may not be an encrypted string. If encrypted the processing system must be aware of the encryption method.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 1024 characters when supplied; store only the source-provided value required for exchange and redact it from logs, examples, and Problems. Use a nullable length <= 1024 CHECK and redact on every read path that can be logged. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 1024 characters when supplied; store only the source-provided value required for exchange and redact it from logs, examples, and Problems.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- password text; Use a nullable length <= 1024 CHECK and redact on every read path that can be logged. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- <redacted>
- invalidWhen
- Over 1024 characters, supplied where the source profile forbids credential exchange, or returned from an ordinary roster read.
- edgeCases
- This is a credential-bearing exchange field. Store only when the source contract requires it, redact from HTML examples/logs/Problems, and never return it from ordinary roster read APIs.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for users.csv.
- anchor
- field-oneroster-users-password
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
}
]allowedValues
[]
user_master_identifier
- csvName
- userMasterIdentifier
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Identifier
- privacyTag
- PII: Identifier
- key
- meaning
- The master identifier that could be used to provide globally unique identification of the user across all of the tools, systems, apps, etc. available/accessed by the user. This is a new column added in version 1.2.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 255 visible characters; should be globally stable only if the source system guarantees that scope. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 255 visible characters; should be globally stable only if the source system guarantees that scope.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- user_master_identifier text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- muid-nv-000123
- invalidWhen
- Missing when required, over 255 characters, duplicated where the source profile guarantees uniqueness, or used as the tenant-scoped primary key.
- edgeCases
- Production users.user_master_identifier values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for users.csv.
- anchor
- field-oneroster-users-user-master-identifier
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
preferred_given_name
- csvName
- preferredGivenName
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- The given name by which the User prefers to be known. This is a new column added in version 1.2.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 200 visible characters; preserve the person's preferred spelling. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 200 visible characters; preserve the person's preferred spelling.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- preferred_given_name text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- Lex
- invalidWhen
- Missing when required, over 200 characters, contains control characters, or is assigned to the wrong person row.
- edgeCases
- Production users.preferred_given_name values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for users.csv.
- anchor
- field-oneroster-users-preferred-given-name
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
preferred_middle_name
- csvName
- preferredMiddleName
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- The middle names by which the User prefers to be known. This is a new column added in version 1.2.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 200 visible characters; space-separated preferred middle names are permitted. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 200 visible characters; space-separated preferred middle names are permitted.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- preferred_middle_name text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- R.
- invalidWhen
- Missing when required, over 200 characters, contains control characters, or is assigned to the wrong person row.
- edgeCases
- Production users.preferred_middle_name values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for users.csv.
- anchor
- field-oneroster-users-preferred-middle-name
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
preferred_family_name
- csvName
- preferredFamilyName
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- The family name by which the User prefers to be known. This is a new column added in version 1.2.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 200 visible characters; preserve the person's preferred family-name spelling. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 200 visible characters; preserve the person's preferred family-name spelling.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- preferred_family_name text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- Example
- invalidWhen
- Missing when required, over 200 characters, contains control characters, or is assigned to the wrong person row.
- edgeCases
- Production users.preferred_family_name values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for users.csv.
- anchor
- field-oneroster-users-preferred-family-name
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
primary_org_sourced_id
- csvName
- primaryOrgSourcedId
- type
- text
- csvFormat
- GUID Reference
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Identifier
- privacyTag
- PII: Identifier
- key
- meaning
- The sourcedId of the primary 'org' for the 'user'. In OR 1.2 a user can have one or more 'roles' in one or more 'org's and so this field can be used for identification of the primary 'org'. This is a new column added in version 1.2.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation. Must match the referenced row's sourcedId in the same tenant; validate by splitting list cells before joining.
- range
- 1 to 255 printable characters; must match a target sourcedId in the same tenant after validation.
- relationship
- Optionally references one oneroster.orgs.sourced_id in the same tenant; many users may identify the same primary org.
- ddl
- primary_org_sourced_id text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- Use index (tenant_id, primary_org_sourced_id) for same-tenant foreign-key joins and dependency validation.
- cascadePolicy
- Use NO ACTION/RESTRICT for referential integrity. Do not ON DELETE CASCADE roster, gradebook, PII, or audit-significant rows; lifecycle changes arrive through OneRoster status/import rules.
- multiValueExample
- example
- org-north-valley-high
- invalidWhen
- Referenced sourcedId is absent from the required source CSV file for the same tenant and import batch.
- edgeCases
- Production users.primary_org_sourced_id values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for users.csv.
- anchor
- field-oneroster-users-primary-org-sourced-id
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-008-dependencies",
"title": "OITD-008 Validate OneRoster dependencies before persistence",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-008-dependencies"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
pronouns
- csvName
- pronouns
- type
- text
- csvFormat
- String
- required
- No
- nullability
- Optional in OneRoster validation unless a named relationship or profile narrows it.
- pii
- Yes
- privacyTag
- PII: Yes
- key
- meaning
- The pronoun(s) by which this person is referenced. Examples (in the case of English) include 'she/her/hers', 'he/him/his', 'they/them/theirs', 'ze/hir/hir', 'xe/xir', or a statement that the person's name should be used instead of any pronoun.
- constraints
- Optional in OneRoster validation unless a named relationship or profile narrows it. 0 to 80 visible characters; slash-separated forms such as they/them/theirs are valid; do not force a closed vocabulary. Use a nullable btrim-length CHECK matching the domain. Store without renaming the OneRoster field and preserve source punctuation unless validation says otherwise.
- range
- 0 to 80 visible characters; slash-separated forms such as they/them/theirs are valid; do not force a closed vocabulary.
- relationship
- No direct foreign-key relationship; validate inside the row and import batch context.
- ddl
- pronouns text; Use a nullable btrim-length CHECK matching the domain. Nullability: nullable.
- indexPolicy
- No standalone index required by the 1EdTech persistence contract; query-specific indexes must remain tenant-scoped.
- cascadePolicy
- multiValueExample
- example
- they/them/theirs
- invalidWhen
- Over 80 characters, contains control characters, or is coerced into a closed vocabulary by this 1EdTech surface.
- edgeCases
- Production users.pronouns values are sensitive roster data. Examples are synthetic or redacted, and the value must not appear in public evidence, Problem details, audit metadata, or cross-tenant results.
- sourceClass
- 1EdTech pass-through
- sourceBasis
- 1EdTech OneRoster CSV Binding 1.2.1 table for users.csv.
- anchor
- field-oneroster-users-pronouns
itds
[
{
"id": "oitd-001-source-authority",
"title": "OITD-001 Source authority is the pinned OneRoster 1.2 CSV Binding",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
},
{
"id": "oitd-007-persistence-projection",
"title": "OITD-007 Persist CSV files as generated relational projections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-007-persistence-projection"
},
{
"id": "oitd-009-validation-policy",
"title": "OITD-009 CSV validation is strict, source-linked, and metadata-aware",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-009-validation-policy"
},
{
"id": "oitd-014-privacy-pii",
"title": "OITD-014 Preserve OneRoster PII fields without leaking them",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-014-privacy-pii"
}
]allowedValues
[]
Additional contract data
sourceSummary
{
"standard": "OneRoster",
"standardVersion": "1.2",
"csvBindingVersion": "1.2.1",
"sourceUrl": "https://www.imsglobal.org/spec/oneroster/v1p2/bind/csv/",
"pinnedManifest": "vendor/oneroster-prior-workspace/spec_bundle/MANIFEST.md",
"csvFiles": 22,
"sourceFields": 230,
"generatedProjectionFields": 44,
"inheritedPlatformTables": 3,
"moduleGapFillTables": 1,
"renderedTables": 26,
"renderedFields": 329,
"enumFieldCount": 81,
"allowedValueRows": 242,
"architectureItds": 30,
"routeContractFields": 25,
"listEndpoints": 22,
"csvSchemaContracts": 22,
"csvSchemaFiles": 24,
"csvValidationRules": 13
}upstreamArtifacts
[
{
"title": "OneRoster 1EdTech architecture",
"url": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/",
"usedFor": "OITD anchors and gap-fill ownership."
},
{
"title": "Platform 1EdTech data dictionary",
"url": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/data_dictionary/",
"usedFor": "platform.tenant, platform.idempotency_key, and platform.audit_log field meanings."
},
{
"title": "Benchmark data dictionary eval pair",
"url": "https://platform3-24kpiksyo-andymontgomery-9773s-projects.vercel.app/data_dictionary",
"localPath": "loop/context/benchmarks/data_dictionary.html",
"usedFor": "Stripe-style field completeness, allowed-value explanation, and navigability bar."
}
]conventions
[ "OneRoster CSV field names remain unchanged in csvName; SQL projection names use snake_case.", "Source-derived rows are labeled 1EdTech pass-through and link to OITD-001, OITD-007, and OITD-009.", "Platform fields are labeled Platform gap fill and link to their owning OITD.", "Inherited platform tables are mirrored only to show relationships; platform/1edtech/data_dictionary remains their source of truth.", "Bulk rows must not populate status or dateLastModified; delta rows must populate them.", "PII fields are accepted only because OneRoster defines them and must not leak to Problems, logs, audit metadata, or public evidence.", "Per-resource update/delete routes are part of the public API contract, but they do not add separate storage tables; they mutate the same tenant-scoped rows documented below.", "The virtual /gradingPeriods list endpoint is an API projection over oneroster.academic_sessions where type = gradingPeriod, not a separate table.", "The canonical tenant claim is tenant_id, matching platform PITD-005 and OITD-011; tenantId is not the required contract.", "Import/export writes use Idempotency-Key; per-resource update/delete routes also require ETag/If-Match validators when they can overwrite user work.", "OITD-016 adds no module storage columns; rate-limit and SLO behavior lives in the API and platform operational evidence.", "OITD-017 bootstrap uses a dependency-safe bulk package order before verification reads: orgs, academicSessions, users, courses, classes, enrollments, then dependent gradebook/resource files.", "The downloadable schemas under schemas/csv/ are the machine-readable CSV import contract for POST /imports/csv: manifest.csv, every per-file column contract, package-level file presence rules, and 422 source-validation rule IDs.", "Malformed OneRoster CSV packages return an RFC 7807 Problem with status 422 and code oneroster:source_validation_failed. Request-control errors outside the package body continue to use typed 400 Problems.", "OITD-113 adds no base storage column, but gradebook result reads must expose effectiveScoreScaleSourcedId when score or textScore is populated, and writes must reject unbound or ambiguous score-scale state before persistence." ]
migrationGuide
{
"typeMapping": [
"tenant_id is uuid and references platform.tenant(tenant_id).",
"batch_id, import_batch_id, sourced_id, GUID, ID, String, Enumeration, List, and Identifier fields are text unless an inherited platform table says otherwise; apply the field-level Domain/CHECK text bounds shown below, or use equivalent varchar lengths in a stricter migration.",
"Date fields are date; DateTime fields are timestamptz; Year and Integer fields are integer; Float fields are double precision.",
"Inherited platform fields keep their approved platform types, including uuid, jsonb, text[], integer, and timestamptz."
],
"keyAndFkRules": [
"Do not create oneroster.tenant. platform.tenant already owns the tenant boundary.",
"Create oneroster.import_batch with primary key (tenant_id, batch_id) and foreign key tenant_id -> platform.tenant(tenant_id).",
"Create every generated CSV table with primary key (tenant_id, sourced_id), except oneroster.manifest_entry which uses primary key (tenant_id, import_batch_id).",
"Every generated table has foreign key (tenant_id, import_batch_id) -> oneroster.import_batch(tenant_id, batch_id).",
"Every GUID Reference field is tenant-scoped: (tenant_id, <reference_column>) points to the target table's (tenant_id, sourced_id). Multi-valued GUID-reference fields stay as validated CSV text in this projection unless a later implementation adds a documented helper view."
],
"ddlPattern": "create schema if not exists oneroster;\n\ncreate table oneroster.import_batch (\n tenant_id uuid not null references platform.tenant(tenant_id),\n batch_id text not null,\n direction text not null check (direction in ('import', 'export')),\n mode text not null check (mode in ('bulk', 'delta')),\n status text not null check (status in ('accepted', 'validated', 'applied', 'rejected', 'exported')),\n created_at timestamptz not null,\n completed_at timestamptz,\n primary key (tenant_id, batch_id)\n);\n\ncreate table oneroster.enrollments (\n tenant_id uuid not null references platform.tenant(tenant_id),\n import_batch_id text not null,\n sourced_id text not null,\n status text check (status in ('active', 'tobedeleted')),\n date_last_modified timestamptz,\n class_sourced_id text not null,\n school_sourced_id text not null,\n user_sourced_id text not null,\n role text not null check (role in ('administrator', 'proctor', 'student', 'teacher')),\n \"primary\" text check (\"primary\" in ('true', 'false')),\n begin_date date,\n end_date date,\n primary key (tenant_id, sourced_id),\n foreign key (tenant_id, import_batch_id) references oneroster.import_batch(tenant_id, batch_id),\n foreign key (tenant_id, class_sourced_id) references oneroster.classes(tenant_id, sourced_id),\n foreign key (tenant_id, school_sourced_id) references oneroster.orgs(tenant_id, sourced_id),\n foreign key (tenant_id, user_sourced_id) references oneroster.users(tenant_id, sourced_id)\n);",
"activeEnrollmentQuery": "select\n e.sourced_id as enrollment_sourced_id,\n e.role,\n e.begin_date,\n e.end_date,\n u.sourced_id as user_sourced_id,\n u.username,\n u.given_name,\n u.family_name,\n o.sourced_id as school_sourced_id,\n o.name as school_name,\n c.sourced_id as class_sourced_id,\n c.title as class_title,\n crs.sourced_id as course_sourced_id,\n crs.title as course_title,\n s.sourced_id as academic_session_sourced_id,\n s.title as academic_session_title,\n s.type as academic_session_type\nfrom oneroster.enrollments e\njoin oneroster.users u\n on u.tenant_id = e.tenant_id\n and u.sourced_id = e.user_sourced_id\njoin oneroster.orgs o\n on o.tenant_id = e.tenant_id\n and o.sourced_id = e.school_sourced_id\n and o.type = 'school'\njoin oneroster.classes c\n on c.tenant_id = e.tenant_id\n and c.sourced_id = e.class_sourced_id\njoin oneroster.courses crs\n on crs.tenant_id = e.tenant_id\n and crs.sourced_id = c.course_sourced_id\njoin lateral regexp_split_to_table(c.term_sourced_ids, '[[:space:]]*,[[:space:]]*') as term(term_sourced_id)\n on term.term_sourced_id <> ''\njoin oneroster.academic_sessions s\n on s.tenant_id = e.tenant_id\n and s.sourced_id = term.term_sourced_id\nwhere e.tenant_id = $1\n and e.user_sourced_id = $2\n and coalesce(e.status, 'active') = 'active'\n and coalesce(u.status, 'active') = 'active'\n and coalesce(o.status, 'active') = 'active'\n and coalesce(c.status, 'active') = 'active'\n and coalesce(crs.status, 'active') = 'active'\n and coalesce(s.status, 'active') = 'active'\n and (e.begin_date is null or e.begin_date <= current_date)\n and (e.end_date is null or e.end_date > current_date)\norder by c.title, s.start_date;"
}apiContract
{
"source": "Approved architecture attempt 2 traceability downstream requirements.",
"decisionAxes": {
"write granularity": "oitd-101-write-granularity",
"read shape": "oitd-102-read-shape",
"query model": "oitd-103-query-model",
"concurrency model": "oitd-104-concurrency-model",
"idempotency model": "oitd-105-idempotency-model",
"auth shape": "oitd-106-auth-shape",
"eventing model": "oitd-107-eventing-model",
"error envelope": "oitd-108-error-envelope",
"tenant routing": "oitd-109-tenant-routing",
"conformance evidence": "oitd-110-conformance-evidence",
"privacy / retention": "oitd-111-privacy-retention",
"list endpoints": "oitd-112-list-endpoints"
},
"routeFields": [
{
"name": "collection",
"type": "OneRoster route segment",
"required": "Yes",
"meaning": "Names the collection being listed, read in detail, or mutated. It stays in OneRoster REST vocabulary such as /orgs, /classes, and /academicSessions.",
"constraints": "Must be one of the supported list routes below. The virtual /gradingPeriods route is a filtered projection over oneroster.academic_sessions where type = gradingPeriod, not a separate table.",
"itds": [
{
"id": "oitd-102-read-shape",
"title": "OITD-102 Read shape ships list, detail, and sub-collections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-102-read-shape"
},
{
"id": "oitd-112-list-endpoints",
"title": "OITD-112 One list endpoint per supported collection",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-112-list-endpoints"
}
]
},
{
"name": "sourcedId",
"type": "path text, 1 to 255 printable characters",
"required": "Required on detail, sub-collection, update, and delete routes",
"meaning": "Identifies the tenant-scoped OneRoster row addressed by the route.",
"constraints": "Must match the target table primary identifier inside the same tenant; never resolve a row across tenant_id boundaries.",
"itds": [
{
"id": "oitd-102-read-shape",
"title": "OITD-102 Read shape ships list, detail, and sub-collections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-102-read-shape"
},
{
"id": "oitd-109-tenant-routing",
"title": "OITD-109 Tenant routing is in the JWT tenant_id claim",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-109-tenant-routing"
}
]
},
{
"name": "items[]",
"type": "array of OneRoster projection objects",
"required": "Yes on list and sub-collection responses",
"meaning": "Carries the returned OneRoster records using source field names plus a visibly labeled platform metadata object.",
"constraints": "Must preserve OneRoster source names; pagination responses include continuation links when more records exist.",
"itds": [
{
"id": "oitd-102-read-shape",
"title": "OITD-102 Read shape ships list, detail, and sub-collections",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-102-read-shape"
},
{
"id": "oitd-103-query-model",
"title": "OITD-103 Query model ships filter, sort, paging, cursor, and modifiedSince",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-103-query-model"
}
]
},
{
"name": "problem",
"type": "RFC 7807 object",
"required": "Yes on non-2xx errors",
"meaning": "Carries a typed error with status, title, safe detail, requestId, traceId, optional fieldErrors[], and an oneroster: code.",
"constraints": "Must not include PII in detail, logs, audit metadata, or public evidence.",
"itds": [
{
"id": "oitd-108-error-envelope",
"title": "OITD-108 Errors use typed RFC 7807 Problems",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-108-error-envelope"
},
{
"id": "oitd-111-privacy-retention",
"title": "OITD-111 Privacy and retention are GDPR-style",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-111-privacy-retention"
}
]
},
{
"name": "effectiveScoreScaleSourcedId",
"type": "OneRoster sourcedId",
"required": "Required on gradebook result reads when score or textScore is populated",
"meaning": "Names the single same-tenant scoreScales row selected by the OITD-113 resolver for this result.",
"constraints": "Resolve from an active resultScoreScales row when present; otherwise require exactly one active lineItemScoreScales row for the result's lineItem. Zero or multiple candidates reject the write before storage.",
"itds": [
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
},
{
"id": "oitd-108-error-envelope",
"title": "OITD-108 Errors use typed RFC 7807 Problems",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-108-error-envelope"
}
]
},
{
"name": "effectiveScoreScale",
"type": "object",
"required": "Optional convenience expansion on gradebook reads",
"meaning": "Carries the resolved score-scale title, type, and scoreScaleValue mapping so clients can render the score without an extra lookup.",
"constraints": "May be omitted when clients can follow effectiveScoreScaleSourcedId; if included, it must match the same tenant-scoped scoreScales row and must not hide ambiguous state.",
"itds": [
{
"id": "oitd-113-score-scale-enforcement",
"title": "OITD-113 Write-time effective score-scale enforcement",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-113-score-scale-enforcement"
}
]
}
],
"queryParameters": [
{
"name": "filter",
"type": "string",
"required": "No",
"meaning": "Narrows a list endpoint to documented field comparisons.",
"constraints": "Unsupported fields or operators return a typed 400 Problem rather than being ignored.",
"itds": [
{
"id": "oitd-103-query-model",
"title": "OITD-103 Query model ships filter, sort, paging, cursor, and modifiedSince",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-103-query-model"
},
{
"id": "oitd-108-error-envelope",
"title": "OITD-108 Errors use typed RFC 7807 Problems",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-108-error-envelope"
}
]
},
{
"name": "sort",
"type": "string",
"required": "No",
"meaning": "Orders a list endpoint by documented sortable fields.",
"constraints": "Unsupported sort fields return a typed 400 Problem.",
"itds": [
{
"id": "oitd-103-query-model",
"title": "OITD-103 Query model ships filter, sort, paging, cursor, and modifiedSince",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-103-query-model"
}
]
},
{
"name": "limit",
"type": "integer",
"required": "No",
"meaning": "Caps the number of returned rows.",
"constraints": "Must be positive and within the published maximum for the endpoint.",
"itds": [
{
"id": "oitd-103-query-model",
"title": "OITD-103 Query model ships filter, sort, paging, cursor, and modifiedSince",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-103-query-model"
}
]
},
{
"name": "cursor",
"type": "opaque string",
"required": "No",
"meaning": "Continues a paged list from the server-provided continuation token.",
"constraints": "Client code must treat the value as opaque and tenant-scoped.",
"itds": [
{
"id": "oitd-103-query-model",
"title": "OITD-103 Query model ships filter, sort, paging, cursor, and modifiedSince",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-103-query-model"
}
]
},
{
"name": "modifiedSince",
"type": "ISO 8601 DateTime",
"required": "No",
"meaning": "Requests rows changed after the supplied instant for polling-based sync.",
"constraints": "Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks.",
"itds": [
{
"id": "oitd-103-query-model",
"title": "OITD-103 Query model ships filter, sort, paging, cursor, and modifiedSince",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-103-query-model"
},
{
"id": "oitd-107-eventing-model",
"title": "OITD-107 Eventing ships poll plus modifiedSince",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-107-eventing-model"
}
]
}
],
"headers": [
{
"name": "Authorization",
"type": "Bearer JWT",
"required": "Yes except demo token mint",
"meaning": "Authenticates the caller and binds ordinary OneRoster routes to the token's tenant_id claim.",
"constraints": "JWTs must include iss, sub, iat, exp, tenant_id, plus role/roles/scopes for privileged operations.",
"itds": [
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
},
{
"id": "oitd-106-auth-shape",
"title": "OITD-106 Auth shape uses scoped claims",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-106-auth-shape"
},
{
"id": "oitd-109-tenant-routing",
"title": "OITD-109 Tenant routing is in the JWT tenant_id claim",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-109-tenant-routing"
}
]
},
{
"name": "Idempotency-Key",
"type": "ASCII string, 1 to 128 characters",
"required": "Required on retryable writes",
"meaning": "Scopes replay protection for imports, exports, and per-resource writes through platform.idempotency_key.",
"constraints": "Same key plus different request hash returns an idempotency conflict; reuse the same key while backing off a retryable write.",
"itds": [
{
"id": "oitd-012-idempotency-concurrency",
"title": "OITD-012 Retryable writes use platform idempotency",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-012-idempotency-concurrency"
},
{
"id": "oitd-105-idempotency-model",
"title": "OITD-105 Retryable writes use Idempotency-Key",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-105-idempotency-model"
}
]
},
{
"name": "ETag",
"type": "HTTP entity tag",
"required": "Returned on per-resource reads that can later be overwritten",
"meaning": "Validator a client stores before attempting an update or delete.",
"constraints": "Import/export commands do not use ETag because they create batch evidence instead of overwriting a user-editable resource.",
"itds": [
{
"id": "oitd-012-idempotency-concurrency",
"title": "OITD-012 Retryable writes use platform idempotency",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-012-idempotency-concurrency"
},
{
"id": "oitd-104-concurrency-model",
"title": "OITD-104 Per-resource updates use ETag and If-Match",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-104-concurrency-model"
}
]
},
{
"name": "If-Match",
"type": "HTTP entity tag",
"required": "Required on per-resource update/delete routes",
"meaning": "Prevents lost updates by requiring the caller's validator to match the current resource.",
"constraints": "Missing precondition returns 428; stale validators return 412 or a documented 409 conflict family.",
"itds": [
{
"id": "oitd-012-idempotency-concurrency",
"title": "OITD-012 Retryable writes use platform idempotency",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-012-idempotency-concurrency"
},
{
"id": "oitd-104-concurrency-model",
"title": "OITD-104 Per-resource updates use ETag and If-Match",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-104-concurrency-model"
}
]
},
{
"name": "Retry-After",
"type": "HTTP delay or date",
"required": "Returned when capacity protection emits 429",
"meaning": "Tells clients when to retry after oneroster:rate_limited.",
"constraints": "For retryable writes, retry with the same Idempotency-Key after the delay.",
"itds": [
{
"id": "oitd-016-operational-posture",
"title": "OITD-016 Inherit platform SLOs and publish bounded rate-limit behavior",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-016-operational-posture"
},
{
"id": "oitd-108-error-envelope",
"title": "OITD-108 Errors use typed RFC 7807 Problems",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-108-error-envelope"
}
]
}
],
"jwtClaims": [
{
"name": "iss",
"type": "string",
"required": "Yes",
"meaning": "Identifies the TimeBack issuer that signed the token.",
"constraints": "Must match the platform issuer accepted for this deployment.",
"itds": [
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]
},
{
"name": "sub",
"type": "string",
"required": "Yes",
"meaning": "Identifies the authenticated subject.",
"constraints": "Must be stable enough for audit correlation without leaking unnecessary PII.",
"itds": [
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
},
{
"id": "oitd-111-privacy-retention",
"title": "OITD-111 Privacy and retention are GDPR-style",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-111-privacy-retention"
}
]
},
{
"name": "iat",
"type": "NumericDate",
"required": "Yes",
"meaning": "Token issued-at time.",
"constraints": "Reject tokens outside accepted clock-skew policy.",
"itds": [
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
}
]
},
{
"name": "exp",
"type": "NumericDate",
"required": "Yes",
"meaning": "Token expiration time.",
"constraints": "Expired tokens return oneroster:authentication_required.",
"itds": [
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
},
{
"id": "oitd-108-error-envelope",
"title": "OITD-108 Errors use typed RFC 7807 Problems",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-108-error-envelope"
}
]
},
{
"name": "tenant_id",
"type": "uuid",
"required": "Yes on tenant-scoped routes",
"meaning": "Selects the platform.tenant row that owns every OneRoster read or write.",
"constraints": "This snake_case claim is the canonical platform claim; tenantId is not the required contract.",
"itds": [
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
},
{
"id": "oitd-005-tenant-isolation",
"title": "OITD-005 Tenant isolation is required",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-005-tenant-isolation"
},
{
"id": "oitd-109-tenant-routing",
"title": "OITD-109 Tenant routing is in the JWT tenant_id claim",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-109-tenant-routing"
}
]
},
{
"name": "role / roles / scopes",
"type": "string or string[]",
"required": "Required for privileged operations",
"meaning": "Authorizes operation families such as reader, writer, reviewer, service, import, export, or administration.",
"constraints": "Relationship visibility still requires scoped claims where role alone is too broad.",
"itds": [
{
"id": "oitd-011-auth-demo-prod",
"title": "OITD-011 Use platform JWT auth with demo-only token minting",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-011-auth-demo-prod"
},
{
"id": "oitd-106-auth-shape",
"title": "OITD-106 Auth shape uses scoped claims",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-106-auth-shape"
}
]
},
{
"name": "agentOf",
"type": "array of user sourcedIds",
"required": "Conditional",
"meaning": "Limits a parent, guardian, or agent token to the students it may see.",
"constraints": "Every listed sourcedId is tenant-scoped and must point to oneroster.users.",
"itds": [
{
"id": "oitd-106-auth-shape",
"title": "OITD-106 Auth shape uses scoped claims",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-106-auth-shape"
},
{
"id": "oitd-111-privacy-retention",
"title": "OITD-111 Privacy and retention are GDPR-style",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-111-privacy-retention"
}
]
},
{
"name": "schoolSourcedIds[]",
"type": "array of org sourcedIds",
"required": "Conditional",
"meaning": "Limits school-scoped users to permitted school orgs.",
"constraints": "Each value must identify an oneroster.orgs row whose type is school in the same tenant.",
"itds": [
{
"id": "oitd-106-auth-shape",
"title": "OITD-106 Auth shape uses scoped claims",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-106-auth-shape"
},
{
"id": "oitd-109-tenant-routing",
"title": "OITD-109 Tenant routing is in the JWT tenant_id claim",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-109-tenant-routing"
}
]
},
{
"name": "classSourcedIds[]",
"type": "array of class sourcedIds",
"required": "Conditional",
"meaning": "Limits class-scoped users to permitted classes.",
"constraints": "Each value must identify an oneroster.classes row in the same tenant.",
"itds": [
{
"id": "oitd-106-auth-shape",
"title": "OITD-106 Auth shape uses scoped claims",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-106-auth-shape"
},
{
"id": "oitd-109-tenant-routing",
"title": "OITD-109 Tenant routing is in the JWT tenant_id claim",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-109-tenant-routing"
}
]
}
],
"listEndpoints": [
{
"path": "/academicSessions",
"table": "oneroster.academic_sessions",
"source": "academicSessions.csv",
"notes": "Direct list projection over this CSV-derived table."
},
{
"path": "/categories",
"table": "oneroster.categories",
"source": "categories.csv",
"notes": "Direct list projection over this CSV-derived table."
},
{
"path": "/classes",
"table": "oneroster.classes",
"source": "classes.csv",
"notes": "Direct list projection over this CSV-derived table."
},
{
"path": "/classResources",
"table": "oneroster.class_resources",
"source": "classResources.csv",
"notes": "Direct list projection over this CSV-derived table."
},
{
"path": "/courseResources",
"table": "oneroster.course_resources",
"source": "courseResources.csv",
"notes": "Direct list projection over this CSV-derived table."
},
{
"path": "/courses",
"table": "oneroster.courses",
"source": "courses.csv",
"notes": "Direct list projection over this CSV-derived table."
},
{
"path": "/demographics",
"table": "oneroster.demographics",
"source": "demographics.csv",
"notes": "Direct list projection over this CSV-derived table."
},
{
"path": "/enrollments",
"table": "oneroster.enrollments",
"source": "enrollments.csv",
"notes": "Direct list projection over this CSV-derived table."
},
{
"path": "/lineItemLearningObjectiveIds",
"table": "oneroster.line_item_learning_objective_ids",
"source": "lineItemLearningObjectiveIds.csv",
"notes": "Direct list projection over this CSV-derived table."
},
{
"path": "/lineItems",
"table": "oneroster.line_items",
"source": "lineItems.csv",
"notes": "Direct list projection over this CSV-derived table."
},
{
"path": "/lineItemScoreScales",
"table": "oneroster.line_item_score_scales",
"source": "lineItemScoreScales.csv",
"notes": "Direct list projection over this CSV-derived table."
},
{
"path": "/orgs",
"table": "oneroster.orgs",
"source": "orgs.csv",
"notes": "Direct list projection over this CSV-derived table."
},
{
"path": "/resources",
"table": "oneroster.resources",
"source": "resources.csv",
"notes": "Direct list projection over this CSV-derived table."
},
{
"path": "/resultLearningObjectiveIds",
"table": "oneroster.result_learning_objective_ids",
"source": "resultLearningObjectiveIds.csv",
"notes": "Direct list projection over this CSV-derived table."
},
{
"path": "/results",
"table": "oneroster.results",
"source": "results.csv",
"notes": "Direct list projection over this CSV-derived table."
},
{
"path": "/resultScoreScales",
"table": "oneroster.result_score_scales",
"source": "resultScoreScales.csv",
"notes": "Direct list projection over this CSV-derived table."
},
{
"path": "/roles",
"table": "oneroster.roles",
"source": "roles.csv",
"notes": "Direct list projection over this CSV-derived table."
},
{
"path": "/scoreScales",
"table": "oneroster.score_scales",
"source": "scoreScales.csv",
"notes": "Direct list projection over this CSV-derived table."
},
{
"path": "/userProfiles",
"table": "oneroster.user_profiles",
"source": "userProfiles.csv",
"notes": "Direct list projection over this CSV-derived table."
},
{
"path": "/userResources",
"table": "oneroster.user_resources",
"source": "userResources.csv",
"notes": "Direct list projection over this CSV-derived table."
},
{
"path": "/users",
"table": "oneroster.users",
"source": "users.csv",
"notes": "Direct list projection over this CSV-derived table."
},
{
"path": "/gradingPeriods",
"table": "oneroster.academic_sessions",
"source": "academicSessions.csv",
"notes": "Virtual list projection where academic_sessions.type = gradingPeriod; no separate oneroster.grading_periods table."
}
],
"csvSchemaContracts": [
{
"fileName": "manifest.csv",
"table": "oneroster.manifest_entry",
"rowKey": "(tenant_id, import_batch_id)",
"routePath": null,
"schemaPath": "schemas/csv/manifest.schema.json",
"schemaUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/manifest.schema.json",
"manifestProperty": null,
"requiredColumnsBulk": [
"manifest.version",
"oneroster.version",
"file.academicSessions",
"file.categories",
"file.classes",
"file.classResources",
"file.courses",
"file.courseResources",
"file.demographics",
"file.enrollments",
"file.lineItemLearningObjectiveIds",
"file.lineItems",
"file.lineItemScoreScales",
"file.orgs",
"file.resources",
"file.resultLearningObjectiveIds",
"file.results",
"file.resultScoreScales",
"file.roles",
"file.scoreScales",
"file.userProfiles",
"file.userResources",
"file.users"
],
"requiredColumnsDelta": [
"manifest.version",
"oneroster.version",
"file.academicSessions",
"file.categories",
"file.classes",
"file.classResources",
"file.courses",
"file.courseResources",
"file.demographics",
"file.enrollments",
"file.lineItemLearningObjectiveIds",
"file.lineItems",
"file.lineItemScoreScales",
"file.orgs",
"file.resources",
"file.resultLearningObjectiveIds",
"file.results",
"file.resultScoreScales",
"file.roles",
"file.scoreScales",
"file.userProfiles",
"file.userResources",
"file.users"
],
"optionalColumns": [
"source.systemName",
"source.systemCode"
],
"deltaRequiredColumns": [],
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"sourceFields": [
{
"csvName": "manifest.version",
"sqlName": "manifest_version",
"format": "String",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "oneroster.version",
"sqlName": "oneroster_version",
"format": "String",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "file.academicSessions",
"sqlName": "file_academic_sessions",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"absent",
"bulk",
"delta"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "file.categories",
"sqlName": "file_categories",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"absent",
"bulk",
"delta"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "file.classes",
"sqlName": "file_classes",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"absent",
"bulk",
"delta"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "file.classResources",
"sqlName": "file_class_resources",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"absent",
"bulk",
"delta"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "file.courses",
"sqlName": "file_courses",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"absent",
"bulk",
"delta"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "file.courseResources",
"sqlName": "file_course_resources",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"absent",
"bulk",
"delta"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "file.demographics",
"sqlName": "file_demographics",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"absent",
"bulk",
"delta"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "file.enrollments",
"sqlName": "file_enrollments",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"absent",
"bulk",
"delta"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "file.lineItemLearningObjectiveIds",
"sqlName": "file_line_item_learning_objective_ids",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"absent",
"bulk",
"delta"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "file.lineItems",
"sqlName": "file_line_items",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"absent",
"bulk",
"delta"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "file.lineItemScoreScales",
"sqlName": "file_line_item_score_scales",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"absent",
"bulk",
"delta"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "file.orgs",
"sqlName": "file_orgs",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"absent",
"bulk",
"delta"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "file.resources",
"sqlName": "file_resources",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"absent",
"bulk",
"delta"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "file.resultLearningObjectiveIds",
"sqlName": "file_result_learning_objective_ids",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"absent",
"bulk",
"delta"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "file.results",
"sqlName": "file_results",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"absent",
"bulk",
"delta"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "file.resultScoreScales",
"sqlName": "file_result_score_scales",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"absent",
"bulk",
"delta"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "file.roles",
"sqlName": "file_roles",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"absent",
"bulk",
"delta"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "file.scoreScales",
"sqlName": "file_score_scales",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"absent",
"bulk",
"delta"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "file.userProfiles",
"sqlName": "file_user_profiles",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"absent",
"bulk",
"delta"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "file.userResources",
"sqlName": "file_user_resources",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"absent",
"bulk",
"delta"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "file.users",
"sqlName": "file_users",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"absent",
"bulk",
"delta"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "source.systemName",
"sqlName": "source_system_name",
"format": "String",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
},
{
"csvName": "source.systemCode",
"sqlName": "source_system_code",
"format": "String",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for manifest.csv."
}
]
},
{
"fileName": "academicSessions.csv",
"table": "oneroster.academic_sessions",
"rowKey": "(tenant_id, sourced_id)",
"routePath": "/academicSessions",
"schemaPath": "schemas/csv/academicSessions.schema.json",
"schemaUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/academicSessions.schema.json",
"manifestProperty": "file.academicSessions",
"requiredColumnsBulk": [
"sourcedId",
"title",
"type",
"startDate",
"endDate",
"schoolYear"
],
"requiredColumnsDelta": [
"sourcedId",
"status",
"dateLastModified",
"title",
"type",
"startDate",
"endDate",
"schoolYear"
],
"optionalColumns": [
"parentSourcedId"
],
"deltaRequiredColumns": [
"status",
"dateLastModified"
],
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"sourceFields": [
{
"csvName": "sourcedId",
"sqlName": "sourced_id",
"format": "GUID",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for academicSessions.csv."
},
{
"csvName": "status",
"sqlName": "status",
"format": "Enumeration",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [
"active",
"tobedeleted"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for academicSessions.csv."
},
{
"csvName": "dateLastModified",
"sqlName": "date_last_modified",
"format": "DateTime",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for academicSessions.csv."
},
{
"csvName": "title",
"sqlName": "title",
"format": "String",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for academicSessions.csv."
},
{
"csvName": "type",
"sqlName": "type",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"gradingPeriod",
"semester",
"schoolYear",
"term"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for academicSessions.csv."
},
{
"csvName": "startDate",
"sqlName": "start_date",
"format": "Date",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for academicSessions.csv."
},
{
"csvName": "endDate",
"sqlName": "end_date",
"format": "Date",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for academicSessions.csv."
},
{
"csvName": "parentSourcedId",
"sqlName": "parent_sourced_id",
"format": "GUID Reference",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for academicSessions.csv."
},
{
"csvName": "schoolYear",
"sqlName": "school_year",
"format": "Year",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for academicSessions.csv."
}
]
},
{
"fileName": "categories.csv",
"table": "oneroster.categories",
"rowKey": "(tenant_id, sourced_id)",
"routePath": "/categories",
"schemaPath": "schemas/csv/categories.schema.json",
"schemaUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/categories.schema.json",
"manifestProperty": "file.categories",
"requiredColumnsBulk": [
"sourcedId",
"title"
],
"requiredColumnsDelta": [
"sourcedId",
"status",
"dateLastModified",
"title"
],
"optionalColumns": [
"weight"
],
"deltaRequiredColumns": [
"status",
"dateLastModified"
],
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"sourceFields": [
{
"csvName": "sourcedId",
"sqlName": "sourced_id",
"format": "GUID",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for categories.csv."
},
{
"csvName": "status",
"sqlName": "status",
"format": "Enumeration",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [
"active",
"tobedeleted"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for categories.csv."
},
{
"csvName": "dateLastModified",
"sqlName": "date_last_modified",
"format": "DateTime",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for categories.csv."
},
{
"csvName": "title",
"sqlName": "title",
"format": "String",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for categories.csv."
},
{
"csvName": "weight",
"sqlName": "weight",
"format": "Integer",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for categories.csv."
}
]
},
{
"fileName": "classes.csv",
"table": "oneroster.classes",
"rowKey": "(tenant_id, sourced_id)",
"routePath": "/classes",
"schemaPath": "schemas/csv/classes.schema.json",
"schemaUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/classes.schema.json",
"manifestProperty": "file.classes",
"requiredColumnsBulk": [
"sourcedId",
"title",
"courseSourcedId",
"classType",
"schoolSourcedId",
"termSourcedIds"
],
"requiredColumnsDelta": [
"sourcedId",
"status",
"dateLastModified",
"title",
"courseSourcedId",
"classType",
"schoolSourcedId",
"termSourcedIds"
],
"optionalColumns": [
"grades",
"classCode",
"location",
"subjects",
"subjectCodes",
"periods"
],
"deltaRequiredColumns": [
"status",
"dateLastModified"
],
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"sourceFields": [
{
"csvName": "sourcedId",
"sqlName": "sourced_id",
"format": "GUID",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv."
},
{
"csvName": "status",
"sqlName": "status",
"format": "Enumeration",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [
"active",
"tobedeleted"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv."
},
{
"csvName": "dateLastModified",
"sqlName": "date_last_modified",
"format": "DateTime",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv."
},
{
"csvName": "title",
"sqlName": "title",
"format": "String",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv."
},
{
"csvName": "grades",
"sqlName": "grades",
"format": "List of Strings",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv."
},
{
"csvName": "courseSourcedId",
"sqlName": "course_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv."
},
{
"csvName": "classCode",
"sqlName": "class_code",
"format": "String",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv."
},
{
"csvName": "classType",
"sqlName": "class_type",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"homeroom",
"scheduled"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv."
},
{
"csvName": "location",
"sqlName": "location",
"format": "String",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv."
},
{
"csvName": "schoolSourcedId",
"sqlName": "school_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv."
},
{
"csvName": "termSourcedIds",
"sqlName": "term_sourced_ids",
"format": "List of GUID References",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv."
},
{
"csvName": "subjects",
"sqlName": "subjects",
"format": "List of Strings",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv."
},
{
"csvName": "subjectCodes",
"sqlName": "subject_codes",
"format": "List of Strings",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv."
},
{
"csvName": "periods",
"sqlName": "periods",
"format": "List of Strings",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for classes.csv."
}
]
},
{
"fileName": "classResources.csv",
"table": "oneroster.class_resources",
"rowKey": "(tenant_id, sourced_id)",
"routePath": "/classResources",
"schemaPath": "schemas/csv/classResources.schema.json",
"schemaUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/classResources.schema.json",
"manifestProperty": "file.classResources",
"requiredColumnsBulk": [
"sourcedId",
"classSourcedId",
"resourceSourcedId"
],
"requiredColumnsDelta": [
"sourcedId",
"status",
"dateLastModified",
"classSourcedId",
"resourceSourcedId"
],
"optionalColumns": [
"title"
],
"deltaRequiredColumns": [
"status",
"dateLastModified"
],
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"sourceFields": [
{
"csvName": "sourcedId",
"sqlName": "sourced_id",
"format": "GUID",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for classResources.csv."
},
{
"csvName": "status",
"sqlName": "status",
"format": "Enumeration",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [
"active",
"tobedeleted"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for classResources.csv."
},
{
"csvName": "dateLastModified",
"sqlName": "date_last_modified",
"format": "DateTime",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for classResources.csv."
},
{
"csvName": "title",
"sqlName": "title",
"format": "String",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for classResources.csv."
},
{
"csvName": "classSourcedId",
"sqlName": "class_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for classResources.csv."
},
{
"csvName": "resourceSourcedId",
"sqlName": "resource_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for classResources.csv."
}
]
},
{
"fileName": "courseResources.csv",
"table": "oneroster.course_resources",
"rowKey": "(tenant_id, sourced_id)",
"routePath": "/courseResources",
"schemaPath": "schemas/csv/courseResources.schema.json",
"schemaUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/courseResources.schema.json",
"manifestProperty": "file.courseResources",
"requiredColumnsBulk": [
"sourcedId",
"courseSourcedId",
"resourceSourcedId"
],
"requiredColumnsDelta": [
"sourcedId",
"status",
"dateLastModified",
"courseSourcedId",
"resourceSourcedId"
],
"optionalColumns": [
"title"
],
"deltaRequiredColumns": [
"status",
"dateLastModified"
],
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"sourceFields": [
{
"csvName": "sourcedId",
"sqlName": "sourced_id",
"format": "GUID",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for courseResources.csv."
},
{
"csvName": "status",
"sqlName": "status",
"format": "Enumeration",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [
"active",
"tobedeleted"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for courseResources.csv."
},
{
"csvName": "dateLastModified",
"sqlName": "date_last_modified",
"format": "DateTime",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for courseResources.csv."
},
{
"csvName": "title",
"sqlName": "title",
"format": "String",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for courseResources.csv."
},
{
"csvName": "courseSourcedId",
"sqlName": "course_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for courseResources.csv."
},
{
"csvName": "resourceSourcedId",
"sqlName": "resource_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for courseResources.csv."
}
]
},
{
"fileName": "courses.csv",
"table": "oneroster.courses",
"rowKey": "(tenant_id, sourced_id)",
"routePath": "/courses",
"schemaPath": "schemas/csv/courses.schema.json",
"schemaUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/courses.schema.json",
"manifestProperty": "file.courses",
"requiredColumnsBulk": [
"sourcedId",
"title",
"orgSourcedId"
],
"requiredColumnsDelta": [
"sourcedId",
"status",
"dateLastModified",
"title",
"orgSourcedId"
],
"optionalColumns": [
"schoolYearSourcedId",
"courseCode",
"grades",
"subjects",
"subjectCodes"
],
"deltaRequiredColumns": [
"status",
"dateLastModified"
],
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"sourceFields": [
{
"csvName": "sourcedId",
"sqlName": "sourced_id",
"format": "GUID",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for courses.csv."
},
{
"csvName": "status",
"sqlName": "status",
"format": "Enumeration",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [
"active",
"tobedeleted"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for courses.csv."
},
{
"csvName": "dateLastModified",
"sqlName": "date_last_modified",
"format": "DateTime",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for courses.csv."
},
{
"csvName": "schoolYearSourcedId",
"sqlName": "school_year_sourced_id",
"format": "GUID Reference",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for courses.csv."
},
{
"csvName": "title",
"sqlName": "title",
"format": "String",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for courses.csv."
},
{
"csvName": "courseCode",
"sqlName": "course_code",
"format": "String",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for courses.csv."
},
{
"csvName": "grades",
"sqlName": "grades",
"format": "List of Strings",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for courses.csv."
},
{
"csvName": "orgSourcedId",
"sqlName": "org_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for courses.csv."
},
{
"csvName": "subjects",
"sqlName": "subjects",
"format": "List of Strings",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for courses.csv."
},
{
"csvName": "subjectCodes",
"sqlName": "subject_codes",
"format": "List of Strings",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for courses.csv."
}
]
},
{
"fileName": "demographics.csv",
"table": "oneroster.demographics",
"rowKey": "(tenant_id, sourced_id)",
"routePath": "/demographics",
"schemaPath": "schemas/csv/demographics.schema.json",
"schemaUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/demographics.schema.json",
"manifestProperty": "file.demographics",
"requiredColumnsBulk": [
"sourcedId"
],
"requiredColumnsDelta": [
"sourcedId",
"status",
"dateLastModified"
],
"optionalColumns": [
"birthDate",
"sex",
"americanIndianOrAlaskaNative",
"asian",
"blackOrAfricanAmerican",
"nativeHawaiianOrOtherPacificIslander",
"white",
"demographicRaceTwoOrMoreRaces",
"hispanicOrLatinoEthnicity",
"countryOfBirthCode",
"stateOfBirthAbbreviation",
"cityOfBirth",
"publicSchoolResidenceStatus"
],
"deltaRequiredColumns": [
"status",
"dateLastModified"
],
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"sourceFields": [
{
"csvName": "sourcedId",
"sqlName": "sourced_id",
"format": "GUID",
"required": "Yes",
"pii": "Identifier",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv."
},
{
"csvName": "status",
"sqlName": "status",
"format": "Enumeration",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [
"active",
"tobedeleted"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv."
},
{
"csvName": "dateLastModified",
"sqlName": "date_last_modified",
"format": "DateTime",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv."
},
{
"csvName": "birthDate",
"sqlName": "birth_date",
"format": "Date",
"required": "No",
"pii": "Yes",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv."
},
{
"csvName": "sex",
"sqlName": "sex",
"format": "Enumeration",
"required": "No",
"pii": "Yes",
"allowedValues": [
"male",
"female",
"unspecified",
"other"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv."
},
{
"csvName": "americanIndianOrAlaskaNative",
"sqlName": "american_indian_or_alaska_native",
"format": "Enumeration",
"required": "No",
"pii": "Yes",
"allowedValues": [
"true",
"false"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv."
},
{
"csvName": "asian",
"sqlName": "asian",
"format": "Enumeration",
"required": "No",
"pii": "Yes",
"allowedValues": [
"true",
"false"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv."
},
{
"csvName": "blackOrAfricanAmerican",
"sqlName": "black_or_african_american",
"format": "Enumeration",
"required": "No",
"pii": "Yes",
"allowedValues": [
"true",
"false"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv."
},
{
"csvName": "nativeHawaiianOrOtherPacificIslander",
"sqlName": "native_hawaiian_or_other_pacific_islander",
"format": "Enumeration",
"required": "No",
"pii": "Yes",
"allowedValues": [
"true",
"false"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv."
},
{
"csvName": "white",
"sqlName": "white",
"format": "Enumeration",
"required": "No",
"pii": "Yes",
"allowedValues": [
"true",
"false"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv."
},
{
"csvName": "demographicRaceTwoOrMoreRaces",
"sqlName": "demographic_race_two_or_more_races",
"format": "Enumeration",
"required": "No",
"pii": "Yes",
"allowedValues": [
"true",
"false"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv."
},
{
"csvName": "hispanicOrLatinoEthnicity",
"sqlName": "hispanic_or_latino_ethnicity",
"format": "Enumeration",
"required": "No",
"pii": "Yes",
"allowedValues": [
"true",
"false"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv."
},
{
"csvName": "countryOfBirthCode",
"sqlName": "country_of_birth_code",
"format": "String",
"required": "No",
"pii": "Yes",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv."
},
{
"csvName": "stateOfBirthAbbreviation",
"sqlName": "state_of_birth_abbreviation",
"format": "String",
"required": "No",
"pii": "Yes",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv."
},
{
"csvName": "cityOfBirth",
"sqlName": "city_of_birth",
"format": "String",
"required": "No",
"pii": "Yes",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv."
},
{
"csvName": "publicSchoolResidenceStatus",
"sqlName": "public_school_residence_status",
"format": "String",
"required": "No",
"pii": "Yes",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for demographics.csv."
}
]
},
{
"fileName": "enrollments.csv",
"table": "oneroster.enrollments",
"rowKey": "(tenant_id, sourced_id)",
"routePath": "/enrollments",
"schemaPath": "schemas/csv/enrollments.schema.json",
"schemaUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/enrollments.schema.json",
"manifestProperty": "file.enrollments",
"requiredColumnsBulk": [
"sourcedId",
"classSourcedId",
"schoolSourcedId",
"userSourcedId",
"role"
],
"requiredColumnsDelta": [
"sourcedId",
"status",
"dateLastModified",
"classSourcedId",
"schoolSourcedId",
"userSourcedId",
"role"
],
"optionalColumns": [
"primary",
"beginDate",
"endDate"
],
"deltaRequiredColumns": [
"status",
"dateLastModified"
],
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"sourceFields": [
{
"csvName": "sourcedId",
"sqlName": "sourced_id",
"format": "GUID",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for enrollments.csv."
},
{
"csvName": "status",
"sqlName": "status",
"format": "Enumeration",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [
"active",
"tobedeleted"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for enrollments.csv."
},
{
"csvName": "dateLastModified",
"sqlName": "date_last_modified",
"format": "DateTime",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for enrollments.csv."
},
{
"csvName": "classSourcedId",
"sqlName": "class_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for enrollments.csv."
},
{
"csvName": "schoolSourcedId",
"sqlName": "school_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for enrollments.csv."
},
{
"csvName": "userSourcedId",
"sqlName": "user_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "Identifier",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for enrollments.csv."
},
{
"csvName": "role",
"sqlName": "role",
"format": "Enumeration",
"required": "Yes",
"pii": "Yes",
"allowedValues": [
"administrator",
"proctor",
"student",
"teacher"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for enrollments.csv."
},
{
"csvName": "primary",
"sqlName": "primary",
"format": "Enumeration",
"required": "No",
"pii": "No",
"allowedValues": [
"true",
"false"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for enrollments.csv."
},
{
"csvName": "beginDate",
"sqlName": "begin_date",
"format": "Date",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for enrollments.csv."
},
{
"csvName": "endDate",
"sqlName": "end_date",
"format": "Date",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for enrollments.csv."
}
]
},
{
"fileName": "lineItemLearningObjectiveIds.csv",
"table": "oneroster.line_item_learning_objective_ids",
"rowKey": "(tenant_id, sourced_id)",
"routePath": "/lineItemLearningObjectiveIds",
"schemaPath": "schemas/csv/lineItemLearningObjectiveIds.schema.json",
"schemaUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/lineItemLearningObjectiveIds.schema.json",
"manifestProperty": "file.lineItemLearningObjectiveIds",
"requiredColumnsBulk": [
"sourcedId",
"lineItemSourcedId",
"source",
"learningObjectiveId"
],
"requiredColumnsDelta": [
"sourcedId",
"status",
"dateLastModified",
"lineItemSourcedId",
"source",
"learningObjectiveId"
],
"optionalColumns": [],
"deltaRequiredColumns": [
"status",
"dateLastModified"
],
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"sourceFields": [
{
"csvName": "sourcedId",
"sqlName": "sourced_id",
"format": "GUID",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItemLearningObjectiveIds.csv."
},
{
"csvName": "status",
"sqlName": "status",
"format": "Enumeration",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [
"active",
"tobedeleted"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItemLearningObjectiveIds.csv."
},
{
"csvName": "dateLastModified",
"sqlName": "date_last_modified",
"format": "DateTime",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItemLearningObjectiveIds.csv."
},
{
"csvName": "lineItemSourcedId",
"sqlName": "line_item_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItemLearningObjectiveIds.csv."
},
{
"csvName": "source",
"sqlName": "source",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"case",
"unknown"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItemLearningObjectiveIds.csv."
},
{
"csvName": "learningObjectiveId",
"sqlName": "learning_objective_id",
"format": "String",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItemLearningObjectiveIds.csv."
}
]
},
{
"fileName": "lineItems.csv",
"table": "oneroster.line_items",
"rowKey": "(tenant_id, sourced_id)",
"routePath": "/lineItems",
"schemaPath": "schemas/csv/lineItems.schema.json",
"schemaUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/lineItems.schema.json",
"manifestProperty": "file.lineItems",
"requiredColumnsBulk": [
"sourcedId",
"title",
"assignDate",
"dueDate",
"classSourcedId",
"categorySourcedId",
"academicSessionSourcedId",
"schoolSourcedId"
],
"requiredColumnsDelta": [
"sourcedId",
"status",
"dateLastModified",
"title",
"assignDate",
"dueDate",
"classSourcedId",
"categorySourcedId",
"academicSessionSourcedId",
"schoolSourcedId"
],
"optionalColumns": [
"description",
"resultValueMin",
"resultValueMax"
],
"deltaRequiredColumns": [
"status",
"dateLastModified"
],
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"sourceFields": [
{
"csvName": "sourcedId",
"sqlName": "sourced_id",
"format": "GUID",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv."
},
{
"csvName": "status",
"sqlName": "status",
"format": "Enumeration",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [
"active",
"tobedeleted"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv."
},
{
"csvName": "dateLastModified",
"sqlName": "date_last_modified",
"format": "DateTime",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv."
},
{
"csvName": "title",
"sqlName": "title",
"format": "String",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv."
},
{
"csvName": "description",
"sqlName": "description",
"format": "String",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv."
},
{
"csvName": "assignDate",
"sqlName": "assign_date",
"format": "Date",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv."
},
{
"csvName": "dueDate",
"sqlName": "due_date",
"format": "Date",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv."
},
{
"csvName": "classSourcedId",
"sqlName": "class_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv."
},
{
"csvName": "categorySourcedId",
"sqlName": "category_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv."
},
{
"csvName": "academicSessionSourcedId",
"sqlName": "academic_session_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv."
},
{
"csvName": "resultValueMin",
"sqlName": "result_value_min",
"format": "Float",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv."
},
{
"csvName": "resultValueMax",
"sqlName": "result_value_max",
"format": "Float",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv."
},
{
"csvName": "schoolSourcedId",
"sqlName": "school_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItems.csv."
}
]
},
{
"fileName": "lineItemScoreScales.csv",
"table": "oneroster.line_item_score_scales",
"rowKey": "(tenant_id, sourced_id)",
"routePath": "/lineItemScoreScales",
"schemaPath": "schemas/csv/lineItemScoreScales.schema.json",
"schemaUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/lineItemScoreScales.schema.json",
"manifestProperty": "file.lineItemScoreScales",
"requiredColumnsBulk": [
"sourcedId",
"lineItemSourcedId",
"scoreScaleSourcedId"
],
"requiredColumnsDelta": [
"sourcedId",
"status",
"dateLastModified",
"lineItemSourcedId",
"scoreScaleSourcedId"
],
"optionalColumns": [
"title"
],
"deltaRequiredColumns": [
"status",
"dateLastModified"
],
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"sourceFields": [
{
"csvName": "sourcedId",
"sqlName": "sourced_id",
"format": "GUID",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItemScoreScales.csv."
},
{
"csvName": "status",
"sqlName": "status",
"format": "Enumeration",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [
"active",
"tobedeleted"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItemScoreScales.csv."
},
{
"csvName": "dateLastModified",
"sqlName": "date_last_modified",
"format": "DateTime",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItemScoreScales.csv."
},
{
"csvName": "title",
"sqlName": "title",
"format": "String",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItemScoreScales.csv."
},
{
"csvName": "lineItemSourcedId",
"sqlName": "line_item_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItemScoreScales.csv."
},
{
"csvName": "scoreScaleSourcedId",
"sqlName": "score_scale_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for lineItemScoreScales.csv."
}
]
},
{
"fileName": "orgs.csv",
"table": "oneroster.orgs",
"rowKey": "(tenant_id, sourced_id)",
"routePath": "/orgs",
"schemaPath": "schemas/csv/orgs.schema.json",
"schemaUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/orgs.schema.json",
"manifestProperty": "file.orgs",
"requiredColumnsBulk": [
"sourcedId",
"name",
"type"
],
"requiredColumnsDelta": [
"sourcedId",
"status",
"dateLastModified",
"name",
"type"
],
"optionalColumns": [
"identifier",
"parentSourcedId"
],
"deltaRequiredColumns": [
"status",
"dateLastModified"
],
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"sourceFields": [
{
"csvName": "sourcedId",
"sqlName": "sourced_id",
"format": "GUID",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for orgs.csv."
},
{
"csvName": "status",
"sqlName": "status",
"format": "Enumeration",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [
"active",
"tobedeleted"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for orgs.csv."
},
{
"csvName": "dateLastModified",
"sqlName": "date_last_modified",
"format": "DateTime",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for orgs.csv."
},
{
"csvName": "name",
"sqlName": "name",
"format": "String",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for orgs.csv."
},
{
"csvName": "type",
"sqlName": "type",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"department",
"school",
"district",
"local",
"state",
"national"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for orgs.csv."
},
{
"csvName": "identifier",
"sqlName": "identifier",
"format": "String",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for orgs.csv."
},
{
"csvName": "parentSourcedId",
"sqlName": "parent_sourced_id",
"format": "GUID Reference",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for orgs.csv."
}
]
},
{
"fileName": "resources.csv",
"table": "oneroster.resources",
"rowKey": "(tenant_id, sourced_id)",
"routePath": "/resources",
"schemaPath": "schemas/csv/resources.schema.json",
"schemaUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/resources.schema.json",
"manifestProperty": "file.resources",
"requiredColumnsBulk": [
"sourcedId",
"vendorResourceId"
],
"requiredColumnsDelta": [
"sourcedId",
"status",
"dateLastModified",
"vendorResourceId"
],
"optionalColumns": [
"title",
"roles",
"importance",
"vendorId",
"applicationId"
],
"deltaRequiredColumns": [
"status",
"dateLastModified"
],
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"sourceFields": [
{
"csvName": "sourcedId",
"sqlName": "sourced_id",
"format": "GUID",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resources.csv."
},
{
"csvName": "status",
"sqlName": "status",
"format": "Enumeration",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [
"active",
"tobedeleted"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resources.csv."
},
{
"csvName": "dateLastModified",
"sqlName": "date_last_modified",
"format": "DateTime",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resources.csv."
},
{
"csvName": "vendorResourceId",
"sqlName": "vendor_resource_id",
"format": "ID",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resources.csv."
},
{
"csvName": "title",
"sqlName": "title",
"format": "String",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resources.csv."
},
{
"csvName": "roles",
"sqlName": "roles",
"format": "Enumeration List",
"required": "No",
"pii": "No",
"allowedValues": [
"administrator",
"aide",
"guardian",
"parent",
"proctor",
"relative",
"student",
"teacher"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resources.csv."
},
{
"csvName": "importance",
"sqlName": "importance",
"format": "Enumeration",
"required": "No",
"pii": "No",
"allowedValues": [
"primary",
"secondary"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resources.csv."
},
{
"csvName": "vendorId",
"sqlName": "vendor_id",
"format": "ID",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resources.csv."
},
{
"csvName": "applicationId",
"sqlName": "application_id",
"format": "ID",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resources.csv."
}
]
},
{
"fileName": "resultLearningObjectiveIds.csv",
"table": "oneroster.result_learning_objective_ids",
"rowKey": "(tenant_id, sourced_id)",
"routePath": "/resultLearningObjectiveIds",
"schemaPath": "schemas/csv/resultLearningObjectiveIds.schema.json",
"schemaUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/resultLearningObjectiveIds.schema.json",
"manifestProperty": "file.resultLearningObjectiveIds",
"requiredColumnsBulk": [
"sourcedId",
"resultSourcedId",
"source",
"learningObjectiveId"
],
"requiredColumnsDelta": [
"sourcedId",
"status",
"dateLastModified",
"resultSourcedId",
"source",
"learningObjectiveId"
],
"optionalColumns": [
"score",
"textScore"
],
"deltaRequiredColumns": [
"status",
"dateLastModified"
],
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"sourceFields": [
{
"csvName": "sourcedId",
"sqlName": "sourced_id",
"format": "GUID",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resultLearningObjectiveIds.csv."
},
{
"csvName": "status",
"sqlName": "status",
"format": "Enumeration",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [
"active",
"tobedeleted"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resultLearningObjectiveIds.csv."
},
{
"csvName": "dateLastModified",
"sqlName": "date_last_modified",
"format": "DateTime",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resultLearningObjectiveIds.csv."
},
{
"csvName": "resultSourcedId",
"sqlName": "result_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resultLearningObjectiveIds.csv."
},
{
"csvName": "source",
"sqlName": "source",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"case",
"unknown"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resultLearningObjectiveIds.csv."
},
{
"csvName": "learningObjectiveId",
"sqlName": "learning_objective_id",
"format": "String",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resultLearningObjectiveIds.csv."
},
{
"csvName": "score",
"sqlName": "score",
"format": "Float",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resultLearningObjectiveIds.csv."
},
{
"csvName": "textScore",
"sqlName": "text_score",
"format": "String",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resultLearningObjectiveIds.csv."
}
]
},
{
"fileName": "results.csv",
"table": "oneroster.results",
"rowKey": "(tenant_id, sourced_id)",
"routePath": "/results",
"schemaPath": "schemas/csv/results.schema.json",
"schemaUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/results.schema.json",
"manifestProperty": "file.results",
"requiredColumnsBulk": [
"sourcedId",
"lineItemSourcedId",
"studentSourcedId",
"scoreStatus",
"scoreDate"
],
"requiredColumnsDelta": [
"sourcedId",
"status",
"dateLastModified",
"lineItemSourcedId",
"studentSourcedId",
"scoreStatus",
"scoreDate"
],
"optionalColumns": [
"score",
"comment",
"textScore",
"classSourcedId",
"inProgress",
"incomplete",
"late",
"missing"
],
"deltaRequiredColumns": [
"status",
"dateLastModified"
],
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"sourceFields": [
{
"csvName": "sourcedId",
"sqlName": "sourced_id",
"format": "GUID",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for results.csv."
},
{
"csvName": "status",
"sqlName": "status",
"format": "Enumeration",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [
"active",
"tobedeleted"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for results.csv."
},
{
"csvName": "dateLastModified",
"sqlName": "date_last_modified",
"format": "DateTime",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for results.csv."
},
{
"csvName": "lineItemSourcedId",
"sqlName": "line_item_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for results.csv."
},
{
"csvName": "studentSourcedId",
"sqlName": "student_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "Identifier",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for results.csv."
},
{
"csvName": "scoreStatus",
"sqlName": "score_status",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"exempt",
"fully graded",
"not submitted",
"partially graded",
"submitted"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for results.csv."
},
{
"csvName": "score",
"sqlName": "score",
"format": "Float",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for results.csv."
},
{
"csvName": "scoreDate",
"sqlName": "score_date",
"format": "Date",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for results.csv."
},
{
"csvName": "comment",
"sqlName": "comment",
"format": "String",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for results.csv."
},
{
"csvName": "textScore",
"sqlName": "text_score",
"format": "String",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for results.csv."
},
{
"csvName": "classSourcedId",
"sqlName": "class_sourced_id",
"format": "GUID Reference",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for results.csv."
},
{
"csvName": "inProgress",
"sqlName": "in_progress",
"format": "Enumeration",
"required": "No",
"pii": "No",
"allowedValues": [
"true",
"false"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for results.csv."
},
{
"csvName": "incomplete",
"sqlName": "incomplete",
"format": "Enumeration",
"required": "No",
"pii": "No",
"allowedValues": [
"true",
"false"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for results.csv."
},
{
"csvName": "late",
"sqlName": "late",
"format": "Enumeration",
"required": "No",
"pii": "No",
"allowedValues": [
"true",
"false"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for results.csv."
},
{
"csvName": "missing",
"sqlName": "missing",
"format": "Enumeration",
"required": "No",
"pii": "No",
"allowedValues": [
"true",
"false"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for results.csv."
}
]
},
{
"fileName": "resultScoreScales.csv",
"table": "oneroster.result_score_scales",
"rowKey": "(tenant_id, sourced_id)",
"routePath": "/resultScoreScales",
"schemaPath": "schemas/csv/resultScoreScales.schema.json",
"schemaUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/resultScoreScales.schema.json",
"manifestProperty": "file.resultScoreScales",
"requiredColumnsBulk": [
"sourcedId",
"resultSourcedId",
"scoreScaleSourcedId"
],
"requiredColumnsDelta": [
"sourcedId",
"status",
"dateLastModified",
"resultSourcedId",
"scoreScaleSourcedId"
],
"optionalColumns": [
"title"
],
"deltaRequiredColumns": [
"status",
"dateLastModified"
],
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"sourceFields": [
{
"csvName": "sourcedId",
"sqlName": "sourced_id",
"format": "GUID",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resultScoreScales.csv."
},
{
"csvName": "status",
"sqlName": "status",
"format": "Enumeration",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [
"active",
"tobedeleted"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resultScoreScales.csv."
},
{
"csvName": "dateLastModified",
"sqlName": "date_last_modified",
"format": "DateTime",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resultScoreScales.csv."
},
{
"csvName": "title",
"sqlName": "title",
"format": "String",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resultScoreScales.csv."
},
{
"csvName": "resultSourcedId",
"sqlName": "result_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resultScoreScales.csv."
},
{
"csvName": "scoreScaleSourcedId",
"sqlName": "score_scale_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for resultScoreScales.csv."
}
]
},
{
"fileName": "roles.csv",
"table": "oneroster.roles",
"rowKey": "(tenant_id, sourced_id)",
"routePath": "/roles",
"schemaPath": "schemas/csv/roles.schema.json",
"schemaUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/roles.schema.json",
"manifestProperty": "file.roles",
"requiredColumnsBulk": [
"sourcedId",
"userSourcedId",
"roleType",
"role",
"orgSourcedId"
],
"requiredColumnsDelta": [
"sourcedId",
"status",
"dateLastModified",
"userSourcedId",
"roleType",
"role",
"orgSourcedId"
],
"optionalColumns": [
"beginDate",
"endDate",
"userProfileSourcedId"
],
"deltaRequiredColumns": [
"status",
"dateLastModified"
],
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"sourceFields": [
{
"csvName": "sourcedId",
"sqlName": "sourced_id",
"format": "GUID",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for roles.csv."
},
{
"csvName": "status",
"sqlName": "status",
"format": "Enumeration",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [
"active",
"tobedeleted"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for roles.csv."
},
{
"csvName": "dateLastModified",
"sqlName": "date_last_modified",
"format": "DateTime",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for roles.csv."
},
{
"csvName": "userSourcedId",
"sqlName": "user_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "Identifier",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for roles.csv."
},
{
"csvName": "roleType",
"sqlName": "role_type",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"primary",
"secondary"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for roles.csv."
},
{
"csvName": "role",
"sqlName": "role",
"format": "Enumeration",
"required": "Yes",
"pii": "Yes",
"allowedValues": [
"aide",
"counselor",
"districtAdministrator",
"guardian",
"parent",
"principal",
"proctor",
"relative",
"siteAdministrator",
"student",
"systemAdministrator",
"teacher"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for roles.csv."
},
{
"csvName": "beginDate",
"sqlName": "begin_date",
"format": "Date",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for roles.csv."
},
{
"csvName": "endDate",
"sqlName": "end_date",
"format": "Date",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for roles.csv."
},
{
"csvName": "orgSourcedId",
"sqlName": "org_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for roles.csv."
},
{
"csvName": "userProfileSourcedId",
"sqlName": "user_profile_sourced_id",
"format": "GUID Reference",
"required": "No",
"pii": "Identifier",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for roles.csv."
}
]
},
{
"fileName": "scoreScales.csv",
"table": "oneroster.score_scales",
"rowKey": "(tenant_id, sourced_id)",
"routePath": "/scoreScales",
"schemaPath": "schemas/csv/scoreScales.schema.json",
"schemaUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/scoreScales.schema.json",
"manifestProperty": "file.scoreScales",
"requiredColumnsBulk": [
"sourcedId",
"title",
"type",
"orgSourcedId",
"courseSourcedId",
"classSourcedId",
"scoreScaleValue"
],
"requiredColumnsDelta": [
"sourcedId",
"status",
"dateLastModified",
"title",
"type",
"orgSourcedId",
"courseSourcedId",
"classSourcedId",
"scoreScaleValue"
],
"optionalColumns": [],
"deltaRequiredColumns": [
"status",
"dateLastModified"
],
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"sourceFields": [
{
"csvName": "sourcedId",
"sqlName": "sourced_id",
"format": "GUID",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for scoreScales.csv."
},
{
"csvName": "status",
"sqlName": "status",
"format": "Enumeration",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [
"active",
"tobedeleted"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for scoreScales.csv."
},
{
"csvName": "dateLastModified",
"sqlName": "date_last_modified",
"format": "DateTime",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for scoreScales.csv."
},
{
"csvName": "title",
"sqlName": "title",
"format": "String",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for scoreScales.csv."
},
{
"csvName": "type",
"sqlName": "type",
"format": "String",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for scoreScales.csv."
},
{
"csvName": "orgSourcedId",
"sqlName": "org_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for scoreScales.csv."
},
{
"csvName": "courseSourcedId",
"sqlName": "course_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for scoreScales.csv."
},
{
"csvName": "classSourcedId",
"sqlName": "class_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for scoreScales.csv."
},
{
"csvName": "scoreScaleValue",
"sqlName": "score_scale_value",
"format": "List of Strings",
"required": "Yes",
"pii": "No",
"allowedValues": [
"Pass:50"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for scoreScales.csv."
}
]
},
{
"fileName": "userProfiles.csv",
"table": "oneroster.user_profiles",
"rowKey": "(tenant_id, sourced_id)",
"routePath": "/userProfiles",
"schemaPath": "schemas/csv/userProfiles.schema.json",
"schemaUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/userProfiles.schema.json",
"manifestProperty": "file.userProfiles",
"requiredColumnsBulk": [
"sourcedId",
"userSourcedId",
"profileType",
"vendorId",
"credentialType",
"username"
],
"requiredColumnsDelta": [
"sourcedId",
"status",
"dateLastModified",
"userSourcedId",
"profileType",
"vendorId",
"credentialType",
"username"
],
"optionalColumns": [
"applicationId",
"description",
"password"
],
"deltaRequiredColumns": [
"status",
"dateLastModified"
],
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"sourceFields": [
{
"csvName": "sourcedId",
"sqlName": "sourced_id",
"format": "GUID",
"required": "Yes",
"pii": "Identifier",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for userProfiles.csv."
},
{
"csvName": "status",
"sqlName": "status",
"format": "Enumeration",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [
"active",
"tobedeleted"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for userProfiles.csv."
},
{
"csvName": "dateLastModified",
"sqlName": "date_last_modified",
"format": "DateTime",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for userProfiles.csv."
},
{
"csvName": "userSourcedId",
"sqlName": "user_sourced_id",
"format": "GUID",
"required": "Yes",
"pii": "Identifier",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for userProfiles.csv."
},
{
"csvName": "profileType",
"sqlName": "profile_type",
"format": "String",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for userProfiles.csv."
},
{
"csvName": "vendorId",
"sqlName": "vendor_id",
"format": "String",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for userProfiles.csv."
},
{
"csvName": "applicationId",
"sqlName": "application_id",
"format": "String",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for userProfiles.csv."
},
{
"csvName": "description",
"sqlName": "description",
"format": "String",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for userProfiles.csv."
},
{
"csvName": "credentialType",
"sqlName": "credential_type",
"format": "String",
"required": "Yes",
"pii": "Credential",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for userProfiles.csv."
},
{
"csvName": "username",
"sqlName": "username",
"format": "String",
"required": "Yes",
"pii": "Yes",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for userProfiles.csv."
},
{
"csvName": "password",
"sqlName": "password",
"format": "String",
"required": "No",
"pii": "Credential",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for userProfiles.csv."
}
]
},
{
"fileName": "userResources.csv",
"table": "oneroster.user_resources",
"rowKey": "(tenant_id, sourced_id)",
"routePath": "/userResources",
"schemaPath": "schemas/csv/userResources.schema.json",
"schemaUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/userResources.schema.json",
"manifestProperty": "file.userResources",
"requiredColumnsBulk": [
"sourcedId",
"userSourcedId",
"resourceSourcedId"
],
"requiredColumnsDelta": [
"sourcedId",
"status",
"dateLastModified",
"userSourcedId",
"resourceSourcedId"
],
"optionalColumns": [
"orgSourcedId",
"classSourcedId"
],
"deltaRequiredColumns": [
"status",
"dateLastModified"
],
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"sourceFields": [
{
"csvName": "sourcedId",
"sqlName": "sourced_id",
"format": "GUID",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for userResources.csv."
},
{
"csvName": "status",
"sqlName": "status",
"format": "Enumeration",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [
"active",
"tobedeleted"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for userResources.csv."
},
{
"csvName": "dateLastModified",
"sqlName": "date_last_modified",
"format": "DateTime",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for userResources.csv."
},
{
"csvName": "userSourcedId",
"sqlName": "user_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "Identifier",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for userResources.csv."
},
{
"csvName": "orgSourcedId",
"sqlName": "org_sourced_id",
"format": "GUID Reference",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for userResources.csv."
},
{
"csvName": "classSourcedId",
"sqlName": "class_sourced_id",
"format": "GUID Reference",
"required": "No",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for userResources.csv."
},
{
"csvName": "resourceSourcedId",
"sqlName": "resource_sourced_id",
"format": "GUID Reference",
"required": "Yes",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for userResources.csv."
}
]
},
{
"fileName": "users.csv",
"table": "oneroster.users",
"rowKey": "(tenant_id, sourced_id)",
"routePath": "/users",
"schemaPath": "schemas/csv/users.schema.json",
"schemaUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/users.schema.json",
"manifestProperty": "file.users",
"requiredColumnsBulk": [
"sourcedId",
"enabledUser",
"username",
"givenName",
"familyName"
],
"requiredColumnsDelta": [
"sourcedId",
"status",
"dateLastModified",
"enabledUser",
"username",
"givenName",
"familyName"
],
"optionalColumns": [
"userIds",
"middleName",
"identifier",
"email",
"sms",
"phone",
"agentSourcedIds",
"grades",
"password",
"userMasterIdentifier",
"preferredGivenName",
"preferredMiddleName",
"preferredFamilyName",
"primaryOrgSourcedId",
"pronouns"
],
"deltaRequiredColumns": [
"status",
"dateLastModified"
],
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"sourceFields": [
{
"csvName": "sourcedId",
"sqlName": "sourced_id",
"format": "GUID",
"required": "Yes",
"pii": "Identifier",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for users.csv."
},
{
"csvName": "status",
"sqlName": "status",
"format": "Enumeration",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [
"active",
"tobedeleted"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for users.csv."
},
{
"csvName": "dateLastModified",
"sqlName": "date_last_modified",
"format": "DateTime",
"required": "Yes for Delta",
"pii": "No",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for users.csv."
},
{
"csvName": "enabledUser",
"sqlName": "enabled_user",
"format": "Enumeration",
"required": "Yes",
"pii": "No",
"allowedValues": [
"true",
"false"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for users.csv."
},
{
"csvName": "username",
"sqlName": "username",
"format": "String",
"required": "Yes",
"pii": "Credential",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for users.csv."
},
{
"csvName": "userIds",
"sqlName": "user_ids",
"format": "List of Strings",
"required": "No",
"pii": "Identifier",
"allowedValues": [
"LDAP:Id"
],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for users.csv."
},
{
"csvName": "givenName",
"sqlName": "given_name",
"format": "String",
"required": "Yes",
"pii": "Yes",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for users.csv."
},
{
"csvName": "familyName",
"sqlName": "family_name",
"format": "String",
"required": "Yes",
"pii": "Yes",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for users.csv."
},
{
"csvName": "middleName",
"sqlName": "middle_name",
"format": "String",
"required": "No",
"pii": "Yes",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for users.csv."
},
{
"csvName": "identifier",
"sqlName": "identifier",
"format": "String",
"required": "No",
"pii": "Identifier",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for users.csv."
},
{
"csvName": "email",
"sqlName": "email",
"format": "String",
"required": "No",
"pii": "Yes",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for users.csv."
},
{
"csvName": "sms",
"sqlName": "sms",
"format": "String",
"required": "No",
"pii": "Yes",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for users.csv."
},
{
"csvName": "phone",
"sqlName": "phone",
"format": "String",
"required": "No",
"pii": "Yes",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for users.csv."
},
{
"csvName": "agentSourcedIds",
"sqlName": "agent_sourced_ids",
"format": "List of GUID References",
"required": "No",
"pii": "Identifier",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for users.csv."
},
{
"csvName": "grades",
"sqlName": "grades",
"format": "List of Strings",
"required": "No",
"pii": "Yes",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for users.csv."
},
{
"csvName": "password",
"sqlName": "password",
"format": "String",
"required": "No",
"pii": "Credential",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for users.csv."
},
{
"csvName": "userMasterIdentifier",
"sqlName": "user_master_identifier",
"format": "String",
"required": "No",
"pii": "Identifier",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for users.csv."
},
{
"csvName": "preferredGivenName",
"sqlName": "preferred_given_name",
"format": "String",
"required": "No",
"pii": "Yes",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for users.csv."
},
{
"csvName": "preferredMiddleName",
"sqlName": "preferred_middle_name",
"format": "String",
"required": "No",
"pii": "Yes",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for users.csv."
},
{
"csvName": "preferredFamilyName",
"sqlName": "preferred_family_name",
"format": "String",
"required": "No",
"pii": "Yes",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for users.csv."
},
{
"csvName": "primaryOrgSourcedId",
"sqlName": "primary_org_sourced_id",
"format": "GUID Reference",
"required": "No",
"pii": "Identifier",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for users.csv."
},
{
"csvName": "pronouns",
"sqlName": "pronouns",
"format": "String",
"required": "No",
"pii": "Yes",
"allowedValues": [],
"sourceBasis": "1EdTech OneRoster CSV Binding 1.2.1 table for users.csv."
}
]
}
],
"csvPackageContract": {
"schemaIndexPath": "schemas/csv/index.json",
"schemaIndexUrl": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/schemas/csv/index.json",
"validationProblem": {
"status": 422,
"code": "oneroster:source_validation_failed",
"type": "https://platform.timeback.com/problems/oneroster/source-validation-failed",
"fieldErrorsPathStyle": "files.<fileName>.rows[<row>].<column>"
},
"packageRules": [
"manifest.csv is required at the ZIP root.",
"Every data CSV file is optional at package level but manifest-controlled: file.* = bulk or delta requires the matching root CSV; file.* = absent forbids it.",
"Data CSV headers must preserve the exact OneRoster column order. metadata.* columns may be appended after standard columns.",
"Bulk rows leave status and dateLastModified blank; delta rows populate both.",
"Each included data CSV has at least one data row."
],
"bootstrapMinimumFiles": [
"manifest.csv",
"orgs.csv",
"academicSessions.csv",
"users.csv",
"courses.csv",
"classes.csv",
"enrollments.csv"
],
"validationRules": [
{
"ruleId": "csv.package.must_be_zip",
"status": 422,
"code": "oneroster:source_validation_failed",
"appliesTo": "ZIP package",
"triggersWhen": "The import body is not a readable ZIP package, has corrupt compressed entries, or cannot be parsed as a root-level OneRoster package.",
"fieldErrorPath": "package"
},
{
"ruleId": "csv.package.root_files_only",
"status": 422,
"code": "oneroster:source_validation_failed",
"appliesTo": "ZIP package",
"triggersWhen": "A CSV file is nested inside a directory, the package contains duplicate CSV file names, or it contains more than one copy of any OneRoster CSV file.",
"fieldErrorPath": "package.files"
},
{
"ruleId": "csv.manifest.required",
"status": 422,
"code": "oneroster:source_validation_failed",
"appliesTo": "manifest.csv",
"triggersWhen": "manifest.csv is missing, does not have header propertyName,value, has duplicate propertyName rows, or omits any required manifest property.",
"fieldErrorPath": "files.manifest.csv"
},
{
"ruleId": "csv.manifest.version",
"status": 422,
"code": "oneroster:source_validation_failed",
"appliesTo": "manifest.csv",
"triggersWhen": "manifest.version is not 1.0 or oneroster.version is not 1.2 for this OneRoster 1EdTech surface.",
"fieldErrorPath": "files.manifest.csv.rows[*].value"
},
{
"ruleId": "csv.manifest.file_presence_mismatch",
"status": 422,
"code": "oneroster:source_validation_failed",
"appliesTo": "manifest.csv and package root",
"triggersWhen": "A file.* property is bulk or delta but the matching CSV is absent, or the property is absent but that CSV file is present.",
"fieldErrorPath": "files.manifest.csv.rows[file.*]"
},
{
"ruleId": "csv.header.exact_standard_columns",
"status": 422,
"code": "oneroster:source_validation_failed",
"appliesTo": "Every included data CSV",
"triggersWhen": "The header row is missing, has duplicate names, omits a OneRoster column, changes column order, includes an unknown non-metadata column, or places metadata.* before the standard columns.",
"fieldErrorPath": "files.<fileName>.header"
},
{
"ruleId": "csv.rows.not_empty",
"status": 422,
"code": "oneroster:source_validation_failed",
"appliesTo": "Every included data CSV",
"triggersWhen": "A file declared bulk or delta has a valid header but no data rows.",
"fieldErrorPath": "files.<fileName>.rows"
},
{
"ruleId": "csv.required_cell.present",
"status": 422,
"code": "oneroster:source_validation_failed",
"appliesTo": "Every included data CSV",
"triggersWhen": "A Yes column is blank, or a Yes for Delta column is blank in delta mode.",
"fieldErrorPath": "files.<fileName>.rows[<row>].<column>"
},
{
"ruleId": "csv.bulk_delta.status_cells",
"status": 422,
"code": "oneroster:source_validation_failed",
"appliesTo": "Every included data CSV except manifest.csv",
"triggersWhen": "A bulk file supplies status/dateLastModified values, a delta file omits them, or status is not active/tobedeleted.",
"fieldErrorPath": "files.<fileName>.rows[<row>].status"
},
{
"ruleId": "csv.enum.allowed_value",
"status": 422,
"code": "oneroster:source_validation_failed",
"appliesTo": "Every enum or controlled-value field",
"triggersWhen": "A controlled value differs from the documented vocabulary by spelling, case, punctuation, or spacing.",
"fieldErrorPath": "files.<fileName>.rows[<row>].<column>"
},
{
"ruleId": "csv.format.parseable",
"status": 422,
"code": "oneroster:source_validation_failed",
"appliesTo": "Date, DateTime, Year, Float, Integer, GUID, list, and metadata cells",
"triggersWhen": "A cell cannot be parsed according to the field's documented format, including RFC4180 list cells and W3C/ISO 8601 DateTime values.",
"fieldErrorPath": "files.<fileName>.rows[<row>].<column>"
},
{
"ruleId": "csv.sourced_id.unique",
"status": 422,
"code": "oneroster:source_validation_failed",
"appliesTo": "Every sourcedId-bearing data CSV",
"triggersWhen": "Two rows in the same tenant/import package use the same sourcedId for the same collection.",
"fieldErrorPath": "files.<fileName>.rows[<row>].sourcedId"
},
{
"ruleId": "csv.reference.present",
"status": 422,
"code": "oneroster:source_validation_failed",
"appliesTo": "Every GUID Reference and List of GUID Reference field",
"triggersWhen": "A sourcedId reference points to a missing bundled row or a missing existing tenant row required by the dependency matrix.",
"fieldErrorPath": "files.<fileName>.rows[<row>].<referenceColumn>"
}
]
},
"problemCategories": [
{
"category": "oneroster:authentication_required",
"statuses": [
401
],
"branch_guidance": "Refresh or supply a Bearer JWT; do not retry the same unauthenticated request."
},
{
"category": "oneroster:tenant_forbidden",
"statuses": [
403,
404
],
"branch_guidance": "Stop cross-tenant access; the token is valid but not authorized for the route tenant or visible resource."
},
{
"category": "oneroster:validation_failed",
"statuses": [
400
],
"branch_guidance": "Fix request shape, query controls, headers, or non-CSV JSON body fields before retrying. CSV package source validation uses oneroster:source_validation_failed with HTTP 422."
},
{
"category": "oneroster:dependency_missing",
"statuses": [
400
],
"branch_guidance": "For read and per-resource routes, load prerequisite records before retrying. For CSV package imports, dangling bundled-file sourcedId references use oneroster:source_validation_failed with HTTP 422 and a fieldErrors ruleId."
},
{
"category": "oneroster:score_scale_required",
"statuses": [
400
],
"branch_guidance": "Add a same-tenant lineItemScoreScales binding for the result lineItem, or an explicit resultScoreScales binding for the result, before retrying."
},
{
"category": "oneroster:score_scale_ambiguous",
"statuses": [
400
],
"branch_guidance": "Select a single effective scoreScale when a result or lineItem has multiple candidate score scales, and align textScore with that scale."
},
{
"category": "oneroster:idempotency_conflict",
"statuses": [
409
],
"branch_guidance": "Use a new Idempotency-Key or replay the exact original request body."
},
{
"category": "oneroster:precondition_required",
"statuses": [
428
],
"branch_guidance": "For per-resource updates/deletes, refetch the resource ETag and send If-Match."
},
{
"category": "oneroster:not_found",
"statuses": [
404
],
"branch_guidance": "Check tenant scope and the requested OneRoster identifier; avoid revealing cross-tenant existence."
},
{
"category": "oneroster:rate_limited",
"statuses": [
429
],
"branch_guidance": "Honor Retry-After, keep the same idempotency key for in-flight writes, and back off."
},
{
"category": "oneroster:server_error",
"statuses": [
"5xx"
],
"branch_guidance": "Retry only when safe; preserve request and trace IDs for support."
},
{
"category": "oneroster:source_validation_failed",
"statuses": [
422
],
"branch_guidance": "Fix the ZIP, manifest.csv, per-file header, required cells, enum values, bulk/delta status cells, or dangling sourcedId references named in fieldErrors[]."
}
],
"concurrencyPolicy": {
"current_write_surface": "The OneRoster 1EdTech architecture ships CSV import/export plus per-resource create, update, and delete routes for the supported OneRoster collections.",
"import_export_if_match_requirement": "If-Match is not required on import/export commands because they create batch evidence rather than overwriting a user-editable resource.",
"per_resource_update_requirement": "Per-resource update and delete routes must return ETag validators on reads and require If-Match on mutation per platform PITD-007 and OITD-104.",
"missing_precondition_status": 428,
"stale_validator_statuses": [
412,
409
],
"itd": "oitd-012-idempotency-concurrency",
"axis_itd": "oitd-104-concurrency-model",
"platform_itd": "pitd-007-idempotency-and-concurrency"
},
"operationalPosture": {
"itd": "oitd-016-operational-posture",
"inherits_platform_itd": "pitd-010-observability-and-slos",
"slo_targets": {
"availability": "99.5 percent monthly availability for customer APIs",
"read_latency": "p95 read latency under 500 ms excluding large exports",
"write_latency": "p95 write latency under 2 s excluding documented asynchronous work",
"privacy": "zero tolerated confirmed PII leaks in logs or Problems"
},
"sla_posture": "No contractual SLA is published by the first OneRoster 1EdTech surface.",
"rate_limit_posture": "No hard per-tenant quota is published by the first OneRoster 1EdTech surface.",
"capacity_protection": {
"status": 429,
"headers": [
"Retry-After"
],
"problem_category": "oneroster:rate_limited",
"retry_guidance": "Back off and reuse the same Idempotency-Key for an in-flight retryable write."
}
},
"emptyTenantBootstrap": {
"itd": "oitd-017-empty-tenant-bootstrap",
"required_customer_website_section": "empty-tenant production bootstrap",
"steps": [
"Start with a tenant-scoped production token.",
"Prepare a bulk package with manifest.csv.",
"Author orgs.csv and academicSessions.csv first.",
"Add users.csv.",
"Add courses.csv, classes.csv, and enrollments.csv after their referenced orgs, users, and academic sessions exist.",
"Add optional demographics, resources, gradebook, and score files only after referenced rows exist.",
"POST the package to /imports/csv with Idempotency-Key.",
"Verify GET reads for orgs, users, academicSessions, courses, classes, and enrollments.",
"POST /exports/csv to produce evidence that the tenant can round-trip."
],
"minimum_files": [
"manifest.csv",
"orgs.csv",
"academicSessions.csv",
"users.csv",
"courses.csv",
"classes.csv",
"enrollments.csv"
]
}
}enumFields
[
{
"table": "platform.tenant",
"field": "status",
"csvName": null,
"anchor": "field-platform-tenant-status",
"sourceClass": "Inherited platform shared table",
"values": [
{
"value": "provisioning",
"meaning": "The tenant row exists, but required setup such as auth, domains, or integrations is not complete.",
"useWhen": "Create this before the tenant can ingest content, launch learner activity, or receive production traffic.",
"invalidWhen": "Used for a tenant that is already accepting module writes.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum tenant_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-003-shared-tenant-model"
}
},
{
"value": "active",
"meaning": "Normal customer state. Tenant-scoped reads and writes may proceed when the JWT tenant claim and role checks pass.",
"useWhen": "The tenant is fully configured and in good standing.",
"invalidWhen": "Used while required onboarding, suspension, or archival conditions are unresolved.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum tenant_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-003-shared-tenant-model"
}
},
{
"value": "suspended",
"meaning": "The tenant is known but temporarily blocked from ordinary customer writes.",
"useWhen": "Billing, security, contract, or incident response requires stopping writes without deleting history.",
"invalidWhen": "Used to hide a tenant that should be permanently archived or deleted through a documented retention flow.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum tenant_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-003-shared-tenant-model"
}
},
{
"value": "archived",
"meaning": "The tenant is retained for history and audit, but new module writes are rejected except explicit maintenance or export flows.",
"useWhen": "A customer relationship ended or a workspace was retired and records must remain queryable for retention.",
"invalidWhen": "Used as a soft substitute for learner-runtime deletion, which belongs to module-specific learner data flows.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum tenant_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-003-shared-tenant-model"
}
}
]
},
{
"table": "platform.idempotency_key",
"field": "module",
"csvName": null,
"anchor": "field-platform-idempotency-key-module",
"sourceClass": "Inherited platform shared table",
"values": [
{
"value": "platform",
"meaning": "Shared platform substrate, documentation, auth, idempotency, audit, and cross-module operations.",
"useWhen": "The operation belongs to the platform surface itself rather than a standards module.",
"invalidWhen": "Used for QTI, OneRoster, Caliper, or CASE resource mutations that should remain module-attributed.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum module_key.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}
},
{
"value": "qti",
"meaning": "Question and Test Interoperability module namespace. The namespace remains valid while the QTI 1EdTech surface is under reconciliation.",
"useWhen": "The operation touches QTI content, runtime, conformance, or Alpha assessment facade records and the calling surface is itself allowed by the current release state.",
"invalidWhen": "Used as a release-status signal, or used for OneRoster roster records, Caliper event records, CASE standards records, or platform-only administrative operations.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum module_key.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}
},
{
"value": "oneroster",
"meaning": "OneRoster module namespace for roster, enrollment, class, school, user, course, and academic-session contracts.",
"useWhen": "The operation touches OneRoster-owned roster data, import/export work, conformance evidence, or the OneRoster integration app.",
"invalidWhen": "Used for QTI assessment resources, Caliper event telemetry, or platform-only tenant administration.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum module_key.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}
},
{
"value": "caliper",
"meaning": "Caliper Analytics module namespace for event telemetry and metric-profile contracts.",
"useWhen": "The operation touches Caliper event ingest, metric-profile validation, event-store reads, or the Caliper integration app.",
"invalidWhen": "Used for QTI assessment content, OneRoster roster resources, or platform-only tenant administration.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum module_key.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}
},
{
"value": "case",
"meaning": "CASE module namespace for CFDocument, CFItem, CFAssociation, CFPackage, and Alignment contracts.",
"useWhen": "The operation touches CASE standards data, package import/export, graph reads, external-ID alignment, or the CASE integration app.",
"invalidWhen": "Used for QTI assessment content, OneRoster roster resources, Caliper telemetry, or platform-only tenant administration.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum module_key.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}
}
]
},
{
"table": "platform.idempotency_key",
"field": "surface",
"csvName": null,
"anchor": "field-platform-idempotency-key-surface",
"sourceClass": "Inherited platform shared table",
"values": [
{
"value": "platform",
"meaning": "The platform substrate surface.",
"useWhen": "The route, audit row, idempotency scope, or dictionary entry is cross-module rather than standard-specific.",
"invalidWhen": "Used to mask whether a QTI expert or Alpha customer endpoint produced a module action.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum surface_code.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-015-surface-model-and-derivation"
}
},
{
"value": "1edtech",
"meaning": "Expert standards surface that follows a 1EdTech specification exactly except documented gap fills.",
"useWhen": "The operation is on an expert API or documentation surface for a 1EdTech standard.",
"invalidWhen": "Used for Alpha facade calls that rename, restrict, cut, or extend standard language.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum surface_code.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-015-surface-model-and-derivation"
}
},
{
"value": "alpha",
"meaning": "Plain-language customer and app-builder surface over the same persistence model.",
"useWhen": "The operation comes from an Alpha API or documentation surface.",
"invalidWhen": "Used for expert-only conformance mutation, standards package internals, or release tooling.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum surface_code.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-015-surface-model-and-derivation"
}
}
]
},
{
"table": "platform.idempotency_key",
"field": "method",
"csvName": null,
"anchor": "field-platform-idempotency-key-method",
"sourceClass": "Inherited platform shared table",
"values": [
{
"value": "POST",
"meaning": "Create, import, upload, command, or async job operation where a network retry might duplicate work.",
"useWhen": "The route creates work or resources and the customer site documents Idempotency-Key.",
"invalidWhen": "Used for a read-only GET.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum mutation_http_method.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
},
{
"value": "PUT",
"meaning": "Full replacement mutation that may be retried by a client.",
"useWhen": "The route is documented as retryable and uses If-Match or another validator if it can overwrite user work.",
"invalidWhen": "Used without a request hash and concurrency rule.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum mutation_http_method.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
},
{
"value": "PATCH",
"meaning": "Partial update mutation that may be retried by a client.",
"useWhen": "The route is documented as retryable and a duplicate patch must not apply twice.",
"invalidWhen": "Used for non-repeatable patch semantics that the customer site has not made idempotent.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum mutation_http_method.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
},
{
"value": "DELETE",
"meaning": "Delete or redaction command where retrying should not produce a second distinct deletion event.",
"useWhen": "The route documents retry behavior and audit requirements.",
"invalidWhen": "Used for implicit retention cleanup that is not customer-visible or not keyed by Idempotency-Key.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum mutation_http_method.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
}
]
},
{
"table": "platform.idempotency_key",
"field": "status",
"csvName": null,
"anchor": "field-platform-idempotency-key-status",
"sourceClass": "Inherited platform shared table",
"values": [
{
"value": "in_progress",
"meaning": "The first request claimed the key and the operation has not reached a final replayable outcome.",
"useWhen": "The handler starts work and stores a lock before performing the mutation.",
"invalidWhen": "Retained after locked_until has passed without takeover, completion, or failure handling.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum idempotency_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
},
{
"value": "completed",
"meaning": "The operation reached a successful replayable outcome. Same key plus same request hash returns the stored response.",
"useWhen": "The mutation committed and response_status/response_body or resource pointers are safe to replay.",
"invalidWhen": "Used when the committed resource is unknown or the stored response contains secrets or learner PII.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum idempotency_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
},
{
"value": "failed_permanent",
"meaning": "The original request reached a final caller-fixable error such as validation, authorization, conflict, or precondition failure.",
"useWhen": "Replaying the same invalid request should return the same safe Problem response instead of re-running side effects.",
"invalidWhen": "Used for transient 5xx failures that should be retried after the lock expires.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum idempotency_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
},
{
"value": "failed_transient",
"meaning": "The first attempt failed before a stable outcome could be recorded.",
"useWhen": "A dependency or server failure prevents safe replay and the same request may take over after locked_until.",
"invalidWhen": "Used after a database mutation might have committed without a response.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum idempotency_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
},
{
"value": "expired",
"meaning": "The key is retained only for audit or conflict explanation after its replay window has ended.",
"useWhen": "expires_at has passed and the platform cleanup policy marks the row no longer replayable.",
"invalidWhen": "Used to avoid returning a known conflict inside the documented replay window.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum idempotency_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-007-idempotency-and-concurrency"
}
}
]
},
{
"table": "platform.audit_log",
"field": "module",
"csvName": null,
"anchor": "field-platform-audit-log-module",
"sourceClass": "Inherited platform shared table",
"values": [
{
"value": "platform",
"meaning": "Shared platform substrate, documentation, auth, idempotency, audit, and cross-module operations.",
"useWhen": "The operation belongs to the platform surface itself rather than a standards module.",
"invalidWhen": "Used for QTI, OneRoster, Caliper, or CASE resource mutations that should remain module-attributed.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum module_key.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}
},
{
"value": "qti",
"meaning": "Question and Test Interoperability module namespace. The namespace remains valid while the QTI 1EdTech surface is under reconciliation.",
"useWhen": "The operation touches QTI content, runtime, conformance, or Alpha assessment facade records and the calling surface is itself allowed by the current release state.",
"invalidWhen": "Used as a release-status signal, or used for OneRoster roster records, Caliper event records, CASE standards records, or platform-only administrative operations.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum module_key.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}
},
{
"value": "oneroster",
"meaning": "OneRoster module namespace for roster, enrollment, class, school, user, course, and academic-session contracts.",
"useWhen": "The operation touches OneRoster-owned roster data, import/export work, conformance evidence, or the OneRoster integration app.",
"invalidWhen": "Used for QTI assessment resources, Caliper event telemetry, or platform-only tenant administration.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum module_key.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}
},
{
"value": "caliper",
"meaning": "Caliper Analytics module namespace for event telemetry and metric-profile contracts.",
"useWhen": "The operation touches Caliper event ingest, metric-profile validation, event-store reads, or the Caliper integration app.",
"invalidWhen": "Used for QTI assessment content, OneRoster roster resources, or platform-only tenant administration.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum module_key.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}
},
{
"value": "case",
"meaning": "CASE module namespace for CFDocument, CFItem, CFAssociation, CFPackage, and Alignment contracts.",
"useWhen": "The operation touches CASE standards data, package import/export, graph reads, external-ID alignment, or the CASE integration app.",
"invalidWhen": "Used for QTI assessment content, OneRoster roster resources, Caliper telemetry, or platform-only tenant administration.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum module_key.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-002-module-schema-boundaries"
}
}
]
},
{
"table": "platform.audit_log",
"field": "surface",
"csvName": null,
"anchor": "field-platform-audit-log-surface",
"sourceClass": "Inherited platform shared table",
"values": [
{
"value": "platform",
"meaning": "The platform substrate surface.",
"useWhen": "The route, audit row, idempotency scope, or dictionary entry is cross-module rather than standard-specific.",
"invalidWhen": "Used to mask whether a QTI expert or Alpha customer endpoint produced a module action.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum surface_code.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-015-surface-model-and-derivation"
}
},
{
"value": "1edtech",
"meaning": "Expert standards surface that follows a 1EdTech specification exactly except documented gap fills.",
"useWhen": "The operation is on an expert API or documentation surface for a 1EdTech standard.",
"invalidWhen": "Used for Alpha facade calls that rename, restrict, cut, or extend standard language.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum surface_code.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-015-surface-model-and-derivation"
}
},
{
"value": "alpha",
"meaning": "Plain-language customer and app-builder surface over the same persistence model.",
"useWhen": "The operation comes from an Alpha API or documentation surface.",
"invalidWhen": "Used for expert-only conformance mutation, standards package internals, or release tooling.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum surface_code.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-015-surface-model-and-derivation"
}
}
]
},
{
"table": "platform.audit_log",
"field": "action",
"csvName": null,
"anchor": "field-platform-audit-log-action",
"sourceClass": "Inherited platform shared table",
"values": [
{
"value": "create",
"meaning": "A resource was created synchronously.",
"useWhen": "The operation inserts a module or platform row that customers can later read.",
"invalidWhen": "Used for import jobs that should be action=import.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_action.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "update",
"meaning": "An existing resource was changed.",
"useWhen": "A mutable customer or administrative field changes.",
"invalidWhen": "Used for append-only learner submission creation.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_action.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "delete",
"meaning": "A reusable resource or tenant-scoped object was deleted or archived.",
"useWhen": "The operation removes or retires content, settings, or a non-runtime record.",
"invalidWhen": "Used for learner-runtime deletion, which must be runtime_delete.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_action.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "import",
"meaning": "A package, roster, event batch, or standards bundle was accepted for ingest.",
"useWhen": "The operation takes external source material and projects it into module tables.",
"invalidWhen": "Used for manual object creation that has no source package or batch.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_action.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "export",
"meaning": "A customer or service-role actor generated an exportable data view.",
"useWhen": "The operation produces a file, report, or export job with customer data.",
"invalidWhen": "Used for ordinary API reads.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_action.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "read_privileged",
"meaning": "A read occurred through service-role, support, release, or other privileged authority.",
"useWhen": "The read would not be available to an ordinary tenant-scoped caller.",
"invalidWhen": "Used for normal customer GETs that are already covered by access logs.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_action.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "runtime_delete",
"meaning": "Learner runtime data was deleted or redacted under a student-data lifecycle rule.",
"useWhen": "A student, parent, school, or retention process removes learner-specific state.",
"invalidWhen": "Used for reusable content deletion.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_action.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "conformance_change",
"meaning": "A release or expert path changed conformance evidence.",
"useWhen": "A conformance run starts, finishes, fails, or changes trust-relevant assertions.",
"invalidWhen": "Used for read-only Alpha trust status views.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_action.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "trust_change",
"meaning": "Public trust status changed as a result of evidence, rollback, or release gating.",
"useWhen": "A customer-visible trust summary moves between trusted, degraded, failed, or unknown states.",
"invalidWhen": "Used for ordinary audit actions that do not change public trust.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_action.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "authz_denied",
"meaning": "An authenticated caller was denied by tenant, role, scope, service-role, or operation authorization.",
"useWhen": "The request had an authenticated subject but failed authorization.",
"invalidWhen": "Used for missing or invalid authentication; those are security logs, not tenant audit rows.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_action.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "maintenance",
"meaning": "A named platform or service-role maintenance operation touched durable state.",
"useWhen": "Backfills, compatibility migrations, cleanup, or incident response make controlled changes.",
"invalidWhen": "Used as a generic label when a more specific action exists.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_action.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
}
]
},
{
"table": "platform.audit_log",
"field": "outcome",
"csvName": null,
"anchor": "field-platform-audit-log-outcome",
"sourceClass": "Inherited platform shared table",
"values": [
{
"value": "accepted",
"meaning": "The platform accepted work for asynchronous processing and returned a trackable resource.",
"useWhen": "The HTTP status is usually 202 and later completion is represented by another row or resource state.",
"invalidWhen": "Used after the work has already succeeded or failed.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_outcome.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "succeeded",
"meaning": "The action completed successfully.",
"useWhen": "The HTTP status is 2xx and the intended state transition committed.",
"invalidWhen": "Used when only validation passed but async work is still pending.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_outcome.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "failed_validation",
"meaning": "The action was rejected because caller-supplied data was malformed or semantically invalid.",
"useWhen": "Use for typed 400 request-control validation and for typed 422 CSV package source-validation failures such as oneroster:source_validation_failed.",
"invalidWhen": "Invalid for authorization, not-found, conflict, or server failures; use the corresponding outcome value instead.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_outcome.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "failed_authorization",
"meaning": "The authenticated caller lacked tenant, role, scope, service-role, or operation authority.",
"useWhen": "The HTTP status is 403.",
"invalidWhen": "Used for missing Bearer token, which should not create a tenant audit row.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_outcome.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "failed_conflict",
"meaning": "The action conflicted with idempotency, uniqueness, state version, lifecycle, or resource state.",
"useWhen": "The HTTP status is 409, 412, or 428.",
"invalidWhen": "Used for not-found conditions.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_outcome.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "failed_not_found",
"meaning": "The resource was absent or not visible inside the authenticated tenant scope.",
"useWhen": "The HTTP status is 404 and the action was high-risk enough to audit.",
"invalidWhen": "Used to leak existence of resources outside the tenant.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_outcome.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
},
{
"value": "failed_server",
"meaning": "The action failed because of unexpected platform, dependency, runner, or storage behavior.",
"useWhen": "The HTTP status is 5xx or equivalent background-job failure.",
"invalidWhen": "Used for caller-fixable validation problems.",
"provenance": {
"label": "Inherited platform shared table",
"basis": "Approved platform enum audit_outcome.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/platform/1edtech/architecture#pitd-009-audit-log"
}
}
]
},
{
"table": "oneroster.import_batch",
"field": "direction",
"csvName": null,
"anchor": "field-oneroster-import-batch-direction",
"sourceClass": "Platform gap fill",
"values": [
{
"value": "import",
"meaning": "A source package was accepted for validation and persistence.",
"useWhen": "Use for uploaded or received CSV packages.",
"invalidWhen": "Invalid for package files generated by the platform.",
"provenance": {
"label": "Platform gap fill",
"basis": "OITD-006 direction vocabulary.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
},
{
"value": "export",
"meaning": "The platform produced a OneRoster package as evidence or customer output.",
"useWhen": "Use for generated export packages.",
"invalidWhen": "Invalid for uploaded packages.",
"provenance": {
"label": "Platform gap fill",
"basis": "OITD-006 direction vocabulary.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
}
]
},
{
"table": "oneroster.import_batch",
"field": "mode",
"csvName": null,
"anchor": "field-oneroster-import-batch-mode",
"sourceClass": "Platform gap fill",
"values": [
{
"value": "bulk",
"meaning": "Package is a full replacement snapshot for included files.",
"useWhen": "Use when import should compare complete files and mark missing records according to bulk behavior.",
"invalidWhen": "Invalid when rows include delta-only status/dateLastModified values.",
"provenance": {
"label": "Platform gap fill",
"basis": "OITD-006 mode vocabulary.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
},
{
"value": "delta",
"meaning": "Package is a set of changes whose rows use status/dateLastModified.",
"useWhen": "Use when import should apply row-level active/tobedeleted changes.",
"invalidWhen": "Invalid when delta rows omit required status/dateLastModified values.",
"provenance": {
"label": "Platform gap fill",
"basis": "OITD-006 mode vocabulary.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
}
]
},
{
"table": "oneroster.import_batch",
"field": "status",
"csvName": null,
"anchor": "field-oneroster-import-batch-status",
"sourceClass": "Platform gap fill",
"values": [
{
"value": "accepted",
"meaning": "The platform accepted the package/job but has not completed validation.",
"useWhen": "Use immediately after the upload or export request is accepted.",
"invalidWhen": "Invalid if no executed evidence supports this lifecycle state.",
"provenance": {
"label": "Platform gap fill",
"basis": "OITD-006 status vocabulary.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
},
{
"value": "validated",
"meaning": "CSV structure, required fields, allowed values, dependencies, and privacy checks passed.",
"useWhen": "Use only after validation has run and passed.",
"invalidWhen": "Invalid if no executed evidence supports this lifecycle state.",
"provenance": {
"label": "Platform gap fill",
"basis": "OITD-006 status vocabulary.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
},
{
"value": "applied",
"meaning": "A validated import committed generated OneRoster rows.",
"useWhen": "Use after the validated import writes the generated tables.",
"invalidWhen": "Invalid if no executed evidence supports this lifecycle state.",
"provenance": {
"label": "Platform gap fill",
"basis": "OITD-006 status vocabulary.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
},
{
"value": "rejected",
"meaning": "Validation or dependency checks failed; generated rows from this batch must not be trusted.",
"useWhen": "Use when validation or dependency checks fail.",
"invalidWhen": "Invalid if no executed evidence supports this lifecycle state.",
"provenance": {
"label": "Platform gap fill",
"basis": "OITD-006 status vocabulary.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
},
{
"value": "exported",
"meaning": "The platform produced an export package and recorded its evidence.",
"useWhen": "Use after an export package is produced and hashed.",
"invalidWhen": "Invalid if no executed evidence supports this lifecycle state.",
"provenance": {
"label": "Platform gap fill",
"basis": "OITD-006 status vocabulary.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-006-import-export-evidence"
}
}
]
},
{
"table": "oneroster.manifest_entry",
"field": "file_academic_sessions",
"csvName": "file.academicSessions",
"anchor": "field-oneroster-manifest-entry-file-academic-sessions",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_academic_sessions.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_academic_sessions.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_academic_sessions.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.manifest_entry",
"field": "file_categories",
"csvName": "file.categories",
"anchor": "field-oneroster-manifest-entry-file-categories",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_categories.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_categories.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_categories.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.manifest_entry",
"field": "file_classes",
"csvName": "file.classes",
"anchor": "field-oneroster-manifest-entry-file-classes",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_classes.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_classes.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_classes.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.manifest_entry",
"field": "file_class_resources",
"csvName": "file.classResources",
"anchor": "field-oneroster-manifest-entry-file-class-resources",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_class_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_class_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_class_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.manifest_entry",
"field": "file_courses",
"csvName": "file.courses",
"anchor": "field-oneroster-manifest-entry-file-courses",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_courses.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_courses.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_courses.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.manifest_entry",
"field": "file_course_resources",
"csvName": "file.courseResources",
"anchor": "field-oneroster-manifest-entry-file-course-resources",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_course_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_course_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_course_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.manifest_entry",
"field": "file_demographics",
"csvName": "file.demographics",
"anchor": "field-oneroster-manifest-entry-file-demographics",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_demographics.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_demographics.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_demographics.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.manifest_entry",
"field": "file_enrollments",
"csvName": "file.enrollments",
"anchor": "field-oneroster-manifest-entry-file-enrollments",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_enrollments.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_enrollments.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_enrollments.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.manifest_entry",
"field": "file_line_item_learning_objective_ids",
"csvName": "file.lineItemLearningObjectiveIds",
"anchor": "field-oneroster-manifest-entry-file-line-item-learning-objective-ids",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_line_item_learning_objective_ids.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_line_item_learning_objective_ids.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_line_item_learning_objective_ids.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.manifest_entry",
"field": "file_line_items",
"csvName": "file.lineItems",
"anchor": "field-oneroster-manifest-entry-file-line-items",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_line_items.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_line_items.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_line_items.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.manifest_entry",
"field": "file_line_item_score_scales",
"csvName": "file.lineItemScoreScales",
"anchor": "field-oneroster-manifest-entry-file-line-item-score-scales",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_line_item_score_scales.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_line_item_score_scales.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_line_item_score_scales.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.manifest_entry",
"field": "file_orgs",
"csvName": "file.orgs",
"anchor": "field-oneroster-manifest-entry-file-orgs",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_orgs.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_orgs.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_orgs.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.manifest_entry",
"field": "file_resources",
"csvName": "file.resources",
"anchor": "field-oneroster-manifest-entry-file-resources",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.manifest_entry",
"field": "file_result_learning_objective_ids",
"csvName": "file.resultLearningObjectiveIds",
"anchor": "field-oneroster-manifest-entry-file-result-learning-objective-ids",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_result_learning_objective_ids.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_result_learning_objective_ids.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_result_learning_objective_ids.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.manifest_entry",
"field": "file_results",
"csvName": "file.results",
"anchor": "field-oneroster-manifest-entry-file-results",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_results.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_results.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_results.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.manifest_entry",
"field": "file_result_score_scales",
"csvName": "file.resultScoreScales",
"anchor": "field-oneroster-manifest-entry-file-result-score-scales",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_result_score_scales.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_result_score_scales.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_result_score_scales.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.manifest_entry",
"field": "file_roles",
"csvName": "file.roles",
"anchor": "field-oneroster-manifest-entry-file-roles",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_roles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_roles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_roles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.manifest_entry",
"field": "file_score_scales",
"csvName": "file.scoreScales",
"anchor": "field-oneroster-manifest-entry-file-score-scales",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_score_scales.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_score_scales.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_score_scales.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.manifest_entry",
"field": "file_user_profiles",
"csvName": "file.userProfiles",
"anchor": "field-oneroster-manifest-entry-file-user-profiles",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_user_profiles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_user_profiles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_user_profiles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.manifest_entry",
"field": "file_user_resources",
"csvName": "file.userResources",
"anchor": "field-oneroster-manifest-entry-file-user-resources",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_user_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_user_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_user_resources.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.manifest_entry",
"field": "file_users",
"csvName": "file.users",
"anchor": "field-oneroster-manifest-entry-file-users",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "absent",
"meaning": "The named CSV file is intentionally omitted from this package.",
"useWhen": "Use only in manifest.csv file.* fields when the file is not included.",
"invalidWhen": "Invalid if the CSV file is present in the package.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_users.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "bulk",
"meaning": "The named CSV file is a full replacement snapshot for its collection.",
"useWhen": "Use in manifest.csv or import_batch.mode for complete package loads.",
"invalidWhen": "Invalid when row status/dateLastModified values are supplied in that file.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_users.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "delta",
"meaning": "The named CSV file contains changes rather than a full replacement snapshot.",
"useWhen": "Use when row status and dateLastModified drive insert/update/delete semantics.",
"invalidWhen": "Invalid when delta rows omit status or dateLastModified.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for manifest_entry.file_users.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.academic_sessions",
"field": "status",
"csvName": "status",
"anchor": "field-oneroster-academic-sessions-status",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for academic_sessions.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for academic_sessions.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.academic_sessions",
"field": "type",
"csvName": "type",
"anchor": "field-oneroster-academic-sessions-type",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "gradingPeriod",
"meaning": "An academic session used as a gradebook reporting period.",
"useWhen": "Use when line items or results need grading-period context.",
"invalidWhen": "Invalid for a session that spans an entire school year.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for academic_sessions.type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "semester",
"meaning": "An academic session representing a semester.",
"useWhen": "Use when the school calendar divides a year into semesters.",
"invalidWhen": "Invalid for a shorter term or grading period.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for academic_sessions.type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "schoolYear",
"meaning": "An academic session representing the school year.",
"useWhen": "Use for course schoolYearSourcedId and whole-year calendar context.",
"invalidWhen": "Invalid for a semester, term, or grading period.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for academic_sessions.type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "term",
"meaning": "An academic session representing a term.",
"useWhen": "Use for class termSourcedIds when the class runs during that term.",
"invalidWhen": "Invalid when a more specific gradingPeriod or semester is required.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for academic_sessions.type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.categories",
"field": "status",
"csvName": "status",
"anchor": "field-oneroster-categories-status",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for categories.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for categories.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.classes",
"field": "status",
"csvName": "status",
"anchor": "field-oneroster-classes-status",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for classes.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for classes.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.classes",
"field": "class_type",
"csvName": "classType",
"anchor": "field-oneroster-classes-class-type",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "homeroom",
"meaning": "A class organized as homeroom rather than a scheduled instructional section.",
"useWhen": "Use when the source system class is a homeroom.",
"invalidWhen": "Invalid for ordinary scheduled courses.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for classes.class_type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "scheduled",
"meaning": "A class with a scheduled instructional meeting pattern.",
"useWhen": "Use for ordinary course sections or scheduled classes.",
"invalidWhen": "Invalid when the class is only homeroom.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for classes.class_type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.class_resources",
"field": "status",
"csvName": "status",
"anchor": "field-oneroster-class-resources-status",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for class_resources.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for class_resources.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.course_resources",
"field": "status",
"csvName": "status",
"anchor": "field-oneroster-course-resources-status",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for course_resources.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for course_resources.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.courses",
"field": "status",
"csvName": "status",
"anchor": "field-oneroster-courses-status",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for courses.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for courses.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.demographics",
"field": "status",
"csvName": "status",
"anchor": "field-oneroster-demographics-status",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.demographics",
"field": "sex",
"csvName": "sex",
"anchor": "field-oneroster-demographics-sex",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "male",
"meaning": "Demographic sex value supplied by the source system.",
"useWhen": "Use only when the source system lawfully provides this value.",
"invalidWhen": "Invalid if copied to logs or used outside OneRoster demographic exchange.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.sex.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "female",
"meaning": "Demographic sex value supplied by the source system.",
"useWhen": "Use only when the source system lawfully provides this value.",
"invalidWhen": "Invalid if copied to logs or used outside OneRoster demographic exchange.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.sex.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "unspecified",
"meaning": "The source system did not specify a male/female/other value.",
"useWhen": "Use when the demographic value is intentionally unspecified.",
"invalidWhen": "Invalid if used to guess or erase a known source value.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.sex.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "other",
"meaning": "The source system supplied a demographic sex value outside male/female/unspecified.",
"useWhen": "Use only when that is the source-system value.",
"invalidWhen": "Invalid if used as a catch-all for missing data.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.sex.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.demographics",
"field": "american_indian_or_alaska_native",
"csvName": "americanIndianOrAlaskaNative",
"anchor": "field-oneroster-demographics-american-indian-or-alaska-native",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "true",
"meaning": "The source reports american indian or alaska native for this user; race flags are not mutually exclusive and ethnicity is independent of race.",
"useWhen": "Use when the source system sends an affirmative demographic value. Multiple race flags may be true simultaneously, and two-or-more-races should follow the source's multi-race indicator.",
"invalidWhen": "Invalid if inferred from name, language, school, or another demographic field rather than supplied by the source.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.american_indian_or_alaska_native.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source explicitly does not report american indian or alaska native for this user; blank/unknown should not be collapsed into false unless the source profile says so.",
"useWhen": "Use when the source sends an explicit negative value for this category.",
"invalidWhen": "Invalid if it overwrites an affirmative source value or is used as proof that the category is unknown.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.american_indian_or_alaska_native.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.demographics",
"field": "asian",
"csvName": "asian",
"anchor": "field-oneroster-demographics-asian",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "true",
"meaning": "The source reports asian for this user; race flags are not mutually exclusive and ethnicity is independent of race.",
"useWhen": "Use when the source system sends an affirmative demographic value. Multiple race flags may be true simultaneously, and two-or-more-races should follow the source's multi-race indicator.",
"invalidWhen": "Invalid if inferred from name, language, school, or another demographic field rather than supplied by the source.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.asian.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source explicitly does not report asian for this user; blank/unknown should not be collapsed into false unless the source profile says so.",
"useWhen": "Use when the source sends an explicit negative value for this category.",
"invalidWhen": "Invalid if it overwrites an affirmative source value or is used as proof that the category is unknown.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.asian.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.demographics",
"field": "black_or_african_american",
"csvName": "blackOrAfricanAmerican",
"anchor": "field-oneroster-demographics-black-or-african-american",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "true",
"meaning": "The source reports black or african american for this user; race flags are not mutually exclusive and ethnicity is independent of race.",
"useWhen": "Use when the source system sends an affirmative demographic value. Multiple race flags may be true simultaneously, and two-or-more-races should follow the source's multi-race indicator.",
"invalidWhen": "Invalid if inferred from name, language, school, or another demographic field rather than supplied by the source.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.black_or_african_american.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source explicitly does not report black or african american for this user; blank/unknown should not be collapsed into false unless the source profile says so.",
"useWhen": "Use when the source sends an explicit negative value for this category.",
"invalidWhen": "Invalid if it overwrites an affirmative source value or is used as proof that the category is unknown.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.black_or_african_american.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.demographics",
"field": "native_hawaiian_or_other_pacific_islander",
"csvName": "nativeHawaiianOrOtherPacificIslander",
"anchor": "field-oneroster-demographics-native-hawaiian-or-other-pacific-islander",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "true",
"meaning": "The source reports native hawaiian or other pacific islander for this user; race flags are not mutually exclusive and ethnicity is independent of race.",
"useWhen": "Use when the source system sends an affirmative demographic value. Multiple race flags may be true simultaneously, and two-or-more-races should follow the source's multi-race indicator.",
"invalidWhen": "Invalid if inferred from name, language, school, or another demographic field rather than supplied by the source.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.native_hawaiian_or_other_pacific_islander.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source explicitly does not report native hawaiian or other pacific islander for this user; blank/unknown should not be collapsed into false unless the source profile says so.",
"useWhen": "Use when the source sends an explicit negative value for this category.",
"invalidWhen": "Invalid if it overwrites an affirmative source value or is used as proof that the category is unknown.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.native_hawaiian_or_other_pacific_islander.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.demographics",
"field": "white",
"csvName": "white",
"anchor": "field-oneroster-demographics-white",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "true",
"meaning": "The source reports white for this user; race flags are not mutually exclusive and ethnicity is independent of race.",
"useWhen": "Use when the source system sends an affirmative demographic value. Multiple race flags may be true simultaneously, and two-or-more-races should follow the source's multi-race indicator.",
"invalidWhen": "Invalid if inferred from name, language, school, or another demographic field rather than supplied by the source.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.white.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source explicitly does not report white for this user; blank/unknown should not be collapsed into false unless the source profile says so.",
"useWhen": "Use when the source sends an explicit negative value for this category.",
"invalidWhen": "Invalid if it overwrites an affirmative source value or is used as proof that the category is unknown.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.white.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.demographics",
"field": "demographic_race_two_or_more_races",
"csvName": "demographicRaceTwoOrMoreRaces",
"anchor": "field-oneroster-demographics-demographic-race-two-or-more-races",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "true",
"meaning": "The source reports demographic race two or more races for this user; race flags are not mutually exclusive and ethnicity is independent of race.",
"useWhen": "Use when the source system sends an affirmative demographic value. Multiple race flags may be true simultaneously, and two-or-more-races should follow the source's multi-race indicator.",
"invalidWhen": "Invalid if inferred from name, language, school, or another demographic field rather than supplied by the source.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.demographic_race_two_or_more_races.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source explicitly does not report demographic race two or more races for this user; blank/unknown should not be collapsed into false unless the source profile says so.",
"useWhen": "Use when the source sends an explicit negative value for this category.",
"invalidWhen": "Invalid if it overwrites an affirmative source value or is used as proof that the category is unknown.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.demographic_race_two_or_more_races.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.demographics",
"field": "hispanic_or_latino_ethnicity",
"csvName": "hispanicOrLatinoEthnicity",
"anchor": "field-oneroster-demographics-hispanic-or-latino-ethnicity",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "true",
"meaning": "The source reports hispanic or latino ethnicity for this user; race flags are not mutually exclusive and ethnicity is independent of race.",
"useWhen": "Use when the source system sends an affirmative demographic value. Multiple race flags may be true simultaneously, and two-or-more-races should follow the source's multi-race indicator.",
"invalidWhen": "Invalid if inferred from name, language, school, or another demographic field rather than supplied by the source.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.hispanic_or_latino_ethnicity.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source explicitly does not report hispanic or latino ethnicity for this user; blank/unknown should not be collapsed into false unless the source profile says so.",
"useWhen": "Use when the source sends an explicit negative value for this category.",
"invalidWhen": "Invalid if it overwrites an affirmative source value or is used as proof that the category is unknown.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for demographics.hispanic_or_latino_ethnicity.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.enrollments",
"field": "status",
"csvName": "status",
"anchor": "field-oneroster-enrollments-status",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for enrollments.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for enrollments.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.enrollments",
"field": "role",
"csvName": "role",
"anchor": "field-oneroster-enrollments-role",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "administrator",
"meaning": "The user participates in the class enrollment context as an administrator.",
"useWhen": "Use for administrative access to the class, not for teaching or learner participation.",
"invalidWhen": "Invalid when the row should appear as a student or teacher in active instructional rosters.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for enrollments.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "proctor",
"meaning": "The user is enrolled as a proctor for assessment or supervised activity.",
"useWhen": "Use when the source explicitly separates proctoring from teaching.",
"invalidWhen": "Invalid as a substitute for teacher unless the source sends teacher.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for enrollments.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "student",
"meaning": "The user is a learner in the class.",
"useWhen": "Use for active learner rosters and student-result workflows.",
"invalidWhen": "Invalid for staff/guardian users or teacher rows.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for enrollments.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "teacher",
"meaning": "The user is an instructor for the class.",
"useWhen": "Use for teacher rosters and for primary=true teacher selection.",
"invalidWhen": "Invalid for learner participation or parent/guardian access.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for enrollments.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.enrollments",
"field": "primary",
"csvName": "primary",
"anchor": "field-oneroster-enrollments-primary",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "true",
"meaning": "This teacher enrollment is the primary teacher for the class/date window.",
"useWhen": "Use only when role=teacher and the source designates this enrollment as the class's primary teacher.",
"invalidWhen": "Invalid for student/proctor/administrator rows or when another active teacher enrollment is already primary for the same class/date window under the local profile.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for enrollments.primary.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "This enrollment is not the primary teacher relationship.",
"useWhen": "Use for non-primary teacher rows and for non-teacher roles when the source sends the optional field.",
"invalidWhen": "Invalid if used to hide a required primary-teacher designation.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for enrollments.primary.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.line_item_learning_objective_ids",
"field": "status",
"csvName": "status",
"anchor": "field-oneroster-line-item-learning-objective-ids-status",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for line_item_learning_objective_ids.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for line_item_learning_objective_ids.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.line_item_learning_objective_ids",
"field": "source",
"csvName": "source",
"anchor": "field-oneroster-line-item-learning-objective-ids-source",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "case",
"meaning": "The learning objective identifier is an IMS CASE identifier.",
"useWhen": "Use when learningObjectiveId is a CASE UUID URN or CASE-aligned identifier.",
"invalidWhen": "Invalid when the identifier is local or unknown.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for line_item_learning_objective_ids.source.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "unknown",
"meaning": "The learning objective identifier source is unknown to the sender.",
"useWhen": "Use when the source cannot identify CASE or another controlled system.",
"invalidWhen": "Invalid when the source is known and should be labeled.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for line_item_learning_objective_ids.source.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.line_items",
"field": "status",
"csvName": "status",
"anchor": "field-oneroster-line-items-status",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for line_items.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for line_items.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.line_item_score_scales",
"field": "status",
"csvName": "status",
"anchor": "field-oneroster-line-item-score-scales-status",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for line_item_score_scales.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for line_item_score_scales.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.orgs",
"field": "status",
"csvName": "status",
"anchor": "field-oneroster-orgs-status",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for orgs.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for orgs.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.orgs",
"field": "type",
"csvName": "type",
"anchor": "field-oneroster-orgs-type",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "department",
"meaning": "Department-level organization, usually below a school or district.",
"useWhen": "Use for academic/administrative departments that can own courses or roles but should not satisfy school_sourced_id references.",
"invalidWhen": "Invalid as the target of classes.school_sourced_id or enrollments.school_sourced_id.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for orgs.type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "school",
"meaning": "School/building organization and the required org type for school-scoped class, enrollment, and line-item references.",
"useWhen": "Use when a row can be referenced by classes.school_sourced_id, enrollments.school_sourced_id, or line_items.school_sourced_id.",
"invalidWhen": "Invalid for district or department rows that should only be hierarchy parents.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for orgs.type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "district",
"meaning": "District organization that commonly parents school rows.",
"useWhen": "Use as parent_sourced_id for schools or for district-level roles/courses where the source sends them.",
"invalidWhen": "Invalid as a class/enrollment school_sourced_id target.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for orgs.type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "local",
"meaning": "Local education authority or local-level organization.",
"useWhen": "Use when the source models an LEA/local authority distinct from a district.",
"invalidWhen": "Invalid as a school_sourced_id target unless the source profile explicitly says local rows are schools.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for orgs.type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "state",
"meaning": "State-level education agency or authority.",
"useWhen": "Use as a hierarchy ancestor or role scope when supplied by the source.",
"invalidWhen": "Invalid as a class/enrollment school_sourced_id target.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for orgs.type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "national",
"meaning": "National-level education agency or authority.",
"useWhen": "Use only for national hierarchy/role contexts supplied by the source.",
"invalidWhen": "Invalid as a school_sourced_id target or ordinary school parent when a district/local row exists.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for orgs.type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.resources",
"field": "status",
"csvName": "status",
"anchor": "field-oneroster-resources-status",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.resources",
"field": "roles",
"csvName": "roles",
"anchor": "field-oneroster-resources-roles",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "administrator",
"meaning": "The resource is intended for administrator users.",
"useWhen": "Use when administrative users should see the resource.",
"invalidWhen": "Invalid as a learner-only audience.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.roles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "aide",
"meaning": "The resource is intended for aide/support roles.",
"useWhen": "Use when aides need resource access.",
"invalidWhen": "Invalid as a teacher-only audience.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.roles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "guardian",
"meaning": "The resource is intended for guardian users.",
"useWhen": "Use for family/guardian access flows.",
"invalidWhen": "Invalid for student-only or teacher-only resources.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.roles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "parent",
"meaning": "The resource is intended for parent users.",
"useWhen": "Use for parent access flows.",
"invalidWhen": "Invalid for staff-only resources.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.roles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "proctor",
"meaning": "The resource is intended for proctors.",
"useWhen": "Use for assessment supervision resources.",
"invalidWhen": "Invalid for ordinary learner content unless also listed as student.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.roles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "relative",
"meaning": "The resource is intended for relative relationships.",
"useWhen": "Use when the source differentiates relative from parent/guardian.",
"invalidWhen": "Invalid for school staff roles.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.roles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "student",
"meaning": "The resource is intended for learners.",
"useWhen": "Use for student-facing resource access.",
"invalidWhen": "Invalid for staff-only resources.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.roles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "teacher",
"meaning": "The resource is intended for teachers.",
"useWhen": "Use for instructor-facing resource access.",
"invalidWhen": "Invalid for learner-only resources.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.roles.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.resources",
"field": "importance",
"csvName": "importance",
"anchor": "field-oneroster-resources-importance",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "primary",
"meaning": "Primary resource or score-scale mapping importance.",
"useWhen": "Use when this row is the main relationship in its context.",
"invalidWhen": "Invalid when another row is already primary where the spec allows only one.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.importance.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "secondary",
"meaning": "Secondary resource or score-scale mapping importance.",
"useWhen": "Use for non-primary relationships.",
"invalidWhen": "Invalid if the relationship is required to be primary.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for resources.importance.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.result_learning_objective_ids",
"field": "status",
"csvName": "status",
"anchor": "field-oneroster-result-learning-objective-ids-status",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for result_learning_objective_ids.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for result_learning_objective_ids.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.result_learning_objective_ids",
"field": "source",
"csvName": "source",
"anchor": "field-oneroster-result-learning-objective-ids-source",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "case",
"meaning": "The learning objective identifier is an IMS CASE identifier.",
"useWhen": "Use when learningObjectiveId is a CASE UUID URN or CASE-aligned identifier.",
"invalidWhen": "Invalid when the identifier is local or unknown.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for result_learning_objective_ids.source.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "unknown",
"meaning": "The learning objective identifier source is unknown to the sender.",
"useWhen": "Use when the source cannot identify CASE or another controlled system.",
"invalidWhen": "Invalid when the source is known and should be labeled.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for result_learning_objective_ids.source.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.results",
"field": "status",
"csvName": "status",
"anchor": "field-oneroster-results-status",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.results",
"field": "score_status",
"csvName": "scoreStatus",
"anchor": "field-oneroster-results-score-status",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "exempt",
"meaning": "The student is exempt from this line item/result.",
"useWhen": "Use when the score should not count as a missing or graded submission.",
"invalidWhen": "Invalid when the work was submitted and graded.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.score_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "fully graded",
"meaning": "The result has been completely graded.",
"useWhen": "Use when the score/result is final enough for reporting.",
"invalidWhen": "Invalid when grading is partial or not submitted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.score_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "not submitted",
"meaning": "The expected student work has not been submitted.",
"useWhen": "Use when no submission exists.",
"invalidWhen": "Invalid when a submission exists but is incomplete or partially graded.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.score_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "partially graded",
"meaning": "The result has some grading but is not complete.",
"useWhen": "Use during partial grading workflows.",
"invalidWhen": "Invalid when fully graded.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.score_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "submitted",
"meaning": "The student submitted work, but grading status may still need completion.",
"useWhen": "Use after submission before full grading.",
"invalidWhen": "Invalid when work has not been submitted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.score_status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.results",
"field": "in_progress",
"csvName": "inProgress",
"anchor": "field-oneroster-results-in-progress",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "true",
"meaning": "Assigned work is still in progress and the student's work product is not expected yet.",
"useWhen": "Use while the task is open and not yet ready for submitted/missing judgment.",
"invalidWhen": "Invalid when the work has already been submitted or graded.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.in_progress.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source is not marking the result as in progress.",
"useWhen": "Use when normal score_status semantics describe the result without the in-progress branch.",
"invalidWhen": "Invalid if used to infer completion without checking score_status and submission dates.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.in_progress.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.results",
"field": "incomplete",
"csvName": "incomplete",
"anchor": "field-oneroster-results-incomplete",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "true",
"meaning": "Submitted work exists but is deemed incomplete by the teacher/source.",
"useWhen": "Use after submission when the teacher needs the student to complete or correct work.",
"invalidWhen": "Invalid for work that is merely not submitted or fully graded.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.incomplete.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source is not marking the submitted work incomplete.",
"useWhen": "Use when score_status and other flags carry the workflow state.",
"invalidWhen": "Invalid if used to infer that the work was fully graded.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.incomplete.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.results",
"field": "late",
"csvName": "late",
"anchor": "field-oneroster-results-late",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "true",
"meaning": "The work is past due or was submitted after the due date.",
"useWhen": "Use when lateness may affect score interpretation or interventions.",
"invalidWhen": "Invalid when the due-date policy does not mark the work late.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.late.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source is not marking the work late.",
"useWhen": "Use when lateness is absent or unknown in the source.",
"invalidWhen": "Invalid if used to overwrite a true late flag from the source.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.late.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.results",
"field": "missing",
"csvName": "missing",
"anchor": "field-oneroster-results-missing",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "true",
"meaning": "Expected work has not been submitted and is considered missing.",
"useWhen": "Use when the source/teacher has made a missing-work determination.",
"invalidWhen": "Invalid for work that is merely in progress or exempt.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.missing.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source is not marking the work missing.",
"useWhen": "Use when score_status or other workflow flags explain the result.",
"invalidWhen": "Invalid if used to infer submission without checking score_status.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for results.missing.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.result_score_scales",
"field": "status",
"csvName": "status",
"anchor": "field-oneroster-result-score-scales-status",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for result_score_scales.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for result_score_scales.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.roles",
"field": "status",
"csvName": "status",
"anchor": "field-oneroster-roles-status",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.roles",
"field": "role_type",
"csvName": "roleType",
"anchor": "field-oneroster-roles-role-type",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "primary",
"meaning": "This is the user's primary role in the organization/date window.",
"useWhen": "Use when one role should be treated as the main role for org-scoped lookups.",
"invalidWhen": "Invalid if another role is already primary for the same user/org/window under the local profile.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role_type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "secondary",
"meaning": "This is an additional non-primary role in the organization/date window.",
"useWhen": "Use when the user has more than one org role.",
"invalidWhen": "Invalid if the source intends the role to be primary.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role_type.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.roles",
"field": "role",
"csvName": "role",
"anchor": "field-oneroster-roles-role",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "aide",
"meaning": "Aide role in an organization or resource audience.",
"useWhen": "Use for an aide/support role.",
"invalidWhen": "Invalid for teacher or administrator role rows.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "counselor",
"meaning": "Counselor role in an organization.",
"useWhen": "Use when the user is assigned as counselor.",
"invalidWhen": "Invalid for teacher or guardian role rows.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "districtAdministrator",
"meaning": "District administrator role.",
"useWhen": "Use for district-level administrative users.",
"invalidWhen": "Invalid for school-site administrator role rows.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "guardian",
"meaning": "Guardian relationship/role.",
"useWhen": "Use for a guardian associated with a student.",
"invalidWhen": "Invalid as a student or teacher role.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "parent",
"meaning": "Parent relationship/role.",
"useWhen": "Use for parent access or role rows.",
"invalidWhen": "Invalid as a teacher or student role.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "principal",
"meaning": "Principal role in an organization.",
"useWhen": "Use for the school principal role.",
"invalidWhen": "Invalid for district administrator role rows.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "proctor",
"meaning": "A user acting as a proctor.",
"useWhen": "Use when the user supervises assessment or class activity.",
"invalidWhen": "Invalid for a teacher unless the source explicitly sends proctor.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "relative",
"meaning": "Relative relationship/role.",
"useWhen": "Use when the source identifies a related person who is not parent/guardian.",
"invalidWhen": "Invalid as a school staff role.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "siteAdministrator",
"meaning": "School/site administrator role.",
"useWhen": "Use for site-level administrators.",
"invalidWhen": "Invalid for district-level administrator rows.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "student",
"meaning": "A learner/student role.",
"useWhen": "Use for student enrollments, role rows, or resource audiences.",
"invalidWhen": "Invalid for teachers, parents, or administrators.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "systemAdministrator",
"meaning": "System administrator role.",
"useWhen": "Use for platform or SIS system administration roles.",
"invalidWhen": "Invalid for ordinary school staff roles.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "teacher",
"meaning": "A teacher/instructor role.",
"useWhen": "Use for teacher enrollments, role rows, or resource audiences.",
"invalidWhen": "Invalid for student enrollments.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for roles.role.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.score_scales",
"field": "status",
"csvName": "status",
"anchor": "field-oneroster-score-scales-status",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for score_scales.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for score_scales.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.score_scales",
"field": "score_scale_value",
"csvName": "scoreScaleValue",
"anchor": "field-oneroster-score-scales-score-scale-value",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "Pass:50",
"meaning": "Pattern example for scoreScaleValue: a scale label mapped to a numeric threshold.",
"useWhen": "Use only as an example of {label:value} syntax; real score scales may send multiple mappings such as {A:94},{B:84}.",
"invalidWhen": "Invalid if treated as the complete allowed vocabulary.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for score_scales.score_scale_value.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.user_profiles",
"field": "status",
"csvName": "status",
"anchor": "field-oneroster-user-profiles-status",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for user_profiles.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for user_profiles.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.user_resources",
"field": "status",
"csvName": "status",
"anchor": "field-oneroster-user-resources-status",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for user_resources.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for user_resources.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.users",
"field": "status",
"csvName": "status",
"anchor": "field-oneroster-users-status",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "active",
"meaning": "The delta row is current and should be inserted or updated.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the row should be deleted.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for users.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "tobedeleted",
"meaning": "The delta row indicates the source wants this object deleted or retired.",
"useWhen": "Use only in delta row status fields.",
"invalidWhen": "Invalid in bulk rows or when the source object remains active.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for users.status.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.users",
"field": "enabled_user",
"csvName": "enabledUser",
"anchor": "field-oneroster-users-enabled-user",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "true",
"meaning": "The source system says this user account is enabled.",
"useWhen": "Use when roster identity and ordinary user access may proceed under local administration rules.",
"invalidWhen": "Invalid when the source has disabled the account or when a local suspension should prevent new sign-in/actions.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for users.enabled_user.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
},
{
"value": "false",
"meaning": "The source system keeps the user row but disables account access.",
"useWhen": "Use to preserve the user's roster history while preventing new user-initiated access or writes unless an admin override is documented.",
"invalidWhen": "Invalid if treated as a row deletion or if existing enrollments/results are cascaded away.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for users.enabled_user.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
},
{
"table": "oneroster.users",
"field": "user_ids",
"csvName": "userIds",
"anchor": "field-oneroster-users-user-ids",
"sourceClass": "1EdTech pass-through",
"values": [
{
"value": "LDAP:Id",
"meaning": "Pattern example for userIds: an identifier type and identifier separated by a colon.",
"useWhen": "Use only as an example of the {Type:Id} pattern, not as the only allowed value.",
"invalidWhen": "Invalid if treated as the complete vocabulary.",
"provenance": {
"label": "1EdTech pass-through",
"basis": "1EdTech OneRoster CSV Binding 1.2.1 value for users.user_ids.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/architecture/#oitd-001-source-authority"
}
}
]
}
]