96 const char* field_name,
97 const char* leksikon_guid,
98 const char* json_name,
100 size_t field_offset)
noexcept {
125template <
typename T,
typename NestedT>
127 const char* field_name,
128 const char* json_name,
129 size_t field_offset)
noexcept {
179 "contact_email",
"0Bwj05D$55V931bq9VaBE5",
180 "materialpassport owner contact email",
183 "contact_name",
"17BdeQk152gR5YUt5oSLfp",
184 "materialpassport owner contact name",
187 "company_name",
"1bb51PIefCe9uHGCmR0gFJ",
188 "materialpassport owner company name",
213 "designation",
"2_mYRkA$9EcwXAxqBGoMrM",
214 "construction item designation",
217 "images",
"1dvQfmc2z9lB_rwknYkM3y",
218 "construction item image",
221 "has_qr_code",
"06moAxe0j7EutROb0dD3B7",
225 "has_rfid_tag",
"2$Owq1iHrAuw$ASWOXAk9p",
229 "materials",
"1R_z75Gd52OQYxVkJ$E3ZU",
233 "assembly_methods",
"0N7Qwopp125xrULezqArw4",
237 "year_of_installation",
"294ZkUyYn6TfdwCsbo2X63",
238 "year of installation",
241 "year_of_construction",
"17LFECVML6buNXwBLz416Y",
242 "year of construction of the building",
255 return "ConstructionItemDescription";
267 "manufacturer",
"1QwFy1F3T4dPe2N2cbsuRv",
271 "gtin",
"1rQ9Z5vy5AygUSncyWuhXr",
272 "global trade item number (GTIN)",
275 "product_name",
"198tMTFIX5PecEfAwMEIeo",
279 "model_label",
"06t2gkj49FNvMebmltrHXV",
283 "production_year",
"3nif2XJKH8r9I09LfEYaRm",
297 return "ProductInformation";
309 "has_epd",
"2_jn1$mEr1780H5QOiEj6O",
310 "environmental product declaration (EPD)",
313 "epd_programme_operator",
"0ORiYBKRnCFQzUwOsNqbYn",
314 "EPD programme operator",
317 "epd_operator_web_domain",
"2kqTixLBr9sBqGKYs9lNSI",
318 "EPD programme operator web domain",
321 "epd_registration_number",
"2aCraAVB91qw8CzrM6x3ia",
322 "EPD registration number",
325 "reference_service_life",
"28mSsPe_z69BksBt5oRXMl",
326 "reference service life",
329 "has_safety_data_sheet",
"3D1KFVwbDBuumnIBZZHQId",
330 "has safety data sheet",
333 "declaration_of_performance",
"1tqCmrJwn3yvF$k2lU2fFa",
334 "declaration of performance",
337 "technical_documentation",
"1IfrbnqGv5Pu3GBuocLZgi",
338 "technical documentation",
341 "non_destructive_tests",
"0aTBceworF$QTXM6CqyOdV",
342 "non-destructive tests",
345 "assessed_period_of_use",
"3xW23JRMTAzOQb79uZW3qC",
346 "assessed period of use",
349 "avg_service_life_build",
"2TtVRWo_56mBphAcSiFIHG",
350 "average service life (BUILD)",
353 "remaining_service_life_rsl",
"2id4UZ8ynAF9DEzV0NC_wT",
354 "service life (RSL)",
357 "remaining_service_life_build",
"27gXAA5Iz7lgcOytMRqOBv",
358 "remaining service life (BUILD)",
371 return "Certifications";
383 "width_mm",
"3NHBUedX9438Hi3mwD15$Z",
387 "height_mm",
"2G$wMhUvL2LgKNY0J66oAT",
391 "length_mm",
"1uUn3YWZfBaPqYQMo_$Om$",
395 "thickness_mm",
"0SyXPZ9an9vh49k$Lgkvly",
399 "depth_mm",
"1$OV5du3LFWwa$P7SfJhAr",
403 "volume_m3",
"3IHRMkfs9EDPXVvPJ0hbFn",
407 "surface_area_m2",
"3Cs4d96Ff1nPGHWlsTyYIS",
408 "surface area of product",
411 "inner_diameter_mm",
"0ayREcz2zBuPWmCDTem2a8",
415 "outer_diameter_mm",
"3BWwvo0lf3iAd_34y7ac$4",
419 "weight_kg",
"1XyLvnxf94pwJW6LWaD6Zw",
423 "technical_drawing",
"2d01jZqvP7GOR3V$coAprV",
449 "photo_documentation",
"3$DH1Zm_r9_gzqdwKK39Ua",
450 "photo documentation",
453 "visual_inspection_performed",
"2jB20LC_nEzBN4_j2ypip8",
454 "visual inspection performed",
457 "has_signs_of_damage",
"0rQimGJFHEueqtqwbwBaC5",
458 "has signs of damage",
461 "is_deformed",
"1g6mt3SrvDlho6YqBIu1lW",
465 "is_scratched",
"365luGupDCfwgtD32gGGrS",
469 "is_surface_intact",
"2GO932BuX5EvXOecmhbbl3",
473 "has_intact_edges",
"0AoBmqQ9v1pw7ca1VVp_Za",
477 "has_signs_of_degradation",
"01lVHQF$XAneE8CFtajgr_",
478 "has signs of degradation",
504 "content_method",
"2ympiI4PL6c8ooh9Agqnz4",
505 "content of dangerous substances",
508 "analyzed_substance",
"3Y2oTiV9r3NfoZQBVP_Bpx",
509 "analyzed for chemical substances",
512 "cas_number",
"2tZYDby2H2PADWYcTMn50O",
516 "ec_number",
"1cV5alHQ93Zu44Uv4Iuqoj",
520 "concentration_mg_per_kg",
"0yw_0Ggsf6ihdShOA1niRl",
521 "concentration of substance",
534 return "DangerousSubstance";
543 "standard",
"1Kx6G$uIXEZO3Br$MEsdaB",
547 "type",
"12ZQ3obYHB1OhXiyy3LcfK",
551 "lower_interval",
"1dSnTNTGD5YQPcgcbzMJaD",
552 "emission lower Interval",
555 "upper_interval",
"3YTotdivHEeQS4ij2Xa7PU",
556 "emission upper Interval",
559 "quantity_type",
"33HQrsPDn9uhOu$7D3HhWU",
560 "emission quantity type",
563 "measuring_unit",
"3d1HQUJVb23ReixUzvSyvS",
567 "quantity",
"0lZ6gflK18WBte7dMyQQ$h",
590 "contains_reach_substances",
"2E6_MQ4Cn36f0s6CVYxQOR",
591 "contains substances on REACH's candidate list",
594 "is_chemically_treated",
"1Cf0jFllr2HAk8FOmT2VGr",
595 "is construction item chemically treated",
598 "surface_treatments",
"1zV5ZyYKT6CPWjKdTEZ1K0",
602 "dangerous_substances",
"dangerous substances",
603 offsetof(
Pollution, dangerous_substances)),
605 "emissions",
"release of dangerous substances",
608 "intended_for_indoor_use",
"2W1zl8TFb459xOVytRmX3J",
609 "intended for indoor use",
612 "labelling_scheme",
"3Txv$QA7zCp8azbWeuubx2",
616 "emission_level",
"3areU4Rpv9gfbeDNE9eBgA",
620 "has_asbestos_analysis",
"2962p$Lwj68Br6satSNLAn",
621 "has asbestos analysis",
646 "takeback_scheme_available",
"2__I$nkL94YRI_YCBy0ou8",
647 "take-back scheme available",
650 "consists_of_separate_parts",
"2nZqcaXkz7YPHhKI$FMowg",
651 "construction item consists of separate parts naturally ",
664 return "EnvironmentalPotential";
676 "reaction_to_fire",
"2bipZ4JrzDnwNZZHkwfk8O",
680 "resistance_to_fire",
"0NlhENUQr4YA5$p0zBrXSp",
681 "resistance to fire",
684 "documentation_of_fire_classification",
"1DdkDjj1H7POQtnzDtu7CC",
685 "documentation of fire classification",
688 "field_of_application",
"37sNiQNwHC399AW2B60MrY",
689 "field of application in relation to fire",
702 return "FireProperties";
714 "previous_usage_environments",
"3BiwSSLEz9l8YLgoWcixHq",
715 "previous usage environment",
constexpr PropertyDescriptor make_nested_property(const char *field_name, const char *json_name, size_t field_offset) noexcept
Create a nested object array property descriptor.
constexpr PropertyDescriptor make_property(const char *field_name, const char *leksikon_guid, const char *json_name, PropertyType type, size_t field_offset) noexcept
Create a simple property descriptor (non-nested).
PropertyType
Property type enumeration for MaterialPassport serialization.
@ Boolean
std::optional<bool>
@ EnumValue
Enum values (Material, etc.).
@ EnumArray
std::vector<EnumType>
@ StringArray
std::vector<std::string>
@ Integer
std::optional<int>
@ TriState
TriState enum (yes/no/unknown).
@ Double
std::optional<double>
@ ObjectArray
std::vector<StructType> (nested objects)
Certifications, approvals and declarations for the item.
Condition assessment of the construction item.
Description of the reused construction item.
Dangerous substance analysis record.
Physical dimensions and geometry of the construction item.
Emission measurement record.
Environmental and resource potential for sustainable utilization.
Fire-related properties of the construction item.
Historical usage information for the construction item.
Owner contact information for the material passport.
Pollution, content and emission information.
Property metadata descriptor.
size_t nested_count
For nested types: number of properties in nested array.
const PropertyDescriptor * nested_properties
For nested types (ObjectArray): pointer to nested property array.
const char * field_name
C++ field name (e.g., "contact_email").
size_t offset
Offset of field in struct (calculated via offsetof macro).
const char * leksikon_guid
Molio leksiCon GUID (e.g., "0Bwj05D$55V931bq9VaBE5").
const char * json_name
JSON export name matching the Danish standard template (e.g., "materialpassport owner contact email")...
PropertyType type
Property type enum.
static constexpr std::array properties_array
static constexpr size_t property_count() noexcept
static constexpr const char * struct_name() noexcept
static constexpr const PropertyDescriptor * properties() noexcept
static constexpr size_t property_count() noexcept
static constexpr std::array properties_array
static constexpr const char * struct_name() noexcept
static constexpr const PropertyDescriptor * properties() noexcept
static constexpr std::array properties_array
static constexpr const PropertyDescriptor * properties() noexcept
static constexpr const char * struct_name() noexcept
static constexpr size_t property_count() noexcept
static constexpr const PropertyDescriptor * properties() noexcept
static constexpr const char * struct_name() noexcept
static constexpr std::array properties_array
static constexpr size_t property_count() noexcept
static constexpr std::array properties_array
static constexpr const PropertyDescriptor * properties() noexcept
static constexpr const char * struct_name() noexcept
static constexpr size_t property_count() noexcept
static constexpr size_t property_count() noexcept
static constexpr const char * struct_name() noexcept
static constexpr std::array properties_array
static constexpr const PropertyDescriptor * properties() noexcept
static constexpr const char * struct_name() noexcept
static constexpr const PropertyDescriptor * properties() noexcept
static constexpr size_t property_count() noexcept
static constexpr std::array properties_array
static constexpr size_t property_count() noexcept
static constexpr const PropertyDescriptor * properties() noexcept
static constexpr std::array properties_array
static constexpr const char * struct_name() noexcept
static constexpr const PropertyDescriptor * properties() noexcept
static constexpr size_t property_count() noexcept
static constexpr std::array properties_array
static constexpr const char * struct_name() noexcept
static constexpr std::array properties_array
static constexpr const char * struct_name() noexcept
static constexpr size_t property_count() noexcept
static constexpr const PropertyDescriptor * properties() noexcept
static constexpr const char * struct_name() noexcept
static constexpr const PropertyDescriptor * properties() noexcept
static constexpr std::array properties_array
static constexpr size_t property_count() noexcept
Trait interface for property metadata.
static constexpr const char * struct_name() noexcept
Get human-readable struct name.
static constexpr const PropertyDescriptor * properties() noexcept
Get array of property descriptors.
static constexpr size_t property_count() noexcept
Get number of properties in the struct.