Reporting schema v0.1
flight_day_one
Tier 0. The five things every operator already has. If this takes more than a few minutes per flying day, the bar is too high.
| field | type | required | description |
|---|---|---|---|
record_type | const 'flight_day_one' | yes | |
schema_version | const '0.1' | yes | |
submitter_id | string | yes | Pseudonymous operator id issued by the broker. |
platform_type | string | yes | Platform name and type, e.g. 'multirotor, 7 kg MTOM, operator-built' or a manufacturer model. |
hours_of_service | number | yes | Cumulative airframe hours at end of flight (the denominator). |
flight_start | string | yes | |
flight_stop | string | yes | |
operating_location | string | yes | Coarse location: named area, corridor id, or grid square. Precision at the operator's discretion. |
notes | string | Any other relevant information. Free text, optional. | |
integrity | object | Optional. Integrity level of the key claims, where the operator can state it. | |
airframe | string | Operator's airframe identifier, pseudonymous allowed. Optional. |
occurrence
Tier 1. One occurrence, in the CAA's hazardous-event and barrier vocabulary. Includes the novel near-miss classes: refusal to arm, and pilot intervention or automation handover.
| field | type | required | description |
|---|---|---|---|
record_type | const 'occurrence' | yes | |
schema_version | const '0.1' | yes | |
submitter_id | string | yes | |
occurrence_id | string | yes | |
occurred_at | string | yes | |
reported_at | string | ||
classified_at | string | When the HE class was assigned. Drives SPI-12 latency. | |
platform_type | string | ||
hazardous_event | hazardous_event HE01, HE02, HE03, HE04, NONE | yes | |
phase_of_flight | phase_of_flight pre_arm, takeoff, climb, enroute, hold, approach, landing, post_flight, maintenance | yes | |
outcome | outcome completed, held, returned, diverted, emergency_landed, refuge_landed, hold_timeout_landed, forced_descent, terminated, refused_to_arm, did_not_depart | yes | |
escalation_path | array of string nominal, degraded_hold, rtl, divert, emergency_land, terminate | Ladder rungs traversed, in order. | |
barriers | array of barrier | yes | The barrier story: which controls activated, which held, which did not. |
configuration_id | string | Aircraft configuration identifier at the time, e.g. SigNet config_hash (short form acceptable). | |
configuration_integrity | integrity_level L1, L2, L3, L4, L5, L6 | ||
firmware_id | string | ||
firmware_integrity | integrity_level L1, L2, L3, L4, L5, L6 | ||
parts | array of part_status | ||
refusal_reason_class | refusal_reason_class identity, standing_refusal, non_operational_class, configuration_not_approved, route_hash_mismatch, bad_signature, life_limit, directive_constraint, insufficient_energy, no_pad, segment_unavailable, consent_missing, other | Required when outcome is refused_to_arm. | |
refusal_airborne | boolean | True if the refusal was issued to an airborne aircraft (directed divert). | |
intervention_reason_class | intervention_reason_class pilot_takeover, pilot_abort, authority_refusal_airborne, automation_handover_to_pilot, automation_handover_to_autonomy, other | ||
third_party_involved | boolean | ||
injury_or_damage | boolean | ||
mor_filed | boolean | Mandatory Occurrence Report filed with the CAA. | |
evidence_bundle_ref | string | Reference to the per-flight evidence bundle (e.g. ledger chain head hash) so the record can be bound to the flight it describes. | |
narrative | string | ||
classification | string human, rule-derived | human: HE class and barrier story assigned by a person. rule-derived: assigned by a documented mapping rule from machine events (e.g. the SigNet exporter). Absent means human. | |
simulated | boolean | True if the record comes from a simulated fleet (seed corpus). Never aggregated with live data. | |
airframe | string | Operator's airframe identifier, pseudonymous allowed. Optional. |
periodic_summary
Tier 2. Per operator, per period: denominators, airworthiness summary, near-miss classes, and safety performance indicators.
| field | type | required | description |
|---|---|---|---|
record_type | const 'periodic_summary' | yes | |
schema_version | const '0.1' | yes | |
submitter_id | string | yes | |
period_start | string | yes | |
period_end | string | yes | |
fleet | array of object | yes | |
flights | integer | yes | |
flight_hours | number | yes | |
hours_integrity | integrity_level L1, L2, L3, L4, L5, L6 | ||
outcomes | object | Count per outcome class. | |
refusals_to_arm | object | Count per refusal reason class. | |
interventions | object | ||
life_limited_parts | object | ||
occurrences_by_he | object | ||
spis | array of object | Safety performance indicators as defined by the operator's SMS (SigNet: docs/sms/03). | |
evidence_chain_head | string | Hash of the ledger chain head at period end, for independent custody (L5) anchoring. | |
simulated | boolean | True if the record comes from a simulated fleet (seed corpus). Never aggregated with live data. | |
chain_verified | boolean | ||
airframe | string | Operator's airframe identifier, pseudonymous allowed. Optional. |
Validate a record
Examples
flight_day_one
{
"record_type": "flight_day_one",
"schema_version": "0.1",
"submitter_id": "op-7f3a",
"platform_type": "multirotor, 7 kg MTOM, operator-built",
"hours_of_service": 12.4,
"flight_start": "2026-09-02T09:14:00Z",
"flight_stop": "2026-09-02T09:31:00Z",
"operating_location": "corridor LDN-H1, Guy's to St Thomas'",
"notes": "first live corridor flight, no occurrences",
"integrity": {
"hours_of_service": "L2",
"flight_times": "L2"
},
"airframe": "AF-01"
}occurrence
{
"record_type": "occurrence",
"schema_version": "0.1",
"submitter_id": "op-7f3a",
"occurrence_id": "occ-2026-09-02-001",
"occurred_at": "2026-09-02T09:05:12Z",
"reported_at": "2026-09-02T09:05:12Z",
"classified_at": "2026-09-02T10:00:00Z",
"platform_type": "multirotor, 7 kg MTOM, operator-built",
"hazardous_event": "NONE",
"phase_of_flight": "pre_arm",
"outcome": "refused_to_arm",
"escalation_path": [
"nominal"
],
"barriers": [
{
"name": "config pin",
"type": "preventive",
"result": "held",
"evidence_ref": "MISSION_DENIED",
"integrity": "L4",
"oso": [
3,
5,
7
]
}
],
"configuration_id": "9c1e4a7b2d",
"configuration_integrity": "L4",
"firmware_id": "ArduCopter 4.6.1",
"firmware_integrity": "L1",
"parts": [
{
"kind": "power",
"hours": 310.5,
"limit_hours": 500,
"state": "in_life",
"implicated": false
}
],
"refusal_reason_class": "configuration_not_approved",
"refusal_airborne": false,
"third_party_involved": false,
"injury_or_damage": false,
"mor_filed": false,
"evidence_bundle_ref": "sha256:4b9e...",
"classification": "human",
"narrative": "Parameter change after bench test not re-approved; permit denied; config re-approved after review; flight departed 09:14.",
"airframe": "AF-01"
}periodic_summary
{
"record_type": "periodic_summary",
"schema_version": "0.1",
"submitter_id": "op-7f3a",
"period_start": "2026-09-01",
"period_end": "2026-09-30",
"fleet": [
{
"platform_type": "multirotor, 7 kg MTOM, operator-built",
"count": 1,
"configuration_classes": [
"ops"
],
"flights": 42,
"flight_hours": 11.8
}
],
"flights": 42,
"flight_hours": 11.8,
"hours_integrity": "L2",
"outcomes": {
"completed": 41,
"diverted": 1
},
"refusals_to_arm": {
"configuration_not_approved": 1,
"insufficient_energy": 2
},
"interventions": {
"pilot_abort": 0
},
"life_limited_parts": {
"tracked": 7,
"scheduled_maintenance": 0,
"grounded": 0,
"retired": 0,
"min_margin_fraction": 0.38
},
"occurrences_by_he": {
"NONE": 3
},
"spis": [
{
"id": "SPI-07",
"name": "critical forced descent rate",
"value": 0,
"unit": "per flight",
"target": 0,
"alert": false,
"integrity": "L2"
},
{
"id": "SPI-06",
"name": "divert rate",
"value": 0.024,
"unit": "per flight",
"target": 0.005,
"alert": true,
"integrity": "L2"
}
],
"evidence_chain_head": "sha256:e21f...",
"chain_verified": true
}periodic_summary_v1_sim
{
"record_type": "periodic_summary",
"schema_version": "0.1",
"submitter_id": "seed-v1-sim",
"period_start": "2026-07-23",
"period_end": "2026-07-26",
"simulated": true,
"fleet": [
{
"platform_type": "simulated multirotor fleet, London corridor model (SigNet v1 reference implementation)",
"count": 8,
"configuration_classes": [
"ops"
],
"flights": 313298,
"flight_hours": 0
}
],
"flights": 313298,
"flight_hours": 0,
"hours_integrity": "L2",
"outcomes": {
"completed": 312690,
"diverted": 1038,
"emergency_landed": 633,
"refuge_landed": 101,
"hold_timeout_landed": 89,
"forced_descent": 33
},
"refusals_to_arm": {
"other": 208
},
"interventions": {},
"life_limited_parts": {
"tracked": 56,
"scheduled_maintenance": 0,
"grounded": 0,
"retired": 0
},
"occurrences_by_he": {
"HE01": 33,
"NONE": 208
},
"spis": [
{
"id": "SPI-01",
"name": "evidence chain integrity",
"value": 1,
"unit": "fraction verified",
"target": 1,
"alert": false,
"integrity": "L2"
},
{
"id": "SPI-02",
"name": "permit denial rate",
"value": 0.000664,
"unit": "per request",
"alert": false,
"integrity": "L2"
},
{
"id": "SPI-06",
"name": "divert rate",
"value": 0.003313,
"unit": "per flight",
"target": 0.005,
"alert": false,
"integrity": "L2"
},
{
"id": "SPI-07",
"name": "critical forced descent rate",
"value": 0.000105,
"unit": "per flight",
"target": 0,
"alert": true,
"integrity": "L2"
},
{
"id": "SPI-08",
"name": "emergency landing rate",
"value": 0.002627,
"unit": "per flight",
"target": 0.003,
"alert": false,
"integrity": "L2"
}
],
"chain_verified": true
}