EN 1090-2 Execution ClassPro + Studio

FrameAI automatically assigns an execution class (EXC1–EXC4) to every fabrication job using the EN 1090-2:2018 §4.1.2 + Annex B decision matrix. The result appears on the PDF cover sheet, in the Fabrication Requirements tab, and as a SI block in every DSTV NC1 file.

No competitor wires this automatically. Traditionally the detailer looks up Table B.3 by hand and writes the class on the cover sheet. FrameAI derives it from the structural data you already uploaded.

How it works

On every pipeline run FrameAI inspects the computed job data and derives three inputs:

These three inputs feed into the EN 1090-2:2018 Table B.3 lookup. The result, plus a rationale list referencing specific clauses, is stored as exc_data on the job row.

Entitlement

EXC auto-assignment is included in Pro and Studio. Free-tier users see the EXC value on the demo job only. Upgrade at /pricing.

Decision Matrix — EN 1090-2:2018 Table B.3

SC × PCCC1CC2CC3
SC1 × PC1 EXC1 EXC2 EXC3
SC1 × PC2 EXC2 EXC2 EXC3
SC2 × PC1 EXC2 EXC3 EXC4
SC2 × PC2 EXC2 EXC3 EXC4

CC1 = low consequence (storage, agricultural). CC2 = medium (offices, commercial buildings). CC3 = high (grandstands, public buildings with large crowds). Default is CC2.

Auto-Derivation Rules

Service Category (SC)

Production Category (PC)

All derivation decisions are included in the rationale array in the API response, with EN 1090-2 clause references.

NDT Scope — EN 1090-2:2018 Table 24

ClassVTMT/PTUT/RTQuality Level
EXC1100%0%0%D (EN ISO 5817)
EXC2100%10%0%C (EN ISO 5817)
EXC3100%20%20%B (EN ISO 5817)
EXC4100%50%50%B+ (EN ISO 5817)

Tolerance Class

EXC1 + EXC2: Class 1 — essential tolerances only (EN 1090-2 Table D.1.1).

EXC3 + EXC4: Class 2 — functional tolerances including additional requirements on straightness, camber, and end-plate flatness (EN 1090-2 Table D.1.2).

Welder Qualification + WPS/WPQR

POST /api/exc/assign

POST/api/exc/assign

Assign EXC class from a job (auto-derives SC/PC) or from explicit inputs. Stores the result in exc_data on the job row.

Request body

{
  "job_id": 42,          // optional — if provided, auto-derives SC/PC
  "cc": "CC2",           // optional override (CC1 / CC2 / CC3)
  "sc": "SC1",           // optional override (SC1 / SC2)
  "pc": "PC1",           // optional override (PC1 / PC2)
  "reason": "Seismic zone upgraded by project engineer",  // optional; logged to job_overrides
  "email": "you@firm.com"  // for entitlement lookup
}

Response

{
  "type": "exc_assignment",
  "job_id": 42,
  "exc": "EXC2",
  "consequence_class": "CC2",
  "service_category": "SC1",
  "production_category": "PC1",
  "rationale": [
    "Consequence Class CC2 per EN 1990 Annex B Table B.1",
    "Service Category SC1 per EN 1090-2:2018 Annex B §B.2",
    "Production Category PC1 per EN 1090-2:2018 Annex B §B.3",
    "EN 1090-2:2018 Table B.3 → EXC2",
    "SC1: no fatigue damage and seismic a_g·S < 0.10g",
    "PC1: all grades ≤ S355, welded thickness ≤ 30mm, no complex nodes"
  ],
  "requirements": {
    "exc": "EXC2",
    "weld_quality_level": "C (EN ISO 5817)",
    "weld_inspection_standard": "EN ISO 17635:2016",
    "ndt": {
      "vt_percent": 100,
      "mt_pt_percent": 10,
      "ut_rt_percent": 0,
      "note": "VT 100%; MT/PT 10% on CJP welds per EN 1090-2:2018 Table 24."
    },
    "tolerance_class": "Class 1 (essential tolerances, EN 1090-2 Table D.1.1)",
    "welder_qualification": "EN ISO 9606-1:2017 (full qualification)",
    "wps_wpqr": "Qualified WPS required; WPQR (EN ISO 15614-1) required for structural welds",
    "fabrication_notes": [...]
  }
}

GET /api/exc/:job_id

GET/api/exc/:job_id

Retrieve stored EXC result for a job. If not yet computed, auto-assigns on the fly. Returns the same structure as the POST endpoint, plus an overrides array listing any engineer manual overrides.

Manual Override

Override the auto-assigned EXC when the engineer has project-specific information (e.g. a regulatory authority requiring a higher class, or a structural certificate confirming lower CC).

curl -X POST https://frameai-structural.polsia.app/api/exc/assign \
  -H "Content-Type: application/json" \
  -d '{
    "job_id": 42,
    "cc": "CC3",
    "sc": "SC2",
    "pc": "PC2",
    "reason": "Regulatory authority requirement — stadium grandstand CC3",
    "email": "you@firm.com"
  }'

Override events are logged to the job_overrides table with user_id, reason, and created_at. They appear in the overrides array on subsequent GET calls.

Audit trail: Every manual override is recorded. This satisfies EN 1090-1 FPC (Factory Production Control) traceability requirements for signed-off changes to the execution class.

Sample Rationale Output

A job with S420 members (→ PC2), fatigue D = 0.45 (→ SC2), CC2 environment:

EXC: EXC3

Rationale:
  1. Consequence Class CC2 per EN 1990 Annex B Table B.1
  2. Service Category SC2 per EN 1090-2:2018 Annex B §B.2
  3. Production Category PC2 per EN 1090-2:2018 Annex B §B.3
  4. EN 1090-2:2018 Table B.3 → EXC3
  5. SC2: fatigue module ran with D > 0 (Palmgren-Miner, EN 1993-1-9 §6)
  6. PC2: member C1 grade S420 > S355 (EN 1090-2 Annex B §B.3)

NDT extent (Table 24): VT 100% · MT/PT 20% · UT/RT 20%
Tolerance class: Class 2 (EN 1090-2 Table D.1.2)
Welder qualification: EN ISO 9606-1:2017 (strict, periodic renewal)

References: EN 1090-2:2018 §4.1.2, Annex B (Table B.3); EN ISO 17635:2016; EN ISO 5817:2014; EN ISO 9606-1:2017; EN ISO 15614-1:2017; EN 1993-1-9:2005 §6; EN 1998-1:2004 §3.2.1.