Compliance Validation
(Supports AD, RCD, FMD, Weighted Structures, and Mixed-Mode Declarations)
This document describes the data model and JSON payloads used by the Compliance
Engine to evaluate regulatory compliance across global regulations such as RoHS,REACH, POPs, TSCA, PROP65, and others.
The API accepts four declaration types:
- AD – IPC-1752 ClassA - Abstract Declarations (status-only / general conformity)
- RCD – IPC-1752 ClassC - Regulatory Compliance Declaration (regulation-specific declaration with Substance Categories)
- FMD – IPC-1752 ClassD - Full Material Declaration (material composition / CAS- based)
- Mixed RCD + FMD – any combination of the above across the product hierarchy
The API returns a unified compliance evaluation for all applicable regulations based on all declarations provided.
Core Concepts
Product Structure
All payloads—AD, RCD, FMD, or mixed—share the same structure:
{
"sbStructureObject": [...],
"partValidation": [...]
}
sbStructureObject — Product Hierarchy
sbStructureObject describes the full Bill of Materials (BOM):
- Top-level product
- Sub-components
- Materials (FMD nodes)
Each structure object node may include:
Example (from FMD_input.json): FMD_input “sbStructureObject”:
[{
"internalId": "65f42a1172f401408c564c54",
"structureObject": [
{ "internalId": "645a295c8937516841fb8ec5" },
{ "internalId": "645a71733a7b84089745d74b" }
]
}]
Example with weight + quantity (your addition) “sbStructureObject”:
[{
"internalId": "65f42a1172f401408c564c52",
"weight": "262",
"unit": "g",
"quantity": 1,
"structureObject": [{
"internalId": "65f42a1172f401408c564c53",
"weight": "44",
"unit": "g",
"quantity": 1,
"structureObject": [{
"internalId": "645a295c8937516841fb8ec5",
"weight": "0.5",
"unit": "g",
"quantity": 1
}, {
"internalId": "645a718a3a7b84089745d7f6",
"weight": "23",
"unit": "g",
"quantity": 1
}]
}]
}]
Part Validation
Every node in the structure must have a corresponding partValidation entry.
Example: RCD_input
{
"id": "65f42a1272f401408c564c68",
"part": { ... },
"declarations": [...]
}
Each part may contain:
- AD declarations
- RCD declarations
- FMD declarations
- Or none
Output adds:
- Compliance results
- Derived regulatory mappings in FMD
The Three Input Models
FMD-derived regulatory data appears only in output, never input.
AD – Abstract Declarations
AD is a minimal declaration type used to communicate general conformity without supplying:
- Substance categories
- CAS-based composition
- Regulatory detail
AD declarations influence:
- Overall compliance status
- Documentation completeness reports
They do not provide data for substance-level evaluation.
RCD – Regulatory Compliance Declaration
Used when suppliers explicitly declare compliance for specific regulations.
RCD Input Format
An RCD declaration always contains:
- identity – Regulation identity (e.g., “EUROHS-1907”)
- regulationId – Internal reference
- declarationClass: “C”
- SubstanceCategoryList (required)
Example: RCD_input
{
"identity": "EUROHS-1907",
"authority": "IPC",
"declarationClass": "C",
"containsDeclaration": "DEC",
"SubstanceCategoryList": {
"SubstanceCategory": [{
"name": "Lead/lead compounds",
"cas": "7439-92-1",
"Concentration": [{ "value": 2 }]
}]
}
}
Key RCD Input Rules:
- Only RCD uses SubstanceCategoryList
- Categories map to regulatory list entries
- Concentrations are regulatory-specific, not compositional
RCD Input Format
Output adds:
- complianceValidationResult
- Per-substance-category results
Example: RCD_output “complianceValidationResult”:
{
"resultCode": "F30",
"regulationName": "RoHS EU 2011/65/EU",
"messages": [{
"source": "Lead/lead compounds",
"resultCode": "F30"
}]
}
FMD – Full Material Declaration
FMD declarations describe actual chemical composition.
FMD Input Format
Uses:
- declarationClass: “D”
- fmdSubstance[]: CAS + % concentration
Example: FMD_input “fmdSubstance”:
[
{ "name": "Iron", "casNumber": "7439-89-6", "concentration": "98" },
{ "name": "Manganese", "casNumber": "7439-96-5", "concentration": "1" }
]
FMD rules:
- No regulatory categories appear in input
- Composition is rolled up via weight × quantity
- Engine maps CAS → regulatory substance categories
FMD Output Format
Engine adds:
- Derived regulation declarations
- containsDeclaration: “FMD”
- complianceValidationResult
- Derived SubstanceCategoryList
Example: FMD_output
{
"identity": "EUROHS-1907",
"containsDeclaration": "FMD",
"complianceValidationResult": { "resultCode": "P01" }
}
Mixed RCD + FMD Structures
The engine supports any mixture of AD, RCD, and FMD declarations across the structure.
Example Mixed Structure
Top-Level Part (no declaration OR RCD)
│
├── Sub-component A (RCD declaration)
│
└── Sub-component B (FMD declaration)
│
└── Material C (FMD — contains substances)
This pattern appears frequently in supplied data.
Real examples come from:
- RCD nodes in RCD_input.json
- FMD nodes in FMD_input.json
- Mixed roll-up in FMD_output.json
Mixed-Mode Processing Rules
Rule 1 — RCD overrides FMD (for the same regulation at the same node)
If an RCD declaration exists for RoHS → The engine ignores FMD-derived RoHS data at that node.
Rule 2 — FMD fills coverage gaps
<p”>If no RCD exists for a regulation → The engine derives it from CAS composition.
Rule 3 — Top-level always receives full compliance results
Even with no declarations, the engine outputs:
- RoHS
- REACH
- REACH Authorization
- POPs
- TSCA
- PROP65
- etc.
(Shown in FMD_output.json)
Rule 4 — Weight & quantity control compliance roll-up
For each node: effectiveMass = weight × quantity
Used in:
- FMD % composition roll-up
- Substance concentration calculation
- Threshold checks requiring mass (e.g., ppm, % w/w)
Material Rollup Logic
Material C → Sub-component B → Top-Level Part
- Concentrations accumulate
- Regulatory categories selected based on CAS
- Failures propagate upward
Example (derived from FMD): FMD_output
{
"name": "Reaction mass of DOTE and MOTE",
"Concentration": [{ "value": 42.857 }],
"result": { "resultCode": "F30" }
}
Output: Compliance Evaluation Model
All outputs include: “complianceValidationResult”:
{
"resultCode": "P01",
"regulationName": "Battery Directive (2006/66/EC)",
"messages": [],
"resultStatistics": { ... },
"partList": { ... }
}
Common result codes:
- P01 → Pass
- ND10 → No declaration, no issues detected
- F30 → Fail (threshold exceedance)
Examples from:
- RCD_output.json
- FMD_output.json








