{
"id": "app.gainforest.dwc.measurement",
"defs": {
"main": {
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"occurrenceRef",
"result",
"createdAt"
],
"properties": {
"result": {
"refs": [
"#floraMeasurement",
"#faunaMeasurement",
"#genericMeasurement"
],
"type": "union",
"closed": false,
"description": "The typed measurement payload. Use floraMeasurement for sessile organisms (trees, plants, corals, sponges), faunaMeasurement for mobile organisms (mammals, birds, reptiles, amphibians, fish, insects), or genericMeasurement as a flexible fallback."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Timestamp of record creation in the ATProto PDS."
},
"measuredBy": {
"type": "string",
"description": "Person(s) who performed the measurements. Pipe-delimited for multiple.",
"maxGraphemes": 512
},
"measuredByID": {
"type": "string",
"description": "ORCID or other persistent identifier(s) for the measurer(s). Pipe-delimited for multiple.",
"maxGraphemes": 512
},
"occurrenceID": {
"type": "string",
"description": "The occurrenceID of the linked occurrence record (for cross-system interoperability with GBIF/DwC-A exports).",
"maxGraphemes": 256
},
"occurrenceRef": {
"type": "string",
"format": "at-uri",
"description": "AT-URI reference to the app.gainforest.dwc.occurrence record these measurements belong to."
},
"measurementDate": {
"type": "string",
"description": "Date the measurements were taken. ISO 8601 format.",
"maxGraphemes": 64
},
"measurementMethod": {
"type": "string",
"description": "General protocol or method used (e.g., 'ForestGEO standard protocol', 'mist-net examination').",
"maxGraphemes": 1024
},
"measurementRemarks": {
"type": "string",
"description": "Comments or notes about the measurement session.",
"maxGraphemes": 5000
}
}
},
"description": "A bundle of measurements, facts, or characteristics about an occurrence. One record per occurrence, with all measurements grouped inside a typed result union."
},
"faunaMeasurement": {
"type": "object",
"properties": {
"tagId": {
"type": "string",
"description": "Ear tag, flipper tag, fin tag, or wing tag identifier.",
"maxGraphemes": 128
},
"tagType": {
"type": "string",
"description": "Type of tag or mark applied.",
"knownValues": [
"ear-tag",
"flipper-tag",
"wing-tag",
"dorsal-tag",
"pit-tag",
"leg-band",
"neck-collar",
"gps-collar",
"radio-transmitter",
"satellite-transmitter",
"paint-mark",
"tattoo",
"toe-clip",
"other"
],
"maxGraphemes": 64
},
"bodyMass": {
"type": "string",
"description": "Body mass in grams.",
"maxGraphemes": 32
},
"fatScore": {
"type": "string",
"description": "Subcutaneous fat deposit score (0-8 scale, birds).",
"maxGraphemes": 8
},
"pitTagId": {
"type": "string",
"description": "Passive Integrated Transponder (microchip) number.",
"maxGraphemes": 128
},
"wingspan": {
"type": "string",
"description": "Full wingspan tip-to-tip in millimeters (birds, bats).",
"maxGraphemes": 32
},
"billDepth": {
"type": "string",
"description": "Depth of bill at base or gonys in millimeters (birds).",
"maxGraphemes": 32
},
"broodSize": {
"type": "integer",
"minimum": 0,
"description": "Number of surviving young."
},
"earLength": {
"type": "string",
"description": "Ear length from notch to tip in millimeters (mammals).",
"maxGraphemes": 32
},
"groupSize": {
"type": "integer",
"minimum": 1,
"description": "Total size of social group observed (herd, flock, pod, colony)."
},
"bandNumber": {
"type": "string",
"description": "Metal or color band/ring number (birds).",
"maxGraphemes": 128
},
"billLength": {
"type": "string",
"description": "Culmen length in millimeters (birds).",
"maxGraphemes": 32
},
"clutchSize": {
"type": "integer",
"minimum": 0,
"description": "Number of eggs in nest (birds, reptiles)."
},
"forkLength": {
"type": "string",
"description": "Fork length (snout to fork of caudal fin) in millimeters (fish).",
"maxGraphemes": 32
},
"litterSize": {
"type": "integer",
"minimum": 0,
"description": "Number of offspring in litter (mammals)."
},
"nestHeight": {
"type": "string",
"description": "Height of nest above ground in meters.",
"maxGraphemes": 32
},
"tailLength": {
"type": "string",
"description": "Tail length in millimeters.",
"maxGraphemes": 32
},
"wingLength": {
"type": "string",
"description": "Flattened wing chord length in millimeters (birds).",
"maxGraphemes": 32
},
"totalLength": {
"type": "string",
"description": "Total body length in millimeters (tip of snout/bill to tail tip).",
"maxGraphemes": 32
},
"tarsusLength": {
"type": "string",
"description": "Tarsometatarsus length in millimeters (birds).",
"maxGraphemes": 32
},
"carapaceWidth": {
"type": "string",
"description": "Straight carapace width in millimeters (turtles/tortoises).",
"maxGraphemes": 32
},
"forearmLength": {
"type": "string",
"description": "Forearm length in millimeters. Standard measurement for bats.",
"maxGraphemes": 32
},
"injuryPresent": {
"type": "boolean",
"description": "Whether visible injuries exist."
},
"carapaceLength": {
"type": "string",
"description": "Straight carapace length in millimeters (turtles/tortoises).",
"maxGraphemes": 32
},
"headBodyLength": {
"type": "string",
"description": "Head-body length excluding tail in millimeters.",
"maxGraphemes": 32
},
"hindFootLength": {
"type": "string",
"description": "Hind foot length in millimeters (mammals).",
"maxGraphemes": 32
},
"shoulderHeight": {
"type": "string",
"description": "Height at shoulder in millimeters (large mammals).",
"maxGraphemes": 32
},
"standardLength": {
"type": "string",
"description": "Standard length (snout to caudal fin base) in millimeters (fish).",
"maxGraphemes": 32
},
"geneticSampleId": {
"type": "string",
"description": "Identifier of tissue, hair, or feather sample collected for genetic analysis.",
"maxGraphemes": 128
},
"markDescription": {
"type": "string",
"description": "Description of natural marks, scars, or unique identifying features.",
"maxGraphemes": 512
},
"recaptureStatus": {
"type": "string",
"description": "Whether this is a new capture or recapture.",
"knownValues": [
"new",
"recapture",
"unknown"
],
"maxGraphemes": 16
},
"snoutVentLength": {
"type": "string",
"description": "Snout-vent length (SVL) in millimeters. Standard body measurement for reptiles and amphibians.",
"maxGraphemes": 32
},
"ectoparasiteLoad": {
"type": "string",
"description": "Ectoparasite assessment.",
"knownValues": [
"none",
"light",
"moderate",
"heavy"
],
"maxGraphemes": 32
},
"injuryDescription": {
"type": "string",
"description": "Description of injuries (scars, wounds, missing limbs, broken wing).",
"maxGraphemes": 512
},
"bodyConditionIndex": {
"type": "string",
"description": "Calculated condition index (mass/length ratio or regression residual).",
"maxGraphemes": 32
},
"bodyConditionScore": {
"type": "string",
"description": "Standardized body condition score (scale varies by taxon: 1-5 or 1-9).",
"maxGraphemes": 16
},
"diseaseDescription": {
"type": "string",
"description": "Description of disease signs (mange, lesions, tumors, fungal infection, avian pox, chytrid).",
"maxGraphemes": 512
},
"diseaseSignsPresent": {
"type": "boolean",
"description": "Whether signs of disease are visible."
},
"pectoralMuscleScore": {
"type": "string",
"description": "Pectoral muscle score (0-3 scale, birds).",
"maxGraphemes": 8
},
"colorBandCombination": {
"type": "string",
"description": "Description of color band arrangement (e.g., 'Red/White left, Blue/Metal right').",
"maxGraphemes": 256
},
"additionalMeasurements": {
"type": "array",
"items": {
"ref": "#measurementEntry",
"type": "ref"
},
"maxLength": 50,
"description": "Additional measurements not covered by the typed fields above."
}
},
"description": "Typed measurements for mobile organisms: mammals, birds, reptiles, amphibians, fish, insects, and other animals. Covers morphometrics, health assessments, reproductive measurements, and individual marking data. All numeric values stored as strings. Field descriptions include expected units for DwC-A export mapping."
},
"floraMeasurement": {
"type": "object",
"properties": {
"dbh": {
"type": "string",
"description": "Diameter at breast height in centimeters. The core measurement in all tree inventories (ForestGEO, NFI, RAINFOR).",
"maxGraphemes": 32
},
"girth": {
"type": "string",
"description": "Circumference of trunk at breast height in centimeters. Alternative to DBH (convertible via pi).",
"maxGraphemes": 32
},
"basalArea": {
"type": "string",
"description": "Cross-sectional area of trunk at breast height in square centimeters.",
"maxGraphemes": 32
},
"phenology": {
"type": "string",
"description": "Current phenological state.",
"knownValues": [
"leafless",
"flush",
"full-leaf",
"senescing",
"dormant"
],
"maxGraphemes": 64
},
"stemCount": {
"type": "integer",
"minimum": 1,
"description": "Number of stems for multi-stemmed individuals."
},
"crownDepth": {
"type": "string",
"description": "Vertical extent of crown in meters (total height minus height to crown base).",
"maxGraphemes": 32
},
"damageType": {
"type": "string",
"description": "Type of damage observed (e.g., 'broken crown', 'leaning', 'uprooted', 'hollow', 'scarred', 'stripped bark').",
"maxGraphemes": 256
},
"decayClass": {
"type": "string",
"description": "Decay classification for dead trees (1-5 scale per ForestGEO/FIA protocols).",
"maxGraphemes": 8
},
"growthForm": {
"type": "string",
"description": "Growth form classification of the organism.",
"knownValues": [
"tree",
"shrub",
"liana",
"palm",
"tree-fern",
"herb",
"grass",
"bamboo",
"epiphyte",
"succulent",
"mangrove",
"other"
],
"maxGraphemes": 64
},
"damageCause": {
"type": "string",
"description": "Cause of damage.",
"knownValues": [
"wind",
"lightning",
"fire",
"drought",
"flood",
"animal",
"human",
"disease",
"pest",
"unknown",
"other"
],
"maxGraphemes": 128
},
"healthScore": {
"type": "string",
"description": "Numeric health or vigor score (protocol-dependent scale).",
"maxGraphemes": 16
},
"totalHeight": {
"type": "string",
"description": "Total height from ground to highest living point in meters.",
"maxGraphemes": 32
},
"woodDensity": {
"type": "string",
"description": "Specific gravity of wood (dry mass / green volume) in grams per cubic centimeter.",
"maxGraphemes": 32
},
"colonyHeight": {
"type": "string",
"description": "Height of colony from base to apex in centimeters.",
"maxGraphemes": 32
},
"crownDieback": {
"type": "string",
"description": "Percentage of crown showing dieback.",
"maxGraphemes": 16
},
"estimatedAge": {
"type": "string",
"description": "Estimated age of the organism in years (from rings, radiocarbon, or allometry).",
"maxGraphemes": 32
},
"basalDiameter": {
"type": "string",
"description": "Diameter at ground level or just above root flare in centimeters. Standard for shrubs and multi-stemmed plants.",
"maxGraphemes": 32
},
"carbonContent": {
"type": "string",
"description": "Estimated carbon stored in kilograms of carbon (typically 47-50% of dry biomass).",
"maxGraphemes": 32
},
"crownDiameter": {
"type": "string",
"description": "Average crown diameter in meters (typically mean of multiple radial measurements).",
"maxGraphemes": 32
},
"crownPosition": {
"type": "string",
"description": "Canopy position relative to neighbors.",
"knownValues": [
"dominant",
"codominant",
"intermediate",
"suppressed",
"emergent"
],
"maxGraphemes": 32
},
"leafAreaIndex": {
"type": "string",
"description": "Leaf area index: total one-sided leaf area per unit ground area (m²/m²).",
"maxGraphemes": 32
},
"buttressHeight": {
"type": "string",
"description": "Height of buttress roots above ground in meters. Common in tropical trees.",
"maxGraphemes": 32
},
"colonyDiameter": {
"type": "string",
"description": "Maximum colony diameter in centimeters (corals, sponges).",
"maxGraphemes": 32
},
"vitalityStatus": {
"type": "string",
"description": "Overall vitality status of the organism.",
"knownValues": [
"alive",
"dead-standing",
"dead-fallen",
"moribund",
"missing",
"unknown"
],
"maxGraphemes": 32
},
"bleachingStatus": {
"type": "string",
"description": "Coral bleaching status.",
"knownValues": [
"none",
"pale",
"partially-bleached",
"fully-bleached",
"recently-dead"
],
"maxGraphemes": 32
},
"floweringStatus": {
"type": "string",
"description": "Current flowering/reproductive state.",
"knownValues": [
"none",
"budding",
"flowering",
"fruiting",
"senescing"
],
"maxGraphemes": 32
},
"colonyMorphology": {
"type": "string",
"description": "Colony growth form.",
"knownValues": [
"massive",
"branching",
"encrusting",
"foliose",
"tabular",
"columnar",
"free-living",
"other"
],
"maxGraphemes": 64
},
"depthBelowSurface": {
"type": "string",
"description": "Depth of the organism below water surface in meters.",
"maxGraphemes": 32
},
"abovegroundBiomass": {
"type": "string",
"description": "Estimated aboveground biomass in kilograms, derived from allometric equations.",
"maxGraphemes": 32
},
"belowgroundBiomass": {
"type": "string",
"description": "Estimated belowground (root) biomass in kilograms.",
"maxGraphemes": 32
},
"canopyCoverPercent": {
"type": "string",
"description": "Percentage of ground covered by the canopy of this individual.",
"maxGraphemes": 16
},
"heightToFirstBranch": {
"type": "string",
"description": "Height from ground to first major living branch (bole length) in meters.",
"maxGraphemes": 32
},
"dbhMeasurementHeight": {
"type": "string",
"description": "Height above ground where DBH was measured, in meters. Important when measured above buttress or irregularity. Default is 1.3m.",
"maxGraphemes": 32
},
"additionalMeasurements": {
"type": "array",
"items": {
"ref": "#measurementEntry",
"type": "ref"
},
"maxLength": 50,
"description": "Additional measurements not covered by the typed fields above."
},
"liveTissueCoverPercent": {
"type": "string",
"description": "Percentage of colony surface with live tissue.",
"maxGraphemes": 16
},
"annualDiameterIncrement": {
"type": "string",
"description": "Annual radial growth measured via dendrometer bands or core samples in millimeters per year.",
"maxGraphemes": 32
},
"heightMeasurementMethod": {
"type": "string",
"description": "Method used for height measurement.",
"knownValues": [
"clinometer",
"laser-rangefinder",
"hypsometer",
"direct-pole",
"estimated",
"drone-photogrammetry",
"lidar",
"other"
],
"maxGraphemes": 128
},
"biomassAllometricEquation": {
"type": "string",
"description": "Reference to the allometric equation used for biomass estimation (e.g., 'Chave et al. 2014').",
"maxGraphemes": 512
}
},
"description": "Typed measurements for sessile organisms: trees, woody plants, herbs, grasses, corals, sponges, lichens, and other non-mobile life forms. All numeric values stored as strings. Field descriptions include expected units for DwC-A export mapping."
},
"measurementEntry": {
"type": "object",
"required": [
"measurementType",
"measurementValue"
],
"properties": {
"measurementType": {
"type": "string",
"description": "The nature of the measurement (e.g., 'DBH', 'tree height', 'canopy cover', 'tail length', 'soil pH').",
"maxGraphemes": 256
},
"measurementUnit": {
"type": "string",
"description": "The units for the value (e.g., 'cm', 'm', 'kg', '%', 'degrees Celsius').",
"maxGraphemes": 64
},
"measurementValue": {
"type": "string",
"description": "The value of the measurement (e.g., '45.2', 'present', 'blue').",
"maxGraphemes": 1024
},
"measurementMethod": {
"type": "string",
"description": "Method or instrument used to determine this specific measurement.",
"maxGraphemes": 512
},
"measurementRemarks": {
"type": "string",
"description": "Notes about this specific measurement.",
"maxGraphemes": 1024
},
"measurementAccuracy": {
"type": "string",
"description": "Potential error (e.g., '0.5 cm', '5%').",
"maxGraphemes": 128
}
},
"description": "A single measurement fact, aligned with one row of the Darwin Core MeasurementOrFact extension. Used in additionalMeasurements arrays and in genericMeasurement."
},
"genericMeasurement": {
"type": "object",
"required": [
"measurements"
],
"properties": {
"measurements": {
"type": "array",
"items": {
"ref": "#measurementEntry",
"type": "ref"
},
"maxLength": 100,
"description": "Array of individual measurements, each with type, value, and optional unit."
}
},
"description": "Flexible measurement container for organisms that do not fit the flora/fauna split, or for legacy compatibility. Contains an array of key-value measurement entries."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1,
"description": "Measurement or fact records aligned with the Darwin Core MeasurementOrFact class. Links to an occurrence via occurrenceRef. Supports three paths: floraMeasurement (typed fields for sessile organisms like trees, plants, corals), faunaMeasurement (typed fields for mobile organisms like mammals, birds, reptiles, fish), and genericMeasurement (flexible key-value array for anything else). All three paths bundle multiple measurements into a single record per occurrence, reducing PDS storage compared to one-record-per-measurement."
}