SigNet SMS draft v0

Reporting schema v0.1

Download JSON Schema

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.

fieldtyperequireddescription
record_typeconst 'flight_day_one'yes
schema_versionconst '0.1'yes
submitter_idstringyesPseudonymous operator id issued by the broker.
platform_typestringyesPlatform name and type, e.g. 'multirotor, 7 kg MTOM, operator-built' or a manufacturer model.
hours_of_servicenumberyesCumulative airframe hours at end of flight (the denominator).
flight_startstringyes
flight_stopstringyes
operating_locationstringyesCoarse location: named area, corridor id, or grid square. Precision at the operator's discretion.
notesstringAny other relevant information. Free text, optional.
integrityobjectOptional. Integrity level of the key claims, where the operator can state it.
airframestringOperator'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.

fieldtyperequireddescription
record_typeconst 'occurrence'yes
schema_versionconst '0.1'yes
submitter_idstringyes
occurrence_idstringyes
occurred_atstringyes
reported_atstring
classified_atstringWhen the HE class was assigned. Drives SPI-12 latency.
platform_typestring
hazardous_eventhazardous_event
HE01, HE02, HE03, HE04, NONE
yes
phase_of_flightphase_of_flight
pre_arm, takeoff, climb, enroute, hold, approach, landing, post_flight, maintenance
yes
outcomeoutcome
completed, held, returned, diverted, emergency_landed, refuge_landed, hold_timeout_landed, forced_descent, terminated, refused_to_arm, did_not_depart
yes
escalation_patharray of string
nominal, degraded_hold, rtl, divert, emergency_land, terminate
Ladder rungs traversed, in order.
barriersarray of barrieryesThe barrier story: which controls activated, which held, which did not.
configuration_idstringAircraft configuration identifier at the time, e.g. SigNet config_hash (short form acceptable).
configuration_integrityintegrity_level
L1, L2, L3, L4, L5, L6
firmware_idstring
firmware_integrityintegrity_level
L1, L2, L3, L4, L5, L6
partsarray of part_status
refusal_reason_classrefusal_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_airbornebooleanTrue if the refusal was issued to an airborne aircraft (directed divert).
intervention_reason_classintervention_reason_class
pilot_takeover, pilot_abort, authority_refusal_airborne, automation_handover_to_pilot, automation_handover_to_autonomy, other
third_party_involvedboolean
injury_or_damageboolean
mor_filedbooleanMandatory Occurrence Report filed with the CAA.
evidence_bundle_refstringReference to the per-flight evidence bundle (e.g. ledger chain head hash) so the record can be bound to the flight it describes.
narrativestring
classificationstring
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.
simulatedbooleanTrue if the record comes from a simulated fleet (seed corpus). Never aggregated with live data.
airframestringOperator's airframe identifier, pseudonymous allowed. Optional.

periodic_summary

Tier 2. Per operator, per period: denominators, airworthiness summary, near-miss classes, and safety performance indicators.

fieldtyperequireddescription
record_typeconst 'periodic_summary'yes
schema_versionconst '0.1'yes
submitter_idstringyes
period_startstringyes
period_endstringyes
fleetarray of objectyes
flightsintegeryes
flight_hoursnumberyes
hours_integrityintegrity_level
L1, L2, L3, L4, L5, L6
outcomesobjectCount per outcome class.
refusals_to_armobjectCount per refusal reason class.
interventionsobject
life_limited_partsobject
occurrences_by_heobject
spisarray of objectSafety performance indicators as defined by the operator's SMS (SigNet: docs/sms/03).
evidence_chain_headstringHash of the ledger chain head at period end, for independent custody (L5) anchoring.
simulatedbooleanTrue if the record comes from a simulated fleet (seed corpus). Never aggregated with live data.
chain_verifiedboolean
airframestringOperator'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
}