Files
wyndham-ARR/arr-opera-daily-ingest/references/structured-result.schema.json
2026-07-29 16:38:05 +08:00

328 lines
10 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://arr.local/schemas/opera-daily-structured-result-v3.json",
"title": "ARR Opera daily finance-ready structured result",
"type": "object",
"additionalProperties": false,
"required": [
"result_schema_version",
"status",
"activation_eligible",
"ingestion_mode",
"business_date",
"processor_version",
"rule_set_sha256",
"source_rows",
"removed_by_rate_code",
"removed_as_duplicates",
"output_rows",
"outcome_counts",
"channels",
"artifacts",
"records",
"errors"
],
"properties": {
"result_schema_version": { "type": "string", "const": "3.0" },
"status": { "type": "string", "enum": ["success", "failed"] },
"activation_eligible": { "type": "boolean" },
"ingestion_mode": { "type": "string", "const": "opera_xml" },
"business_date": { "type": ["string", "null"], "format": "date" },
"processor_version": { "type": "string", "minLength": 1 },
"rule_set_sha256": { "$ref": "#/$defs/sha256" },
"source_rows": { "type": "integer", "minimum": 0 },
"removed_by_rate_code": { "type": "integer", "minimum": 0 },
"removed_as_duplicates": { "type": "integer", "minimum": 0 },
"output_rows": { "type": "integer", "minimum": 0 },
"outcome_counts": {
"type": "object",
"additionalProperties": false,
"required": [
"duplicate",
"excluded_rate_code",
"price_unmatched",
"retained",
"validation_failed"
],
"properties": {
"duplicate": { "type": "integer", "minimum": 0 },
"excluded_rate_code": { "type": "integer", "minimum": 0 },
"price_unmatched": { "type": "integer", "minimum": 0 },
"retained": { "type": "integer", "minimum": 0 },
"validation_failed": { "type": "integer", "minimum": 0 }
}
},
"channels": {
"type": "array",
"items": { "$ref": "#/$defs/channel" }
},
"artifacts": {
"type": "object",
"additionalProperties": false,
"required": [
"source_xml",
"daily_report",
"result_json",
"exception_report"
],
"properties": {
"source_xml": { "$ref": "#/$defs/nullableArtifact" },
"daily_report": { "$ref": "#/$defs/nullableArtifact" },
"result_json": { "$ref": "#/$defs/nullableArtifact" },
"exception_report": { "$ref": "#/$defs/nullableArtifact" }
}
},
"records": {
"type": "array",
"items": { "$ref": "#/$defs/record" }
},
"errors": {
"type": "array",
"items": { "$ref": "#/$defs/error" }
}
},
"allOf": [
{
"if": {
"properties": { "status": { "const": "success" } },
"required": ["status"]
},
"then": {
"properties": {
"activation_eligible": { "const": true },
"business_date": { "type": "string", "format": "date" },
"errors": { "maxItems": 0 },
"artifacts": {
"properties": {
"source_xml": { "$ref": "#/$defs/artifact" },
"daily_report": { "$ref": "#/$defs/artifact" },
"result_json": { "$ref": "#/$defs/artifact" },
"exception_report": { "type": "null" }
}
}
}
},
"else": {
"properties": {
"activation_eligible": { "const": false },
"output_rows": { "const": 0 },
"channels": { "maxItems": 0 },
"errors": { "minItems": 1 },
"artifacts": {
"properties": {
"daily_report": { "type": "null" },
"exception_report": { "$ref": "#/$defs/artifact" }
}
}
}
}
}
],
"$defs": {
"sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
},
"artifact": {
"type": "object",
"additionalProperties": false,
"required": [
"file_kind",
"original_filename",
"sha256",
"byte_size",
"mime_type"
],
"properties": {
"file_kind": {
"type": "string",
"enum": [
"opera_xml",
"daily_xlsx",
"result_json",
"exception_xlsx"
]
},
"original_filename": { "type": "string", "minLength": 1 },
"sha256": { "$ref": "#/$defs/sha256" },
"byte_size": { "type": "integer", "minimum": 0 },
"mime_type": { "type": "string", "minLength": 1 }
}
},
"nullableArtifact": {
"oneOf": [
{ "$ref": "#/$defs/artifact" },
{ "type": "null" }
]
},
"channel": {
"type": "object",
"additionalProperties": false,
"required": ["worksheet", "rows"],
"properties": {
"worksheet": { "type": "string", "minLength": 1 },
"rows": { "type": "integer", "minimum": 0 }
}
},
"record": {
"type": "object",
"additionalProperties": false,
"required": [
"source_sequence",
"source_location",
"source_worksheet",
"source_row_no",
"outcome",
"decision_codes",
"duplicate_of_source_sequence",
"adults",
"children",
"block_code",
"no_of_rooms",
"company_name",
"company_key",
"confirmation_no",
"disp_room_no",
"effective_rate_amount",
"full_name",
"res_comment",
"group_code_key",
"booking_source_match_status",
"trace_text",
"products",
"rate_code",
"normalized_rate_code",
"room_category_label",
"arrival",
"departure",
"nights",
"real_price",
"total_price",
"kb_amount",
"channel_key",
"pricing_method"
],
"properties": {
"source_sequence": { "type": "integer", "minimum": 1 },
"source_location": { "type": "string", "minLength": 1 },
"source_worksheet": { "type": "null" },
"source_row_no": { "type": "null" },
"outcome": {
"type": "string",
"enum": [
"retained",
"excluded_rate_code",
"duplicate",
"validation_failed",
"price_unmatched"
]
},
"decision_codes": {
"type": "array",
"uniqueItems": true,
"items": { "type": "string", "minLength": 1 }
},
"duplicate_of_source_sequence": {
"type": ["integer", "null"],
"minimum": 1
},
"adults": { "type": ["integer", "null"] },
"children": { "type": ["integer", "null"] },
"block_code": { "type": "string" },
"no_of_rooms": { "type": ["integer", "null"] },
"company_name": { "type": "string" },
"company_key": { "type": ["string", "null"], "minLength": 1 },
"confirmation_no": { "type": "string" },
"disp_room_no": { "type": "string" },
"effective_rate_amount": { "type": ["number", "null"] },
"full_name": { "type": "string" },
"res_comment": { "type": "string" },
"group_code_key": { "type": ["string", "null"], "minLength": 1 },
"booking_source_match_status": {
"type": "string",
"enum": ["missing_group_code", "not_checked"]
},
"trace_text": { "type": "string" },
"products": { "type": "string" },
"rate_code": { "type": "string" },
"normalized_rate_code": { "type": ["string", "null"], "minLength": 1 },
"room_category_label": { "type": "string" },
"arrival": { "type": ["string", "null"], "format": "date" },
"departure": { "type": ["string", "null"], "format": "date" },
"nights": { "type": ["integer", "null"] },
"real_price": { "type": ["number", "null"] },
"total_price": { "type": ["number", "null"] },
"kb_amount": { "type": ["number", "null"] },
"channel_key": { "type": ["string", "null"], "minLength": 1 },
"pricing_method": {
"type": ["string", "null"],
"enum": ["zero_price_exception", "price_reference_exact", null]
}
},
"allOf": [
{
"if": {
"properties": { "outcome": { "const": "duplicate" } },
"required": ["outcome"]
},
"then": {
"properties": {
"duplicate_of_source_sequence": {
"type": "integer",
"minimum": 1
}
}
},
"else": {
"properties": {
"duplicate_of_source_sequence": { "type": "null" }
}
}
},
{
"if": {
"properties": { "outcome": { "const": "retained" } },
"required": ["outcome"]
},
"then": {
"properties": {
"adults": { "type": "integer", "minimum": 0 },
"children": { "type": "integer", "minimum": 0 },
"no_of_rooms": { "type": "integer", "minimum": 1 },
"effective_rate_amount": { "type": "number", "minimum": 0 },
"nights": { "type": "integer", "minimum": 0 },
"real_price": { "type": "number", "minimum": 0 },
"total_price": { "type": "number", "minimum": 0 },
"kb_amount": { "type": ["number", "null"], "minimum": 0 }
}
}
}
]
},
"error": {
"type": "object",
"additionalProperties": false,
"required": [
"code",
"stage",
"source_location",
"company_name",
"rate_code",
"effective_rate_amount",
"confirmation_no",
"message"
],
"properties": {
"code": { "type": "string", "minLength": 1 },
"stage": { "type": "string", "minLength": 1 },
"source_location": { "type": ["string", "null"] },
"company_name": { "type": ["string", "null"] },
"rate_code": { "type": ["string", "null"] },
"effective_rate_amount": { "type": ["number", "null"] },
"confirmation_no": { "type": ["string", "null"] },
"message": { "type": "string", "minLength": 1 }
}
}
}
}