{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://signet.example/schema/reporting-v0.json","title":"SigNet UAS operations reporting records, v0","description":"Three record tiers proposed as the seed of a minimum reporting standard for UAS BVLOS operations: flight_day_one (Tier 0), occurrence (Tier 1), periodic_summary (Tier 2). Fields, not mechanisms. Integrity levels follow SigNet ADR-0007 (L1 assertion, L2 custody, L3 attribution, L4 measurement, L5 independent custody, L6 hardware root of trust). Draft v0.1, 2026-08-19.","oneOf":[{"$ref":"#/$defs/flight_day_one"},{"$ref":"#/$defs/occurrence"},{"$ref":"#/$defs/periodic_summary"}],"$defs":{"integrity_level":{"type":"string","enum":["L1","L2","L3","L4","L5","L6"],"description":"ADR-0007 layer of the evidence behind a claim. L1 assertion, L2 custody (hash chain), L3 attribution (signed at origin), L4 measurement, L5 independent custody, L6 hardware root of trust. State low, never round up."},"hazardous_event":{"type":"string","enum":["HE01","HE02","HE03","HE04","NONE"],"description":"CAA UAS hazardous event. HE01 loss of control of the UA; HE02 trajectory conflict with obstacles, terrain or persons; HE03 trajectory conflict with other airspace users; HE04 unauthorised airspace access; NONE for near-miss classes that did not reach a hazardous event."},"phase_of_flight":{"type":"string","enum":["pre_arm","takeoff","climb","enroute","hold","approach","landing","post_flight","maintenance"]},"outcome":{"type":"string","enum":["completed","held","returned","diverted","emergency_landed","refuge_landed","hold_timeout_landed","forced_descent","terminated","refused_to_arm","did_not_depart"],"description":"Escalation ladder outcome. Maps to SigNet flights.status and landing events."},"refusal_reason_class":{"type":"string","enum":["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"],"description":"Why an aircraft was refused a permit or refused to arm. Maps to SigNet MISSION_DENIED and AIRFRAME_REFUSED reason prefixes."},"intervention_reason_class":{"type":"string","enum":["pilot_takeover","pilot_abort","authority_refusal_airborne","automation_handover_to_pilot","automation_handover_to_autonomy","other"]},"barrier":{"type":"object","required":["name","type","result"],"properties":{"name":{"type":"string","description":"Barrier name as in the operator's hazard log, e.g. 'energy gate at permit', 'config pin', 'CAMO life limit', 'pad wave-off'."},"type":{"type":"string","enum":["preventive","recovery"]},"result":{"type":"string","enum":["held","activated","did_not_hold","not_applicable","unknown"],"description":"held: prevented the event; activated: recovery barrier fired; did_not_hold: was in place and failed."},"evidence_ref":{"type":"string","description":"Ledger event type or id that evidences the barrier's behaviour, e.g. 'MISSION_DENIED', 'BATT_DIVERT', 'WAVE_OFF'."},"integrity":{"$ref":"#/$defs/integrity_level"},"oso":{"type":"array","items":{"type":"integer","minimum":1,"maximum":24},"description":"JARUS SORA OSO number(s) this barrier supports. Optional."}}},"part_status":{"type":"object","required":["kind","hours","limit_hours"],"properties":{"part_id":{"type":"string","description":"Operator's part identifier. May be anonymised."},"kind":{"type":"string","description":"Part class, e.g. arm_fl, power, payload, fc."},"hours":{"type":"number","minimum":0},"limit_hours":{"type":"number","minimum":0},"state":{"type":"string","enum":["in_life","scheduled_maintenance","grounded","retired"]},"implicated":{"type":"boolean","description":"True if this part is implicated in the occurrence."}}},"flight_day_one":{"type":"object","description":"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.","required":["record_type","schema_version","submitter_id","platform_type","hours_of_service","flight_start","flight_stop","operating_location"],"properties":{"record_type":{"const":"flight_day_one"},"schema_version":{"const":"0.1"},"submitter_id":{"type":"string","description":"Pseudonymous operator id issued by the broker."},"platform_type":{"type":"string","description":"Platform name and type, e.g. 'multirotor, 7 kg MTOM, operator-built' or a manufacturer model."},"hours_of_service":{"type":"number","minimum":0,"description":"Cumulative airframe hours at end of flight (the denominator)."},"flight_start":{"type":"string","format":"date-time"},"flight_stop":{"type":"string","format":"date-time"},"operating_location":{"type":"string","description":"Coarse location: named area, corridor id, or grid square. Precision at the operator's discretion."},"notes":{"type":"string","description":"Any other relevant information. Free text, optional."},"integrity":{"type":"object","description":"Optional. Integrity level of the key claims, where the operator can state it.","properties":{"hours_of_service":{"$ref":"#/$defs/integrity_level"},"flight_times":{"$ref":"#/$defs/integrity_level"}}},"airframe":{"type":"string","maxLength":40,"description":"Operator's airframe identifier, pseudonymous allowed. Optional."}}},"occurrence":{"type":"object","description":"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.","required":["record_type","schema_version","submitter_id","occurrence_id","occurred_at","hazardous_event","phase_of_flight","outcome","barriers"],"properties":{"record_type":{"const":"occurrence"},"schema_version":{"const":"0.1"},"submitter_id":{"type":"string"},"occurrence_id":{"type":"string"},"occurred_at":{"type":"string","format":"date-time"},"reported_at":{"type":"string","format":"date-time"},"classified_at":{"type":"string","format":"date-time","description":"When the HE class was assigned. Drives SPI-12 latency."},"platform_type":{"type":"string"},"hazardous_event":{"$ref":"#/$defs/hazardous_event"},"phase_of_flight":{"$ref":"#/$defs/phase_of_flight"},"outcome":{"$ref":"#/$defs/outcome"},"escalation_path":{"type":"array","items":{"type":"string","enum":["nominal","degraded_hold","rtl","divert","emergency_land","terminate"]},"description":"Ladder rungs traversed, in order."},"barriers":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/barrier"},"description":"The barrier story: which controls activated, which held, which did not."},"configuration_id":{"type":"string","description":"Aircraft configuration identifier at the time, e.g. SigNet config_hash (short form acceptable)."},"configuration_integrity":{"$ref":"#/$defs/integrity_level"},"firmware_id":{"type":"string"},"firmware_integrity":{"$ref":"#/$defs/integrity_level"},"parts":{"type":"array","items":{"$ref":"#/$defs/part_status"}},"refusal_reason_class":{"$ref":"#/$defs/refusal_reason_class","description":"Required when outcome is refused_to_arm."},"refusal_airborne":{"type":"boolean","description":"True if the refusal was issued to an airborne aircraft (directed divert)."},"intervention_reason_class":{"$ref":"#/$defs/intervention_reason_class"},"third_party_involved":{"type":"boolean"},"injury_or_damage":{"type":"boolean"},"mor_filed":{"type":"boolean","description":"Mandatory Occurrence Report filed with the CAA."},"evidence_bundle_ref":{"type":"string","description":"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":{"type":"string"},"classification":{"type":"string","enum":["human","rule-derived"],"description":"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":{"type":"boolean","default":false,"description":"True if the record comes from a simulated fleet (seed corpus). Never aggregated with live data."},"airframe":{"type":"string","maxLength":40,"description":"Operator's airframe identifier, pseudonymous allowed. Optional."}},"allOf":[{"if":{"properties":{"outcome":{"const":"refused_to_arm"}}},"then":{"required":["refusal_reason_class"]}}]},"periodic_summary":{"type":"object","description":"Tier 2. Per operator, per period: denominators, airworthiness summary, near-miss classes, and safety performance indicators.","required":["record_type","schema_version","submitter_id","period_start","period_end","fleet","flights","flight_hours"],"properties":{"record_type":{"const":"periodic_summary"},"schema_version":{"const":"0.1"},"submitter_id":{"type":"string"},"period_start":{"type":"string","format":"date"},"period_end":{"type":"string","format":"date"},"fleet":{"type":"array","items":{"type":"object","required":["platform_type","count"],"properties":{"platform_type":{"type":"string"},"count":{"type":"integer","minimum":0},"configuration_classes":{"type":"array","items":{"type":"string"}},"flights":{"type":"integer","minimum":0},"flight_hours":{"type":"number","minimum":0}}}},"flights":{"type":"integer","minimum":0},"flight_hours":{"type":"number","minimum":0},"hours_integrity":{"$ref":"#/$defs/integrity_level"},"outcomes":{"type":"object","description":"Count per outcome class.","additionalProperties":{"type":"integer","minimum":0},"propertyNames":{"$ref":"#/$defs/outcome"}},"refusals_to_arm":{"type":"object","description":"Count per refusal reason class.","additionalProperties":{"type":"integer","minimum":0},"propertyNames":{"$ref":"#/$defs/refusal_reason_class"}},"interventions":{"type":"object","additionalProperties":{"type":"integer","minimum":0},"propertyNames":{"$ref":"#/$defs/intervention_reason_class"}},"life_limited_parts":{"type":"object","properties":{"tracked":{"type":"integer","minimum":0},"scheduled_maintenance":{"type":"integer","minimum":0},"grounded":{"type":"integer","minimum":0},"retired":{"type":"integer","minimum":0},"min_margin_fraction":{"type":"number","minimum":0,"maximum":1,"description":"Smallest (limit - hours) / limit across the fleet."}}},"occurrences_by_he":{"type":"object","additionalProperties":{"type":"integer","minimum":0},"propertyNames":{"$ref":"#/$defs/hazardous_event"}},"spis":{"type":"array","description":"Safety performance indicators as defined by the operator's SMS (SigNet: docs/sms/03).","items":{"type":"object","required":["id","value"],"properties":{"id":{"type":"string","description":"e.g. SPI-07"},"name":{"type":"string"},"value":{"type":"number"},"unit":{"type":"string"},"target":{"type":"number"},"alert":{"type":"boolean"},"integrity":{"$ref":"#/$defs/integrity_level"}}}},"evidence_chain_head":{"type":"string","description":"Hash of the ledger chain head at period end, for independent custody (L5) anchoring."},"simulated":{"type":"boolean","default":false,"description":"True if the record comes from a simulated fleet (seed corpus). Never aggregated with live data."},"chain_verified":{"type":"boolean"},"airframe":{"type":"string","maxLength":40,"description":"Operator's airframe identifier, pseudonymous allowed. Optional."}}}}}