An official website of the Disclosure Foundation

Introduction

Quick StartWhat is DisclosureOS?Installation

Concepts

Tour of the APIThe Companion PatternType Safety & Validation

API

API Reference

Guides

Data MigrationField Mapping ReferenceSupabase IntegrationBuilding on the StandardContributing

Field Mapping Reference

Common source columns and where they map in a DisclosureOS Observation

A quick-reference table for the most common source-data columns and their Observation targets. Use this alongside the Data Migration guide when writing a row mapper, or search the field explorer interactively.

Identifiers and provenance

Source columnObservation pathNotes
case_id, report_id, event_ididPrefix with a source tag: nuforc-12345. Keeps IDs unique and re-runs idempotent.
source_name, catalog_namedataSourceIdA short, stable string identifying the dataset, not the individual row.
(entire row)extensions.migration.rawRowPreserve the original source row verbatim for audit.

Dates and time

Source columnObservation pathNotes
date, date_reported, event_datetemporal.dateAlways a full YYYY-MM-DD. If the source only has month or year, pad with -01 and declare the real precision below.
(inferred from date format)temporal.dateCertaintyexact only when provenance proves the date. Otherwise approximate, estimated, or unknown.
(inferred from date format)temporal.dateGranularityday, month, year, or unknown. Must match what the source actually knows.
duration_seconds, duration_mintemporal.durationSecondsConvert to seconds. Set to undefined when unknown (not zero).
start_date + end_datetemporal.dateRangeUse { start, end } for events that span a period.
time, time_utctemporal.timeFreeform string; pair with timeZone when available.

Location

Source columnObservation pathNotes
city, state, regionlocation.nameComposite: "Phoenix, AZ". The human-readable label.
country, country_codelocation.countryFull name or ISO code.
lat, latitudelocation.latitudeDecimal degrees. Use 0 if absent (and mark coordinatePrecision accordingly).
lng, longitudelocation.longitudeDecimal degrees.
(inferred)location.coordinatePrecisiongps_fix, locality, region, country, or unknown.
location_type, site_typelocation.siteTypeGuard against the enum; fall back to unknown.
altitude, elevationlocation.elevationMeters above sea level.

Object and shape

Source columnObservation pathNotes
shape, object_shapeobjectCharacteristics.shapeMust be a recognized enum value. Use isObjectShape(value) guard; carry unmappable shapes in extensions.
size, apparent_sizeobjectCharacteristics.apparentSizeFreeform string.
colorobjectCharacteristics.colorFreeform string.
count, number_observedobjectCharacteristics.numberObservedInteger >= 0.

Witnesses

Source columnObservation pathNotes
witness_count, num_witnesseswitnesses.countInteger >= 0.
witness_type, credibilitywitnesses.credibilityGuard against enum values.
witness_nameswitnesses.descriptionsArray of strings.

Movement and behavior

Source columnObservation pathNotes
speed, speed_kmhmovement.speedKmhKilometers per hour, >= 0.
altitude, altitude_metersmovement.altitudeMetersFlight altitude in meters, >= 0.
flight_path, trajectorymovement.flightPathFreeform description string.
maneuvermovement.maneuversArray of strings describing observed maneuvers.

Media and documents

Source columnObservation pathNotes
photo_url, video_urlmedia[]Each entry needs { id, type, url } at minimum. Generate a stable id.
primary_photofeaturedMediaA single MediaAttachment promoted for display.
document_url, pdf_urldocuments[]Use { id, type, url } for attached documents.

Sensors

Source columnObservation pathNotes
radar_data, ir_datasensorEvidence.sensors[]Each sensor reading needs { id, type }. Guard type against the enum.
sensor_notessensorEvidence.notesFreeform string.

Source dispositions and explanations

Source columnObservation pathNotes
disposition, explanationNot a direct field; see belowSource dispositions are their assessments, not yours.

Source dispositions should be attributed to the source as an origin claim, or carried in extensions for later review. Never map a catalog's explanation: "probably Venus" to your own origin claim. See the migration guide on fabricated evaluation.

Status and lifecycle

Source columnObservation pathNotes
(always set)statusUse draft for all migrated records. Promotion is a separate review step.
(auto-set)createdAt, updatedAtISO timestamps. createObservation sets these automatically.
schema_versionschemaVersionSet by the factory. Do not override unless deliberately pinning.

Tips

  • Guard enums: use factory guards like isObjectShape() before assigning. Unmappable values should stay in extensions, not force-mapped to a close-but-wrong enum.
  • Preserve the raw row: always carry the full source row in extensions.migration.rawRow so any mapping decision can be audited later.
  • Stable IDs: prefix source IDs (nuforc-12345, mufon-67890) so re-runs are idempotent and provenance is visible.
  • Field search: use the onboarding workspace to search by field name, type, or enum value when mapping.

Data Migration

Map CSV, JSON, or database rows onto Observation records — a repeatable migration workflow

Supabase Integration

Store and query Observation records in Postgres — JSONB document with promoted columns

On this page

Identifiers and provenance
Dates and time
Location
Object and shape
Witnesses
Movement and behavior
Media and documents
Sensors
Source dispositions and explanations
Status and lifecycle
Tips