Schema reference.
The ULC record schema, written to JSON Schema Draft 2020-12, field by
field. Each block below is a table of its fields with type, required
status, constraints, and description; categorical fields link to the
taxonomy enum they draw
from, and value composites (provenanced numbers, dual-unit measurements,
file references) are documented once under
Common types. The machine
file is served at /schema/ulc.json.
This page documents 458 fields.
Record root
The top-level shape of a ULC record. Most fields are structural blocks documented in their own sections below; the index block, including the two computed views (the conformance level and the Product Achievements themes) and the restricted-substances flag, is computed by the builder, never authored.
| Field | Type and description |
|---|---|
ulc_version required | string pattern The ULC specification version this record conforms to. Required on every record. |
record_id required | string min length 3; pattern Stable identifier for this record. Convention: `<manufacturer-slug>-<catalog-slug>-<scenario-slug>` with lowercase ASCII and hyphens. By repository convention matches the filename stem, regardless of whether the file is `.ulc` (canonical records) or `.ulc.json` (authoring templates). Must be unique within a manufacturer's namespace. |
record_status required | RecordStatus (enum) Commercial lifecycle status of the product this record describes. |
record_status_as_of | string format date Calendar date on which the record_status was last verified. ISO 8601 date (YYYY-MM-DD). |
index required | Index Denormalized scan surface for AI agents, search indexers, and filter UIs. Every field is a projection of authoritative values from the deeper blocks below. GENERATED, NOT HAND-AUTHORED: produced deterministically by the `ulc build-index` reference CLI (see `tools/validator/`) from the deep blocks and stamped with `x-ulc-generated: true` plus a `builder_version` so consumers can detect stale indices. Manufacturers never type these values; their PIM export or ULC CLI writes them. Drift is prevented by construction, because the builder is a pure function of the deep blocks. |
product_family required | ProductFamily Family-level identity and metadata shared by every ULC record derived from the same cutsheet. Populated once by the manufacturer's PIM and replicated into each record in the family. |
configuration required | Configuration The specific photometric scenario this record represents. Identifies the tested axes and tested conditions that anchor the record's measurements. |
applicability | Applicability Declares the range of orderable SKU configurations this record's measurements apply to. Covers axes where multiple order-code values share the same photometric record, with derivation rules for scaled values (CCT multipliers, per-foot scaling, voltage-independence rationale). |
electrical | Electrical Electrical measurements and nominal values at the luminaire input. |
photometry | Photometry Photometric measurements including total luminous flux, intensity distribution summary, zonal lumens, beam and field angles, UGR, and BUG classification when applicable. |
colorimetry | Colorimetry Color measurements including nominal and measured CCT, Duv, CRI, and TM-30 color-rendition metrics. |
alpha_opic_metrics | AlphaOpicMetrics Alpha-opic and melanopic metrics per CIE S 026 and IES RP-46-23. Includes per-channel alpha-opic efficacies and the melanopic daylight efficacy ratio used for circadian metric calculation. |
flicker_measurements | FlickerMeasurements Temporal light artefact (TLA) measurements per LM-90-20 and metric values per CIE TN 006 and IEEE 1789. |
outdoor_classification | OutdoorClassification Outdoor luminaire classification per TM-15 (LCS and BUG), applicable only to outdoor fixtures. |
exit_sign | ExitSign Exit-sign dataset, present on records whose `product_family.primary_category` is `exit_sign` (categories a and c). Carries the legend, illumination mode and technology, geometry, directional indicators, and the mode-specific photometrics (face luminance, face illuminance, contrast ratio, tritium rated life, photoluminescent charging illuminance). Optional and additive: an identity-only sign record with an empty `exit_sign` block is schema-valid and grades incomplete. Internally illuminated signs are powered products that also author the `emergency` block; unpowered modes (externally illuminated, self-luminous, photoluminescent) carry their power story in `illumination_mode` alone. |
emergency | Emergency Emergency-power dataset, authored by every product with an electrical emergency-power story: dedicated emergency luminaires (`primary_category: emergency_luminaire`), internally illuminated exit signs, combo exit/emergency units, and normal fixtures carrying a factory emergency-power option. `emergency_role` and `power_source` are required members. Not for UL 1994 photoluminescent egress-path-marking products, which are a different product class. See `exit_sign` for the sign half of a combo unit. |
operating_point | OperatingPoint Declared operating conditions at which measured values were taken (input voltage, ambient temperature, drive current). |
test_conditions | TestConditions Additional measurement-context metadata that qualifies attested values (stabilization method, nonstandard-condition flags, temperature monitoring point). |
instrumentation | Instrumentation Equipment and facility metadata for the laboratory that produced the measurements (goniometer type, photometric coordinate system, spectroradiometer). |
corrections_applied | CorrectionsApplied Corrections applied during measurement or data reduction (self-absorption, stray light, spectral mismatch, f1' correction). |
uncertainty | Uncertainty Reported measurement uncertainty values with coverage factor. |
thermal_derating | ThermalDerating Thermal performance curves relating case or ambient temperature to flux, efficacy, or color per LM-82-20. |
lumen_maintenance_package | array of LumenMaintenancePackageEntry Package-level lumen maintenance per LM-80 and TM-21 for each LED package used in the luminaire. One luminaire may reference multiple packages. |
lumen_maintenance_luminaire | LumenMaintenanceLuminaire Luminaire-level lumen maintenance. Supports three frameworks: TM-28 projection (direct or combined extrapolation), CIE 97 Luminaire Maintenance Factor tables, or a bare manufacturer-rated claim with no cited method. |
chromaticity_shift_projection | ChromaticityShiftProjection Projected chromaticity shift over luminaire life per TM-35. |
sustainability_declaration | SustainabilityDeclaration Structured sustainability attestation (Declare label and similar). Preserves the ingredient list, LBC Red List tier, expiration date, and document identifier. |
compatible_accessories | array of CompatibleAccessory Mechanical accessories (junction boxes, plaster frames, mounting rings, canopies, conduits) that are compatible with this luminaire SKU but are ordered separately under their own catalog numbers. Accessories that do not change photometry are listed here rather than getting their own ULC records. |
source_files required | array of SourceFile min 0 items Source files from which this record derives its data. Each file is referenced by filename, optional URL, and SHA-256 content hash. Files are not embedded. The `source_files` key is part of the record envelope, so it is present on every record, but the array may be empty (`minItems` 0) for an incomplete record still being authored, and its entries are neither required nor graded. The graded core cutsheet item is the family-level pointer `product_family.cutsheet`; `source_files[]` is the integrity-tracked provenance manifest for whatever documents a record cites. |
attestations | array of Attestation External program attestations (listings, certifications, test-method conformance). Each attestation carries a program identifier, value type, and optional measured_quantities array listing the ULC field paths it covers. Attestations may be absolute, option-conditional, or case-by-case verification-required. |
extensions | Extensions Top-level escape hatch for values that do not fit the core schema. `manufacturer_specific` holds vendor-specific fields; `experimental` holds values under active review for future promotion into the main schema. Consumers should treat extensions as informational only. |
ProductFamily
Cutsheet-level identity and metadata shared by every ULC record in the family.
| Field | Type and description |
|---|---|
family_id required | string pattern Stable slug grouping all records from the same cutsheet. |
family_display_name | string |
family_description | string |
manufacturer required | object |
manufacturer.slug required | string |
manufacturer.display_name required | string |
manufacturer.parent_manufacturer_slug | string Optional parent company slug when the manufacturer is a subsidiary (for example Vode is a subsidiary of Lumenpulse). |
catalog_line | string |
catalog_model required | string |
cutsheet | FileReference |
primary_category | PrimaryCategory (enum) |
secondary_function | array of SecondaryFunction (enum) |
indoor_outdoor | IndoorOutdoor (enum) |
technical_region | TechnicalRegion (enum) Market-region configuration of the fixture. Captures the voltage and frequency variant of the SKU family. Many product families ship parallel North American, European, and Japanese variants sharing optics and light engines but with different drivers and certifications; this field makes the market variant explicit for consumer filter UIs. |
mounting_types | array of MountingType (enum) |
environment_rating | EnvironmentRating (enum) |
shape | Shape (enum) |
orientation | Orientation (enum) |
shared_mechanical | object |
shared_mechanical.housing_material | HousingMaterial (enum) |
shared_mechanical.lens_material | LensMaterial (enum) |
shared_mechanical.reflector_material | string Material of the internal reflector or darklight cone, when the optic uses one. Free-string to accommodate manufacturer-specific descriptions such as 'polymer, aluminum vaporized, silver, specular' (a typical architectural darklight reflector). A future revision may promote this to a closed enum. |
shared_mechanical.finish_color_options | array of string |
shared_mechanical.ip_rating | string pattern |
shared_mechanical.ik_rating | string pattern |
shared_mechanical.ambient_operating_range | object Declared ambient operating temperature range for the fixture. Dual-unit per spec: Celsius authoritative, Fahrenheit is the required derived companion. |
shared_mechanical.ambient_operating_range.min | DualUnitTemperature |
shared_mechanical.ambient_operating_range.max | DualUnitTemperature |
physical_dimensions | object Luminaire geometric and mass characteristics. All dimensional fields use the dual-unit SI-authoritative pattern via DualUnitLength and DualUnitMass. Not every field applies to every product category; authors populate only what the cutsheet publishes. The block is flexible by design so indoor recessed, pendant, pole-top outdoor, and linear products can each use the appropriate subset of slots. |
physical_dimensions.overall_diameter | DualUnitLength Outside diameter of the luminaire for round fixtures. |
physical_dimensions.overall_length | DualUnitLength Overall length for linear or rectangular fixtures. |
physical_dimensions.overall_width | DualUnitLength Overall width for rectangular or non-round fixtures. |
physical_dimensions.overall_height | DualUnitLength Overall height for pole-top, bollard, pendant, or wall-mount fixtures. For recessed fixtures, use recess_depth instead. |
physical_dimensions.luminaire_mass | DualUnitMass Mass of the luminaire as published on the cutsheet. For Pattern D linear fixtures where mass scales with length, populate linear_mass_per_foot instead or in addition. |
physical_dimensions.linear_mass_per_foot | DualUnitMassPerLength Per-length mass rate for linear fixtures where total mass scales with fixture length (typical of Pattern D products). Pairs with photometry.per_length_normalized.lumens_per_foot. Uses DualUnitMassPerLength, not DualUnitMass, because the quantity is a mass rate (kg per meter, lb per foot), not an absolute mass. |
physical_dimensions.lens_width | DualUnitLength Width of the light-emitting lens or optical opening, when distinct from the overall luminaire width. |
physical_dimensions.ceiling_aperture | DualUnitLength For recessed fixtures, the diameter (or effective diameter) of the ceiling cut-out the fixture requires. |
physical_dimensions.recess_depth | DualUnitLength For recessed fixtures, the depth above the ceiling plane that the fixture housing occupies. |
physical_dimensions.accommodated_ceiling_thickness_range | object For recessed fixtures, the minimum and maximum ceiling thickness the standard mounting hardware accommodates. |
physical_dimensions.accommodated_ceiling_thickness_range.min | DualUnitLength |
physical_dimensions.accommodated_ceiling_thickness_range.max | DualUnitLength |
physical_dimensions.connection_cable_length | DualUnitLength Length of an attached connection cable (pre-installed pigtail or tether) if the cutsheet publishes it. |
physical_dimensions.driver_dimensions | object Overall dimensions of a remote or integral driver housing when the cutsheet publishes them. |
physical_dimensions.driver_dimensions.length | DualUnitLength |
physical_dimensions.driver_dimensions.width | DualUnitLength |
physical_dimensions.driver_dimensions.height | DualUnitLength |
physical_dimensions.epa | DualUnitArea Effective Projected Area for pole-mounted outdoor fixtures under AASHTO 2013 wind-loading analysis. Uses DualUnitArea so SI (m2) and Imperial (ft2) are both required, matching the ULC dual-unit policy. |
shared_warranty | object |
shared_warranty.term_years | integer min 0 |
shared_warranty.scope | string |
shared_warranty.conditions_reference | string |
shared_attestations | array of Attestation Attestations that apply to every SKU in the family without qualification. SKU-specific or option-conditional attestations live in the top-level `attestations[]` array instead. |
introduced_at | string format date |
end_of_life_program_url | string format uri |
Configuration
The specific photometric scenario this record represents. Fields describe what was tested, not what the record's measurements apply to (that is the applicability block's job).
| Field | Type and description |
|---|---|
photometric_scenario_id required | string Identifier for the photometric scenario within the family. Typically a slug summarizing the tested axes. |
catalog_number | string The specific manufacturer-assigned catalog number or order code this record represents. Populated by Pattern A manufacturers who publish one cutsheet per SKU. Pattern B manufacturers whose scenario covers a catalog pattern typically omit this field and rely on `applicability.applicable_catalog_pattern` plus `record_id` for identification. |
scenario_label | string Human-readable description of the tested scenario. |
tested_axes | object Axes of the configurator that this scenario's measurement varies. Each axis names its manufacturer-label, optional ULC category mapping, and tested value. |
tested_axes.distribution_code | object |
tested_axes.distribution_code.manufacturer_label | string |
tested_axes.distribution_code.distribution_type | DistributionType (enum) |
tested_axes.distribution_code.outdoor_distribution_type | OutdoorDistributionType (enum) |
tested_axes.light_engine_variant | string |
tested_axes.output_tier | object |
tested_axes.output_tier.manufacturer_label | string |
tested_axes.output_tier.tier_meaning | string |
tested_axes.cri_tier | CriTier (enum) |
tested_axes.color_tunability | ColorTunabilityCapability (enum) |
tested_conditions | object Conditions fixed during the test that anchor this record's measurements. |
tested_conditions.nominal_cct_at_test | NominalCCT (enum) |
tested_conditions.input_voltage_at_test | string |
tested_conditions.mounting_at_test | MountingType (enum) |
tested_conditions.ambient_temperature | DualUnitTemperature |
tested_conditions.case_temperature | DualUnitTemperature |
source_ies_ref | string Reference to the IES file this scenario's photometry anchors to, if applicable. Matches a source_files entry. |
Applicability
Declares the range of orderable SKU configurations this record's measurements apply to. This is the mechanism that lets one ULC record cover many orderable SKUs without duplication.
| Field | Type and description |
|---|---|
applicable_catalog_pattern | string Order-code skeleton where `{AXIS}` placeholders mark axes covered by this record. Example: `AYAP-SR-{MOUNT}-HO-{CCT}-{CORD}-{FINISH}-{VOLT}-{OPTIONS}`. |
fixed_axes | object Order-code axes that must match a fixed value for this record to apply. |
covered_axes | object Order-code axes where multiple values share this record's photometry. Each entry lists the covered values and optionally a derivation rule (multiplier table, linear scaling, voltage-independence rationale). |
excluded_combinations | array of object Combinations that are orderable elsewhere in the family but not covered by this record. |
excluded_combinations[].axes required | object |
excluded_combinations[].reason required | string |
applicable_sku_count_estimate | integer min 0 Informational count of orderable SKUs this record covers. Not used for validation. |
CoveredAxis
One order-code axis covered by a record's applicability block.
| Field | Type and description |
|---|---|
values required | array of string Order-code values for this axis that share the record's photometry. |
rationale required | string Why these values share one record (for example `regulated driver renders voltage variance photometrically immaterial` or `finish is cosmetic`). |
derivation | DerivationRule Optional derivation rule for values that are not photometrically identical to the baseline but derive from it by a disclosed method. |
excludes | array of string Values that are part of this axis's order-code menu but are NOT covered by this record. |
DerivationRule
Manufacturer-declared rule for deriving per-axis values from a baseline measurement. Examples: CCT multiplier table (Selux), per-foot linear scaling (Vode), wattage-tier scaling, voltage step-down delta.
| Field | Type and description |
|---|---|
method required | string Named derivation method. |
baseline_axis_value | string |
multiplier_table | object Keyed multiplier table when the method produces values by multiplying a baseline. Keys are axis values, values are multipliers relative to the baseline. |
linear_rate | object Per-unit rate for linear scaling (for example lumens per foot). |
linear_rate.value | number |
linear_rate.unit | string |
reference | string Citation for where on the cutsheet the rule is published (for example `cutsheet_page_10_table`). |
note | string |
Electrical
Electrical quantities measured at the luminaire input.
| Field | Type and description |
|---|---|
input_power_w | ProvenancedNumber |
input_current_a | ProvenancedNumber |
input_voltage_v | ProvenancedNumber |
input_voltage_class | string |
power_factor | ProvenancedNumber |
thd_percent | ProvenancedNumber |
driver_protocol | DimmingProtocol (enum) |
dimming_method | DimmingMethod (enum) Underlying electrical dimming method (CCR, PWM, or hybrid). Independent of `driver_protocol`, which is the signaling layer. Authors populate this when the cutsheet publishes the method; absent if the method is not declared. |
dimming_range_percent | object Minimum and maximum dim levels as percentages of full output. For example a 3%-100% dim range captures the common architectural driver range. `min` is the lowest stable output the fixture can sustain before turning off; `max` is full output. Both values are manufacturer-declared at this level; actual on-site dim behavior also depends on the dimmer or controller. Both `min` and `max` are required when this block is present so that partial ranges do not silently validate. |
dimming_range_percent.min required | number 0 to 100 |
dimming_range_percent.max required | number 0 to 100 |
dimming_curve | DimmingCurve (enum) Optional dim-command-to-output mapping (logarithmic or linear). Independent of `dimming_method`; populate when the cutsheet or driver datasheet publishes it. |
adaptive_lighting_modes | array of AdaptiveLightingMode (enum) Built-in adaptive control capabilities the luminaire provides (integrated photocell, motion sensing, scheduled dimming, networked control). Multiple values may apply. Populate when the driver protocol is controllable and the cutsheet declares these behaviors. |
control_gear_type | ControlGearType (enum) |
led_module_power_w | ProvenancedNumber Optional LED-module-only input power (typically smaller than luminaire input due to driver losses). Useful when the cutsheet distinguishes module from luminaire. |
Photometry
Luminous flux, intensity, beam geometry, efficacy, UGR, and BUG summary.
| Field | Type and description |
|---|---|
total_luminous_flux_lm | ProvenancedNumber |
led_module_luminous_flux_lm | ProvenancedNumber Optional LED-module-only flux (upstream of luminaire optics). Paired with led_module_power_w when the cutsheet distinguishes module from luminaire. |
luminaire_efficacy_lm_per_w | ProvenancedNumber |
maximum_intensity_cd | ProvenancedNumber |
center_beam_intensity_cd | ProvenancedNumber |
beam_angle_deg | ProvenancedNumber |
field_angle_deg | ProvenancedNumber |
cutoff_angle_from_horizontal_deg | ProvenancedNumber The angle above horizontal beyond which no direct light escapes the fixture. An architectural glare-control specification typical of downlights and indirect architectural fixtures. Distinct from the deprecated IES cutoff classification (which is an outdoor four-class scheme). A value of 40 means no direct light is emitted above 40 degrees from horizontal. |
beam_family | BeamFamily (enum) |
optical_radiation_band | OpticalRadiationBand (enum) |
distribution_type | DistributionType (enum) |
symmetry_type | SymmetryType (enum) |
photometric_coordinate_system | PhotometricCoordinateSystem (enum) |
luminous_opening_shape | LuminousOpeningShape (enum) |
emission_face | EmissionFace (enum) |
spacing_criterion | ProvenancedNumber |
ugr_4h_8h | ProvenancedNumber Unified Glare Rating for the CIE 4H/8H reference room geometry. Published by manufacturers of interior architectural fixtures for European glare assessments. |
ugr_4h_8h_bound_operator | ComparisonOperator (enum) When present, indicates the UGR value is a declared bound rather than a specific measured value. Pairs with `ugr_4h_8h`. Use `lte` for manufacturer claims of the form 'UGR as low as X' where X is the best achievable value across the fixture's supported optics or dimming configurations. Absence means the UGR value is a specific point estimate at the tested scenario. |
zonal_lumens | array of object Luminous flux summed over zonal angle bands (for example 0-30, 0-40, 0-60, 0-90, 90-180 degrees). |
zonal_lumens[].zone_label required | string |
zonal_lumens[].lumens required | ProvenancedNumber |
per_length_normalized | object For linear products, per-unit-length photometric values that scale with fixture length. |
per_length_normalized.lumens_per_foot | ProvenancedNumber |
per_length_normalized.lumens_per_meter | ProvenancedNumber |
per_length_normalized.watts_per_foot | ProvenancedNumber |
per_length_normalized.watts_per_meter | ProvenancedNumber |
per_length_normalized.reference_length | DualUnitLength |
declared_by_cct | array of object Manufacturer-declared photometric values at CCTs other than the tested baseline, derived via a CCT multiplier table or similar rule. See applicability.covered_axes.CCT for the derivation context. |
declared_by_cct[].cct required | NominalCCT (enum) |
declared_by_cct[].lumens | ProvenancedNumber |
declared_by_cct[].efficacy_lm_per_w | ProvenancedNumber |
declared_by_length | array of object Manufacturer-declared photometric values at fixture lengths other than the tested baseline, derived via linear per-foot (or per-meter) scaling. See applicability.covered_axes.length for the derivation context. Used by Pattern D linear products (for example Vode Nexa linear pendants with published lm/ft and W/ft rates). Each entry declares a specific length via DualUnitLength and the length-scaled quantities at that length. Pairs with per_length_normalized, which carries the per-unit-length rates themselves. |
declared_by_length[].length required | DualUnitLength |
declared_by_length[].lumens | ProvenancedNumber |
declared_by_length[].input_power_w | ProvenancedNumber |
declared_by_length[].efficacy_lm_per_w | ProvenancedNumber |
Colorimetry
Color metrics including CCT, Duv, CRI, and TM-30 color rendition.
| Field | Type and description |
|---|---|
nominal_cct_k | NominalCCT (enum) |
measured_cct_k | ProvenancedNumber |
duv | ProvenancedNumber |
chromaticity_x | ProvenancedNumber |
chromaticity_y | ProvenancedNumber |
sdcm_step | ProvenancedNumber |
cri_ra | ProvenancedNumber |
cri_r9 | ProvenancedNumber |
cri_per_sample | array of object Optional per-sample CIE 13 CRI values (R1 through R15). |
cri_per_sample[].sample_index required | integer 1 to 15 |
cri_per_sample[].value required | ProvenancedNumber |
tm_30 | object |
tm_30.rf | ProvenancedNumber |
tm_30.rg | ProvenancedNumber |
tm_30.reference_illuminant_type | ReferenceIlluminantType (enum) TM-30 reference illuminant regime. Derivable by definition from the test-source CCT (the reference illuminant CCT equals the test-source CCT), so it is an explicitness/interop convenience rather than an independently authored value. |
tm_30.pvf_code | string pattern Preference/Vividness/Fidelity two-character code per TM-30-24: a letter (P / V / F) identifying the design-intent axis, followed by a level digit (1-3). Example values: `P2`, `V1`, `F3`. A single PVF code expresses the highest-priority design intent level achieved. |
tm_30.rf_h_per_bin | array of object Local chroma shift / hue shift / local fidelity per hue bin (16 bins). |
tm_30.rf_h_per_bin[].bin | integer 1 to 16 |
tm_30.rf_h_per_bin[].rf_h | ProvenancedNumber |
AlphaOpicMetrics
Per CIE S 026 and IES RP-46-23. Melanopic DER (MDER) is the most commonly published value on cutsheets.
| Field | Type and description |
|---|---|
reference_illuminant | object const "d65" Reference illuminant for alpha-opic DER calculations. Per CIE S 026, always D65. |
standard_observer | object const "cie_1931_2_degree" Colorimetric observer used. Per CIE S 026, always the CIE 1931 2-degree standard observer. |
melanopic_der | ProvenancedNumber Melanopic Daylight Efficacy Ratio (MDER / gamma_mel,v,D65). Multiplied by photopic illuminance to compute MEDI (Melanopic Equivalent Daylight Illuminance). |
per_channel | array of object Alpha-opic efficacy of luminous radiation per photoreceptor channel. |
per_channel[].channel required | AlphaOpicChannel (enum) |
per_channel[].efficacy required | ProvenancedNumber |
FlickerMeasurements
TLA metrics per LM-90-20, CIE TN 006, and IEEE 1789. Values may be measured scalars or manufacturer-rated upper bounds.
| Field | Type and description |
|---|---|
metrics | array of object |
metrics[].metric required | FlickerMetric (enum) |
metrics[].value | ProvenancedNumber |
metrics[].bound_operator | ComparisonOperator (enum) Used when the manufacturer declares an upper bound (`<=`) rather than a specific measured value. |
risk_level | FlickerRiskLevel (enum) |
test_chamber_type | FlickerTestChamberType (enum) |
dimming_type_at_test | FlickerDimmingType (enum) |
photodetector_correction | FlickerPhotodetectorSpectralCorrection (enum) |
sampling_class | FlickerSamplingClass (enum) |
waveform_file_format | FlickerWaveformFileFormat (enum) |
OutdoorClassification
TM-15 LCS and BUG classification for outdoor luminaires.
| Field | Type and description |
|---|---|
bug_rating | object |
bug_rating.b required | integer 0 to 5 |
bug_rating.u required | integer 0 to 5 |
bug_rating.g required | integer 0 to 5 |
outdoor_distribution_type | OutdoorDistributionType (enum) |
longitudinal_distribution_range | LongitudinalDistributionRange (enum) |
legacy_cutoff | LegacyCutoffClassification (enum) |
lcs_zonal_lumens | array of object Luminous flux per LCS zone per TM-15. |
lcs_zonal_lumens[].zone required | string |
lcs_zonal_lumens[].lumens required | ProvenancedNumber |
ExitSign
The exit-sign product data for records whose primary_category is exit_sign (categories a and c). Every field is optional; grading, not schema, drives completeness, so an identity-only sign record with an empty exit_sign block is schema-valid. illumination_mode is the conditional driver for the sign profile (see ExitSignIlluminationMode). Legend geometry uses DualUnitLength (SI authoritative); code minimums such as the NFPA 101 / IBC 6-inch letter height live in field descriptions, not schema constraints, because ULC records what a product is and leaves conformance to the authority having jurisdiction.
| Field | Type and description |
|---|---|
illumination_mode | ExitSignIlluminationMode (enum) How the legend is illuminated; the sign profile's conditional driver. |
illumination_technology | ExitSignIlluminationTechnology (enum) The self-emitting technology within the illumination mode (descriptive granularity, not gated). |
legend_text | string The legend text, for example "EXIT". Free text so non-English legends are representable. |
legend_color | LegendColor (enum) Legend color; NFPA 101 and local codes govern the required color. |
legend_height | DualUnitLength Letter height. Code context: NFPA 101 / IBC set a 6-inch (about 152 mm) minimum for illuminated signs; recorded here as product data, not as a conformance assertion. |
stroke_width | DualUnitLength Legend stroke width. Code context: NFPA 101 / IBC set a minimum stroke (for example 3/4 inch, about 19 mm) for externally illuminated signs. |
letter_width | DualUnitLength Legend letter width, an externally-illuminated-sign geometry detail (IBC 1013.6.1 context). |
letter_spacing | DualUnitLength Spacing between legend letters, an externally-illuminated-sign geometry detail (IBC 1013.6.1 context). |
face_count | ExitSignFaceCount (enum) How many faces carry a legend. |
directional_indicator | array of ExitSignDirectionalIndicator (enum) Directional chevrons on the sign face (NFPA 101). Declare ["none"] explicitly when the sign carries no chevron; "none" is mutually exclusive with any real direction. |
rated_viewing_distance_ft | RatedViewingDistance (enum) The UL 924-marked rated viewing distance in feet (string bin, NominalCCT convention). Independent of letter height, never derived from it. |
sign_face_luminance_cd_per_m2 | ProvenancedNumber Measured luminance of the illuminated legend face, in cd/m2. Primary photometric datum for photoluminescent and self-luminous signs (the study's roughly 0.06 fL floor); fL is not stored (SI authoritative). |
face_illuminance_lx | ProvenancedNumber Illuminance on the legend face for externally illuminated signs, in lux. Code context: the 5 fc figure is about 54 lx (IBC 1013.6.1 / NFPA 101). |
contrast_ratio | ProvenancedNumber Legend-to-background contrast ratio for externally illuminated signs (NFPA 101 context: at least 0.5). Unit "ratio". |
tritium_rated_life_years | number min 0 Rated life of a self-luminous tritium sign, in years (catalog tier such as 10, 15, or 20; NRC 10 CFR 31.5 governs the sealed source and its disposal path). A bare number. |
min_charging_illuminance_lx | ProvenancedNumber Minimum ambient illuminance required to charge a photoluminescent sign, in lux (UL 924 context). |
Emergency
The emergency-power data for products with an electrical emergency-power story (UL 924 context). emergency_role and power_source are required members: the block is meaningless without them. Authored by dedicated emergency luminaires, internally illuminated exit signs, combo exit/emergency units, and normal fixtures with a factory emergency-power option. An externally-illuminated combo sign authors the block (its heads are battery-powered) but its face has no powered-face story, so power_source is not a core field for it and its battery depth surfaces as optional enrichment rather than a standard gate. Not for UL 1994 photoluminescent egress-path-marking products, which are a different product class.
| Field | Type and description |
|---|---|
emergency_role required | EmergencyRole (enum) What emergency function this block describes (required). |
power_source required | EmergencyPowerSource (enum) How the product is energized during a utility power loss (required). |
battery_duration_min | ProvenancedNumber Rated emergency run time on integral battery, in minutes (the code-anchored figure is 90 minutes, a rated value). |
battery_chemistry | BatteryChemistry (enum) Integral battery chemistry. |
self_test | EmergencySelfTestCapability (enum) Self-test capability class (UL 924 defines the required test cadence). |
emergency_lumen_output_lm | ProvenancedNumber Distinct emergency-mode luminous output, in lumens, for products whose emergency mode differs from their normal mode (combo and emergency-power-option units). |
emergency_input_power_w | ProvenancedNumber Distinct emergency-mode input power draw, in watts. |
remote_head_capacity | object Capacity to drive remote emergency heads: how many heads and the total connected load. Optional and ungated (whether a unit supports remote heads is not derivable from other fields). |
remote_head_capacity.heads | integer min 0 Number of remote heads supported. |
remote_head_capacity.total_load_w | number min 0 Total connected remote-head load, in watts. |
photometry_reference | FileReference The emergency-mode photometric file (IES), referenced by hash. May also appear in source_files[]. |
OperatingPoint
Declared operating conditions at which measured values were taken.
| Field | Type and description |
|---|---|
input_voltage_v | ProvenancedNumber |
input_frequency_hz | ProvenancedNumber |
drive_current_ma | ProvenancedNumber |
ambient_temperature | DualUnitTemperature |
case_temperature_monitoring_point | TemperatureMonitoringPoint (enum) |
case_temperature | DualUnitTemperature |
dut_operating_mode | DutOperatingMode (enum) |
TestConditions
Context qualifying attested values.
| Field | Type and description |
|---|---|
stabilization_method | StabilizationMethod (enum) |
nonstandard_condition_flags | array of NonstandardConditionFlag (enum) |
photometry_method | PhotometryMethod (enum) |
photometry_basis | PhotometryBasis (enum) |
negative_intensity_handling | NegativeIntensityHandling (enum) |
file_generation_type | FileGenerationType (enum) |
Instrumentation
Laboratory equipment and accreditation.
| Field | Type and description |
|---|---|
goniometer_type | GoniometerType (enum) |
measurement_regime | MeasurementRegime (enum) |
laboratory_certification | LaboratoryCertification (enum) |
laboratory_accreditation_scheme | LaboratoryAccreditationScheme (enum) |
laboratory_name | string |
laboratory_report_id | string |
CorrectionsApplied
Corrections performed during measurement or data reduction.
| Field | Type and description |
|---|---|
self_absorption_corrected | boolean |
stray_light_corrected | boolean |
spectral_mismatch_corrected | boolean |
f1_prime_value | ProvenancedNumber |
notes | string |
Uncertainty
Reported expanded uncertainty values with coverage factor per GUM conventions.
| Field | Type and description |
|---|---|
coverage_factor_k | number |
expanded_uncertainty_total_flux_percent | ProvenancedNumber |
expanded_uncertainty_input_power_percent | ProvenancedNumber |
expanded_uncertainty_cct_k | ProvenancedNumber |
expanded_uncertainty_efficacy_percent | ProvenancedNumber |
ThermalDerating
Flux, efficacy, and color shift vs. case or ambient temperature per LM-82-20.
| Field | Type and description |
|---|---|
thermal_control_method | ThermalControlMethod (enum) |
curves | array of object |
curves[].temperature_axis | TemperatureAxis (enum) |
curves[].temperature_points_c | array of number Temperature sample points in degrees Celsius. Standards-native Celsius exception to the dual-unit rule: LM-82-20 and equivalent standards publish these arrays in Celsius only, and this field mirrors the source data verbatim. Consumers needing Fahrenheit convert at read time. |
curves[].flux_values_normalized | array of number |
curves[].efficacy_values_lm_per_w | array of number |
curves[].cct_shift_points_k | array of number |
LumenMaintenancePackageEntry
Per-package LM-80 data and TM-21 projection. A luminaire using multiple LED packages has one entry per distinct package.
| Field | Type and description |
|---|---|
package_identifier | string |
tested_product_type | TestedProductType (enum) |
flux_maintenance_quantity | FluxMaintenanceQuantity (enum) |
flux_maintenance_threshold | FluxMaintenanceThreshold (enum) |
tm_21_projection_hours | ProvenancedNumber |
projection_reliability | ProjectionReliability (enum) |
tm_21_interpolation_type | TM21InterpolationType (enum) |
test_hours | ProvenancedNumber |
test_temperature_c | ProvenancedNumber |
drive_current_ma | ProvenancedNumber |
LumenMaintenanceLuminaire
Framework-aware block. The framework field selects which sub-block applies. Multiple frameworks may coexist if the cutsheet publishes more than one.
| Field | Type and description |
|---|---|
declaration_framework | LumenMaintenanceDeclarationFramework (enum) |
tm_28 | object |
tm_28.projection_method | LumenMaintenanceProjectionMethod (enum) |
tm_28.projection_basis | ProjectionBasis (enum) |
tm_28.tm_28_projection_hours | ProvenancedNumber |
tm_28.projection_reliability | ProjectionReliability (enum) |
tm_28.test_hours | ProvenancedNumber |
cie_97_lmf_table | object Luminaire Maintenance Factor values the manufacturer declares for their fixture across the four standardized CIE 97 ambient cleanliness categories (pure / clean / normal / dirty) at the three standardized cleaning intervals (1 / 2 / 3 years). These are NOT site-specific installation inputs: they are reference categories defined by CIE 97 so manufacturers can publish comparable LMF data. This field therefore describes a declared capability of the fixture (rubric filter 2), not project or installation context. Specifiers pick the row that matches their installation conditions when computing project-specific maintenance factors downstream. |
cie_97_lmf_table.lmf_by_cleanliness_and_interval | array of object Array of LMF values keyed by the CIE 97 reference conditions. The manufacturer supplies one entry per (interval, cleanliness) combination they publish; typical cutsheets publish all 12. |
cie_97_lmf_table.lmf_by_cleanliness_and_interval[].cleaning_interval_years required | integer 1 to 3 |
cie_97_lmf_table.lmf_by_cleanliness_and_interval[].ambient_cleanliness required | AmbientCleanliness (enum) |
cie_97_lmf_table.lmf_by_cleanliness_and_interval[].lmf required | number 0 to 1 |
cie_97_lmf_table.llmf_by_hours | array of object Lamp Lumen Maintenance Factor by operating hours. |
cie_97_lmf_table.llmf_by_hours[].hours required | integer |
cie_97_lmf_table.llmf_by_hours[].llmf | number 0 to 1 |
cie_97_lmf_table.llmf_by_hours[].lsf | number 0 to 1 |
manufacturer_rated_claim | object Bare manufacturer claim like `L70 > 50,000h` or `L80 > 60,000h` with no cited method. Present when declaration_framework is `manufacturer_rated_claim`. |
manufacturer_rated_claim.claim_type | FluxMaintenanceThreshold (enum) Maintenance threshold being claimed (L70, L80, L90, L95). |
manufacturer_rated_claim.claimed_hours | ProvenancedNumber |
manufacturer_rated_claim.failure_percent | ProvenancedNumber Claimed cumulative failure rate at the claimed hours (for example `0.1%` failure at 50,000 hours). |
ChromaticityShiftProjection
Per TM-35.
| Field | Type and description |
|---|---|
shift_metric | ChromaticityShiftMetric (enum) |
shift_threshold | ChromaticityShiftThreshold (enum) |
shift_mode | ChromaticityShiftMode (enum) |
projected_hours | ProvenancedNumber |
tm_35_edition | TM35Edition (enum) |
SustainabilityDeclaration
Structured representation of a Declare label or similar sustainability attestation.
| Field | Type and description |
|---|---|
declaration_type | SustainabilityDeclarationType (enum) Which sustainability program the declaration belongs to. |
document_id | string |
original_issue_date | string format date |
expiration_date | string format date |
final_assembly_location | string |
life_expectancy_years | number min 0 |
end_of_life_options | array of string |
recyclable_percent | number 0 to 100 |
ingredient_list | array of object |
ingredient_list[].material_name required | string |
ingredient_list[].lbc_red_list_status | IngredientRedListStatus (enum) |
ingredient_list[].notes | string |
lbc_criteria_compliance | boolean |
voc_content | string |
interior_performance | string |
responsible_sourcing | string |
CompatibleAccessory
Mechanical accessory (junction box, plaster frame, mounting ring, canopy, conduit) compatible with this luminaire but ordered separately. Accessories that alter fixture photometry are modeled as separate ULC records and referenced via their own record_id instead of this block.
| Field | Type and description |
|---|---|
accessory_catalog_number required | string |
display_name | string |
description | string |
accessory_type | AccessoryType (enum) |
mass | DualUnitMass |
changes_photometry | boolean default false True when the accessory changes fixture photometry. Accessories with changes_photometry=true should also have their own ULC record linked via `accessorized_record_ref`. |
accessorized_record_ref | string |
is_compatible_with_this_sku | boolean default true Whether the accessory is compatible with the specific SKU configuration this record represents. Default true. Set to false when the cutsheet explicitly excludes the accessory from the record's SKU (for example when a junction box does not fit the shortest length variant of a linear fixture). Consumers filtering accessory compatibility should respect this flag before presenting the accessory as orderable alongside this SKU. |
incompatibility_reason | string Free-text explanation of why is_compatible_with_this_sku is false. Required when is_compatible_with_this_sku is false; should be omitted otherwise. |
SourceFile
One source file that contributes data to this ULC record.
| Field | Type and description |
|---|---|
file_type required | SourceFileType (enum) |
reference required | FileReference |
photometry_format | PhotometryFormat (enum) |
Attestation
An attestation claim against this ULC record. An attestation may be absolute (applies always), option-conditional (applies when specific order-code options are selected), or case-by-case (requires per-project manufacturer verification). The measured_quantities array lists ULC field paths the attestation covers so consumers can verify coverage.
| Field | Type and description |
|---|---|
attestation_id | string Stable identifier for this attestation within the record (for example `lm79_selux_aya_sr_ho`). Used as the target of `provenance.attestation_ref` from individual values. |
program required | AttestationProgram (enum) |
status | AttestationStatus (enum) |
value_type required | RegulatoryValueType (enum) |
issued_date | string format date |
valid_until | string format date |
listing_number | string |
test_laboratory | string |
test_report_id | string |
standard_revision | string |
list_date | string format date Publication date of the substance/candidate list revision a list-versioned badge was assessed against (for example a REACH SVHC candidate list update, a California Prop 65 list revision, or a conflict-minerals 3TG reporting period). Optional; pairs with `list_version` to make a list claim precise without exposing the list text. |
list_version | string Version or revision label of the substance/candidate list a list-versioned badge was assessed against (for example the REACH SVHC candidate list revision identifier). Optional. |
measured_quantities | array of string JSON paths of ULC fields this attestation covers. Each covered field's `provenance.attestation_ref` is expected to reference this attestation's `attestation_id`. |
applicability | object Order-code conditions under which this attestation applies (for option-conditional attestations like Chicago Plenum requiring the CPP option). |
applicability.required_order_code_options | array of string |
applicability.required_constraints | object |
verification | object For case-by-case attestations (BAA, BABA, and similar), declares that manufacturer confirmation is required before a consumer can propagate the claim downstream. |
verification.type required | AttestationVerificationType (enum) |
verification.contact_reference | string |
verification.notes | string |
source_document_ref | FileReference |
issuing_authority | string Named operator of the program, for programs run by more than one operator (for example the several EPD program operators). Optional descriptive data; it never affects the computed achievement state. |
sustainability_metric | object Optional quantitative payload for a sustainability attestation, hanging off the attestation so the numbers inherit its status, evidence, and expiry. `ceam_score` is the TM66 CEAM design score (0 to 4). `embodied_carbon_kgco2e` is a declared embodied-carbon figure; when it is present, `embodied_carbon_scope` and `embodied_carbon_functional_unit` are required so the number is never ambiguous about its life-cycle boundary or its declared unit. `c2c_overall_level` carries a Cradle to Cradle overall rating. `method_variant` records a regional or method sub-variant (for example a TM65 national annex such as TM65NA). |
sustainability_metric.ceam_score | number 0 to 4 |
sustainability_metric.embodied_carbon_kgco2e | number Declared embodied-carbon figure in kilograms of CO2 equivalent (kg CO2e). Standards-native single-unit exception to the dual-unit rule: EPD / ISO 14025, TM65, and TM66 publish embodied carbon in kg CO2e only, with no Imperial companion used in life-cycle-assessment practice, so ULC records it SI-native (the same treatment as the cd/m2 luminance and LM-82 Celsius exceptions). The required embodied_carbon_scope and embodied_carbon_functional_unit fix the life-cycle boundary and the declared unit basis, so the single number is unambiguous. |
sustainability_metric.embodied_carbon_scope | EmbodiedCarbonScope (enum) |
sustainability_metric.embodied_carbon_functional_unit | string |
sustainability_metric.c2c_overall_level | CircularityTier (enum) |
sustainability_metric.method_variant | string |
Extensions
Escape hatch for values outside the core schema. Treated as informational by validators.
| Field | Type and description |
|---|---|
manufacturer_specific | object Vendor-specific fields keyed by manufacturer slug. |
experimental | object Fields under active review for promotion into the main schema. |
AchievementTheme
One theme's computed state inside `index.achievements.themes`. GENERATED, NOT HAND-AUTHORED. `state` is the theme's achievement state. `programs` lists the qualifying AttestationProgram tokens found in the ledger for this theme, deduplicated and sorted. `source_attestation_ids` lists the `attestation_id` values of contributing attestations (best-effort, since `attestation_id` is optional on an attestation). `evidence_present` is true when at least one contributing attestation carries an attached, non-disqualified evidence document. `best_metric_ref` names the `attestation_id` whose `sustainability_metric` best represents the theme; it is omitted when no qualifying metric exists.
| Field | Type and description |
|---|---|
state required | AchievementState (enum) |
programs required | array of AttestationProgram (enum) |
source_attestation_ids required | array of string |
evidence_present required | boolean |
best_metric_ref | string |
Index
Generated summary view. Every field projects from an authoritative deep-block value. The builder (`ulc build-index`, under `tools/validator/`) is the single source of these projections; manufacturers never hand-author them. Selection policies the builder applies: (1) `nominal_cct_k` = `configuration.tested_conditions.nominal_cct_at_test`; (2) `nominal_total_lumens` = `photometry.total_luminous_flux_lm.value` at the tested baseline, not `declared_by_cct` derivatives; (3) `nominal_input_power_w` = `electrical.input_power_w.value`; (4) `primary_category` = `product_family.primary_category`; (5) `source_file_types_present` = deduplicated sorted list of `source_files[].file_type` values; (6) other fields follow analogous rules documented in the builder's source. Consumers reading `x-ulc-generated: true` can treat the index as trustworthy; absence or a stale `builder_version` is the signal to re-run the builder.
| Field | Type and description |
|---|---|
x-ulc-generated required | object const true Marker asserting this index was produced by the canonical builder. Always true in valid records; absence is the signal that the index was hand-edited or predates a builder revision. |
builder_version required | string pattern Semver of the builder that produced this index. Consumers compare against the current builder version to detect stale indices. |
conformance_level required | ConformanceLevel (enum) The conformance grade this record achieves: one of the three grades (core, standard, full) or the incomplete floor. GENERATED, NOT HAND-AUTHORED: the reference builder computes it from the record's populated fields (applying the conditional rubric: directional categories require a beam angle, pure RGB/RGBA fixtures with no white channel skip CRI, outdoor-site products require BUG at standard, and so on) and stamps it here like every other index value. `incomplete` is the floor, below core: a record that has not yet met a core requirement. Because it is a builder projection, a hand-tampered value fails the build-parity check just like any other index field, so the grade a record claims is the grade its data actually achieves. |
manufacturer_slug required | string |
catalog_model required | string |
catalog_number | string |
display_name | string |
primary_category | PrimaryCategory (enum) |
secondary_function | array of SecondaryFunction (enum) |
indoor_outdoor | IndoorOutdoor (enum) |
mounting_types | array of MountingType (enum) |
environment_rating | EnvironmentRating (enum) |
nominal_cct_k | NominalCCT (enum) |
nominal_total_lumens | number min 0 |
nominal_input_power_w | number min 0 |
nominal_cri_ra | number 0 to 100 |
nominal_efficacy_lm_per_w | number min 0 |
primary_distribution | DistributionType (enum) |
outdoor_distribution | OutdoorDistributionType (enum) |
beam_family | BeamFamily (enum) |
color_tunability | ColorTunabilityCapability (enum) |
dimming_protocols | array of DimmingProtocol (enum) |
ip_rating | string pattern |
ik_rating | string pattern |
bug_rating | string pattern Short string form of BUG (for example `B1-U0-G1`). Computed from `outdoor_classification.bug_rating` when present. |
ugr_4h_8h | number |
attestation_programs | array of AttestationProgram (enum) Flat array of every AttestationProgram value claimed anywhere in the record (shared_attestations, attestations[], and sustainability_declaration declaration types that correspond to an external certified program). Deduplicated. Lets consumers filter by certification without walking all attestation records. Manufacturer-self-operated sustainability declaration types that are not certified external programs (for example `manufacturer_recycle_program`) intentionally do not contribute an entry here; they appear only in the `sustainability_declaration.declaration_type` field and are filterable from there when needed. |
search_keywords | array of string Optional free-text tokens the manufacturer wants indexed. Populated by the builder from `product_family.family_display_name`, `product_family.catalog_line`, and `configuration.scenario_label`, then deduplicated and sorted for deterministic output. Future builder versions may ingest additional manufacturer-tagged fields; the exact set is a builder-version policy, not a schema-level contract. |
source_file_types_present | array of SourceFileType (enum) Deduplicated sorted list of `source_files[].file_type` values. Lets AI agents and retrieval systems quickly determine which source formats (PDF, IES, LDT, TM-33, ULD, GLDF) exist for this record without walking the full `source_files` array. |
achievements required | object Product Achievements view: per-theme third-party program qualifications computed from the record's Master Ledger, orthogonal to `conformance_level`. GENERATED, NOT HAND-AUTHORED. `themes` always carries the six fixed theme keys, each an AchievementTheme; the container is open (no `additionalProperties` bar) so future themes add without breaking consumers. `documented_count` is the factual count of themes at the `documented` state; it is the only sanctioned rollup, and there is deliberately no weighted or overall achievement grade. |
achievements.themes required | object The six fixed achievement themes, always all present. |
achievements.themes.embodied_carbon required | AchievementTheme |
achievements.themes.circularity required | AchievementTheme |
achievements.themes.material_health required | AchievementTheme |
achievements.themes.energy required | AchievementTheme |
achievements.themes.dark_sky required | AchievementTheme |
achievements.themes.emergency required | AchievementTheme |
achievements.documented_count required | integer min 0 |
restricted_substances_declared required | array of AttestationProgram (enum) Restricted-substances programs declared anywhere in the record's Master Ledger (RoHS, REACH, Prop 65, and similar). GENERATED, NOT HAND-AUTHORED. Deduplicated and sorted. Surfaced as a compliance flag beside achievements, never inside them: restricted-substances compliance is a legal floor, not a prestige achievement. An empty array means nothing was declared. |
Common types
ProvenancedNumber
A single numeric value with its unit, regulatory value type, and provenance. Used for single-unit quantities (lumens, watts, CRI, Duv, candela, efficacy).
| Field | Type and description |
|---|---|
value required | number |
unit | string |
value_type required | RegulatoryValueType (enum) |
provenance | Provenance |
DualUnitLength
Length value with mandatory SI (mm) and Imperial (in) representations. SI is authoritative per the ULC spec; the Imperial representation is the required derived companion.
| Field | Type and description |
|---|---|
mm required | number min 0 |
in required | number min 0 |
value_type | RegulatoryValueType (enum) |
provenance | Provenance |
DualUnitMass
Mass value with mandatory SI (kg) and Imperial (lb) representations.
| Field | Type and description |
|---|---|
kg required | number min 0 |
lb required | number min 0 |
value_type | RegulatoryValueType (enum) |
provenance | Provenance |
DualUnitTemperature
Temperature value with mandatory Celsius and Fahrenheit representations.
| Field | Type and description |
|---|---|
c required | number |
f required | number |
value_type | RegulatoryValueType (enum) |
provenance | Provenance |
DualUnitArea
Area value with mandatory SI (square meters) and Imperial (square feet) representations. Used for Effective Projected Area (EPA) on pole-mounted outdoor fixtures. SI is authoritative; Imperial is the required derived companion.
| Field | Type and description |
|---|---|
m2 required | number min 0 |
ft2 required | number min 0 |
value_type | RegulatoryValueType (enum) |
provenance | Provenance |
DualUnitMassPerLength
Linear mass rate (mass per unit length) with mandatory SI (kg per meter) and Imperial (lb per foot) representations. Used for linear fixtures where total mass scales with fixture length. Distinct from DualUnitMass, which represents an absolute mass. SI is authoritative; Imperial is the required derived companion.
| Field | Type and description |
|---|---|
kg_per_m required | number min 0 |
lb_per_ft required | number min 0 |
value_type | RegulatoryValueType (enum) |
provenance | Provenance |
Provenance
Traceability metadata attached to an individual field value. Every extracted, derived, or computed value should carry provenance so consumers can verify how each number was produced.
| Field | Type and description |
|---|---|
source required | ProvenanceSource (enum) Origin of the value. |
method required | ProvenanceMethod (enum) How the value was produced from its source. |
confidence | number 0 to 1 Optional confidence score in the range [0, 1] when the value was inferred or extracted with uncertainty. |
conflict_notes | string Optional note recording a disagreement between two sources for the same value. |
attestation_ref | string Reference to an attestation record's test ID when the value is anchored to a specific lab attestation. Expected on fields with value_type `measured`, so a measured quantity can be traced to its lab attestation. |
base_attestation_ref | string Reference to the base measured attestation from which this value was derived by simulation, extended photometry, or scaling. |
simulation_tool | string Name and version of the optical simulation tool, when method is `optical_simulation`. |
extension_method | string The specific extension rule applied, when method is `extended_photometry` or `scaled`. |
FileReference
Reference to a source file by filename, optional URL, and mandatory SHA-256 content hash. The hash is the integrity anchor; URLs may rot.
| Field | Type and description |
|---|---|
filename required | string |
url | string format uri |
sha256 required | string pattern |
revision_label | string |
revision_date | string format date |
No field matches that filter.