Reference source · 0.1.0-dev.11
application.schema.json
schemas/application.schema.json · Download original file
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:oprp:experimental:0.1:application",
"title": "OPRP experimental dev.7 decrypted requests",
"description": "Structural contract for inner requests after envelope verification/decryption. Clinical subset, permissions, tokens, canonical encoding and cryptographic binding require separate validation. Migration operations require a verified Host sender and pre-admitted transfer; application senders cannot use them.",
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"required": [
"operation",
"request"
],
"properties": {
"operation": {
"const": "token"
},
"request": {
"$ref": "./exchange.schema.json#/$defs/accessRequest"
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"operation",
"request_id"
],
"properties": {
"operation": {
"enum": [
"authorization_status",
"cancel_authorization"
]
},
"request_id": {
"$ref": "./exchange.schema.json#/$defs/identifier"
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"operation",
"refresh_token",
"request_id"
],
"properties": {
"operation": {
"const": "refresh"
},
"request_id": {
"$ref": "./exchange.schema.json#/$defs/identifier"
},
"refresh_token": {
"$ref": "./exchange.schema.json#/$defs/base64url",
"minLength": 43,
"maxLength": 43
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"operation",
"patient",
"access_token"
],
"properties": {
"operation": {
"enum": [
"read_demographics",
"list_labs",
"export_record"
]
},
"patient": {
"$ref": "./exchange.schema.json#/$defs/identifier"
},
"access_token": {
"$ref": "#/$defs/accessToken"
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"operation",
"patient",
"access_token",
"cursor",
"limit"
],
"properties": {
"operation": {
"const": "changes"
},
"patient": {
"$ref": "./exchange.schema.json#/$defs/identifier"
},
"access_token": {
"$ref": "#/$defs/accessToken"
},
"cursor": {
"$ref": "#/$defs/cursor"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"operation",
"patient",
"access_token",
"operation_id",
"resource",
"base_version"
],
"properties": {
"operation": {
"const": "update_demographics"
},
"patient": {
"$ref": "./exchange.schema.json#/$defs/identifier"
},
"access_token": {
"$ref": "#/$defs/accessToken"
},
"operation_id": {
"$ref": "./exchange.schema.json#/$defs/identifier"
},
"base_version": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"resource": {
"type": "object",
"additionalProperties": false,
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
}
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"operation",
"patient",
"access_token",
"operation_id",
"resource"
],
"properties": {
"operation": {
"const": "create_lab"
},
"patient": {
"$ref": "./exchange.schema.json#/$defs/identifier"
},
"access_token": {
"$ref": "#/$defs/accessToken"
},
"operation_id": {
"$ref": "./exchange.schema.json#/$defs/identifier"
},
"resource": {
"type": "object",
"description": "Limited final laboratory Observation; see executable Host validation and wire profile. Not a full FHIR schema."
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"operation",
"proof"
],
"properties": {
"operation": {
"const": "rotate_requester"
},
"proof": {
"$ref": "./trust.schema.json#/$defs/rotationProof"
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"operation",
"grant_id"
],
"properties": {
"operation": {
"const": "replace_token"
},
"grant_id": {
"$ref": "./exchange.schema.json#/$defs/identifier"
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"operation",
"plan",
"archive"
],
"properties": {
"operation": {
"enum": [
"migration_stage",
"migration_stage_final"
]
},
"plan": {
"$ref": "./migration.schema.json#/$defs/proof"
},
"archive": {
"$ref": "./archive.schema.json#/$defs/archive"
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"operation",
"transfer_id",
"release"
],
"properties": {
"operation": {
"const": "migration_activate"
},
"transfer_id": {
"$ref": "./exchange.schema.json#/$defs/identifier"
},
"release": {
"$ref": "./migration.schema.json#/$defs/proof"
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"operation",
"transfer_id",
"abort"
],
"properties": {
"operation": {
"const": "migration_discard"
},
"transfer_id": {
"$ref": "./exchange.schema.json#/$defs/identifier"
},
"abort": {
"$ref": "./migration.schema.json#/$defs/proof"
}
}
},
{
"$ref": "subscription.schema.json#/$defs/subscribe"
},
{
"$ref": "subscription.schema.json#/$defs/control"
},
{
"$ref": "clinical.schema.json"
},
{
"type": "object",
"additionalProperties": false,
"required": [
"operation",
"patient",
"access_token"
],
"properties": {
"operation": {
"const": "sync_snapshot"
},
"patient": {
"$ref": "./exchange.schema.json#/$defs/identifier"
},
"access_token": {
"$ref": "#/$defs/accessToken"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"page_cursor": {
"type": [
"string",
"null"
],
"maxLength": 12000
}
}
}
],
"$defs": {
"accessToken": {
"type": "string",
"minLength": 1,
"maxLength": 14000
},
"cursor": {
"$ref": "./exchange.schema.json#/$defs/base64url",
"minLength": 40,
"maxLength": 12000
},
"decision": {
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"required": [
"status",
"grant_id",
"access_token",
"token_expires_at",
"authorized_until",
"scope"
],
"properties": {
"status": {
"const": "granted"
},
"grant_id": {
"$ref": "./exchange.schema.json#/$defs/identifier"
},
"access_token": {
"$ref": "#/$defs/accessToken"
},
"token_expires_at": {
"$ref": "#/$defs/time"
},
"authorized_until": {
"$ref": "#/$defs/time"
},
"scope": {
"type": "array",
"minItems": 1,
"maxItems": 6,
"uniqueItems": true,
"items": {
"$ref": "./exchange.schema.json#/$defs/scope"
}
},
"refresh_token": {
"$ref": "./exchange.schema.json#/$defs/base64url",
"minLength": 43,
"maxLength": 43
},
"refresh_expires_at": {
"$ref": "#/$defs/time"
}
},
"dependentRequired": {
"refresh_token": [
"refresh_expires_at"
],
"refresh_expires_at": [
"refresh_token"
]
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"status",
"request_id",
"approval_required",
"expires_at"
],
"properties": {
"status": {
"const": "pending"
},
"request_id": {
"$ref": "./exchange.schema.json#/$defs/identifier"
},
"expires_at": {
"$ref": "#/$defs/time"
},
"approval_required": {
"type": "array",
"minItems": 1,
"maxItems": 6,
"uniqueItems": true,
"items": {
"$ref": "./exchange.schema.json#/$defs/scope"
}
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"status",
"reason"
],
"properties": {
"status": {
"const": "denied"
},
"reason": {
"type": "string"
}
}
}
]
},
"time": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
}
}