Platform3 · oneroster · 1edtech · data_dictionary

TimeBack OneRoster 1EdTech Data Dictionary

Field-level contract served verbatim from the tracked owning data dictionary JSON. Every value on this page is reflected mechanically from that source.

26 tables329 fieldsgenerated 2026-05-28T15:53:51Z

Contract overview

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

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
email
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"
        }
      }
    ]
  }
]