@ferscloud/fers-calculation-web 0.2.39 → 0.2.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2513 @@
1
+ /**
2
+ * This file was auto-generated by openapi-typescript.
3
+ * Do not make direct changes to the file.
4
+ */
5
+
6
+ export type paths = Record<string, never>;
7
+ export type webhooks = Record<string, never>;
8
+ export interface components {
9
+ schemas: {
10
+ /**
11
+ * @description How a member force is reduced to a single value along the member.
12
+ * Internally tagged (`{"type": …}`) so every variant is an object — a mixed
13
+ * bare-string/object `oneOf` breaks the cloud TS generator.
14
+ */
15
+ Aggregation: {
16
+ /** @enum {string} */
17
+ type: "MaxAbs";
18
+ } | {
19
+ /** @enum {string} */
20
+ type: "Max";
21
+ } | {
22
+ /** @enum {string} */
23
+ type: "Min";
24
+ } | {
25
+ /** Format: double */
26
+ fraction: number;
27
+ /** @enum {string} */
28
+ type: "AtFraction";
29
+ } | {
30
+ /** @enum {string} */
31
+ type: "Start";
32
+ } | {
33
+ /** @enum {string} */
34
+ type: "End";
35
+ };
36
+ /** @description Everything that defines a run of the solver against a [`super::model::Model`]. */
37
+ Analysis: {
38
+ buckling?: null | components["schemas"]["BucklingAnalysisSettings"];
39
+ /** @default [] */
40
+ imperfection_cases: components["schemas"]["ImperfectionCase"][];
41
+ /** @default [] */
42
+ load_cases: components["schemas"]["LoadCase"][];
43
+ /** @default [] */
44
+ load_combinations: components["schemas"]["LoadCombination"][];
45
+ modal?: null | components["schemas"]["ModalAnalysisSettings"];
46
+ /** @description Solver options (first/second order, tolerances, self-weight, gravity, …). */
47
+ options: components["schemas"]["AnalysisOptions"];
48
+ seismic?: null | components["schemas"]["SeismicAnalysisSettings"];
49
+ /**
50
+ * @description Post-processing unity checks evaluated against the results.
51
+ * @default []
52
+ */
53
+ unity_checks: components["schemas"]["UnityCheckDefinition"][];
54
+ };
55
+ /** @description Solver options for an analysis run: analysis order (first/second), tolerances, rigid-member strategy, self-weight and gravity. */
56
+ AnalysisOptions: {
57
+ /** Format: double */
58
+ axial_slack?: number;
59
+ dimensionality: components["schemas"]["Dimensionality"];
60
+ /**
61
+ * @description When true, the engine generates self-weight (dead load) for every member
62
+ * from its material density and cross-sectional area, collected into a
63
+ * self-weight load case (see `self_weight_load_case_id`). Cable members
64
+ * carry their weight intrinsically in the catenary formulation and are
65
+ * therefore excluded from the generated self-weight load.
66
+ * @default false
67
+ */
68
+ enable_self_weight: boolean;
69
+ /**
70
+ * @description Global gravity direction as a vector (normalized to a unit vector at use).
71
+ * Default `(0, -1, 0)` — gravity acting in the negative Y direction.
72
+ * @default [
73
+ * 0,
74
+ * -1,
75
+ * 0
76
+ * ]
77
+ */
78
+ gravity_direction: components["schemas"]["Vector3"];
79
+ /**
80
+ * Format: double
81
+ * @description Signed gravitational acceleration magnitude in **m/s² (SI)**, the same in
82
+ * every unit system (it is NOT rescaled with the model's length unit).
83
+ * Default `-9.81`. Self-weight per unit length is
84
+ * `w = density · area · |gravity_factor|` applied along `gravity_direction`,
85
+ * and a member `weight` override maps to modal mass as `weight / |gravity_factor|`.
86
+ * @default -9.81
87
+ */
88
+ gravity_factor: number;
89
+ /**
90
+ * @description When true, each member result carries a sampled deflected-shape polyline
91
+ * (`member_displacements`): the member's global displacement at evenly-spaced
92
+ * stations, from cubic-Hermite interpolation of the end-node translations +
93
+ * rotations. Off by default to keep the result payload lean.
94
+ * @default false
95
+ */
96
+ include_member_deflected_shape: boolean;
97
+ /**
98
+ * @description When true, the solver embeds the single consolidated unity-check HTML
99
+ * report in `results.report_html`. Default false (keeps results JSON lean;
100
+ * the CLI `--report` flag writes the report to a file instead).
101
+ * @default false
102
+ */
103
+ include_report_html: boolean;
104
+ /**
105
+ * @description When false, suppresses shear-center eccentricity coupling (T^T·K·T
106
+ * transformation) by clearing y_s/z_s for all sections. Some commercial
107
+ * solvers do not apply this coupling; disabling it improves agreement.
108
+ * @default true
109
+ */
110
+ include_shear_center_coupling: boolean;
111
+ /**
112
+ * @description When false, forces shear deformation factor φ=0 (Euler-Bernoulli) for all elements.
113
+ * @default true
114
+ */
115
+ include_shear_deformation: boolean;
116
+ /**
117
+ * @description When false, ignores warping constant Iw and uses pure GJ/L torsion for all elements.
118
+ * @default true
119
+ */
120
+ include_warping: boolean;
121
+ /** Format: int32 */
122
+ max_iterations?: number | null;
123
+ /**
124
+ * @description Controls the nonlinear solver formulation (P_DELTA or COROTATIONAL).
125
+ * Only affects second-order (nonlinear) analysis.
126
+ */
127
+ nonlinear_method?: components["schemas"]["NonlinearMethod"];
128
+ order: components["schemas"]["AnalysisOrder"];
129
+ /**
130
+ * @description Controls the geometric stiffness matrix formulation for P-Delta analysis.
131
+ * `Consistent` (default) uses full Przemieniecki K_g; `Simplified` uses
132
+ * P/L-only diagonal terms matching commercial solvers.
133
+ */
134
+ pdelta_formulation?: components["schemas"]["PdeltaFormulation"];
135
+ /**
136
+ * @description High-level P-Delta strategy. `Full` (default) amplifies all directions.
137
+ * `InPlaneOnly` auto-detects the out-of-plane axis from the model's
138
+ * bounding box and suppresses it, matching commercial solver behavior.
139
+ * Overrides `pdelta_suppress_axes` when set to `InPlaneOnly`.
140
+ */
141
+ pdelta_mode?: components["schemas"]["PdeltaMode"];
142
+ /**
143
+ * @description Global translational axes to exclude from P-Delta amplification.
144
+ *
145
+ * When a structure is near buckling in an out-of-plane direction,
146
+ * the consistent P-Delta amplification can produce forces that differ
147
+ * significantly from commercial solvers which
148
+ * typically only amplify in-plane sway.
149
+ *
150
+ * Set to `["Z"]` for in-plane racks/portal frames where Z is out-of-plane,
151
+ * or `["X","Z"]` to limit P-Delta to Y-sway only. Empty (default) means
152
+ * all translational directions are amplified.
153
+ *
154
+ * Maps to global DOFs: "X"→0,7 "Y"→1,8 "Z"→2,9 per element.
155
+ */
156
+ pdelta_suppress_axes?: string[];
157
+ /**
158
+ * @description When true, fill each unity check's per-entity `rendered_report` from its
159
+ * `report_template` (rendered against the entity's computed trace). Default
160
+ * false for speed; orthogonal to `include_report_html` — narratives appear in
161
+ * the consolidated HTML only when this is also true.
162
+ * @default false
163
+ */
164
+ render_unity_reports: boolean;
165
+ rigid_strategy: components["schemas"]["RigidStrategy"];
166
+ /**
167
+ * Format: int32
168
+ * @description Target load case id that generated self-weight loads are injected into.
169
+ * When set, the loads are added to that (typically empty "G") load case so
170
+ * combinations can factor it (e.g. 1.35·G). When `None` and self-weight is
171
+ * enabled, a new load case is created automatically.
172
+ */
173
+ self_weight_load_case_id?: number | null;
174
+ solve_loadcases: boolean;
175
+ /** Format: double */
176
+ tolerance: number;
177
+ };
178
+ /**
179
+ * @description Python:
180
+ * class AnalysisOrder(Enum):
181
+ * LINEAR = "LINEAR"
182
+ * NONLINEAR = "NONLINEAR"
183
+ * @enum {string}
184
+ */
185
+ AnalysisOrder: "LINEAR" | "NONLINEAR";
186
+ /**
187
+ * @description A global coordinate axis.
188
+ * @enum {string}
189
+ */
190
+ Axis: "X" | "Y" | "Z";
191
+ /**
192
+ * @description Request for a linear (eigenvalue) buckling analysis: solve
193
+ * `K·φ = λ·(−K_g)·φ` where `K_g` is the geometric stiffness from the
194
+ * reference load's first-order stress state. Reports the lowest positive
195
+ * critical load factors `α_cr = λ` and their buckling mode shapes.
196
+ */
197
+ BucklingAnalysisSettings: {
198
+ /**
199
+ * Format: int32
200
+ * @description Maximum subspace-iteration sweeps. Defaults to 100 when omitted.
201
+ */
202
+ max_iterations?: number | null;
203
+ /**
204
+ * Format: int32
205
+ * @description Number of buckling modes (lowest positive critical factors) to extract.
206
+ */
207
+ num_modes: number;
208
+ /**
209
+ * @description Reference load whose first-order stress state drives the geometric
210
+ * stiffness `K_g`.
211
+ */
212
+ reference: components["schemas"]["EigenLoadRef"];
213
+ /**
214
+ * Format: double
215
+ * @description Eigen convergence tolerance (relative change in the tracked eigenvalues
216
+ * between subspace sweeps). Defaults to 1e-6 when omitted.
217
+ */
218
+ tolerance?: number | null;
219
+ };
220
+ /**
221
+ * @description Eurocode buckling curve (EN 1993-1-1 Table 6.1/6.2). Maps to imperfection
222
+ * factor α: a0=0.13, a=0.21, b=0.34, c=0.49, d=0.76.
223
+ * @enum {string}
224
+ */
225
+ BucklingCurve: "A0" | "A" | "B" | "C" | "D";
226
+ /** @description A single linear buckling mode. */
227
+ BucklingMode: {
228
+ /**
229
+ * Format: double
230
+ * @description Critical load factor `α_cr = λ`. The structure buckles when the reference
231
+ * load is scaled by this factor (EN 1993-1-1 §5.2.1).
232
+ */
233
+ critical_load_factor: number;
234
+ /**
235
+ * @description Buckling mode shape: per-node displacement pattern (normalized so the
236
+ * largest translational component is 1).
237
+ */
238
+ displacements: {
239
+ [key: string]: components["schemas"]["NodeDisplacement"];
240
+ };
241
+ /**
242
+ * Format: int32
243
+ * @description 1-based mode number (1 = lowest critical load factor).
244
+ */
245
+ mode: number;
246
+ };
247
+ /**
248
+ * @description A buckling restraint located at a node along a member set (one physical beam).
249
+ *
250
+ * Restraints are named by the local member axis they hold (not strong/weak,
251
+ * which depends on the section orientation). The spacing between consecutive
252
+ * nodes that restrain a given local direction yields the unrestrained length
253
+ * used for the corresponding buckling check; restraining twist gives a
254
+ * lateral-torsional restraint. The actual buckling-length computation is
255
+ * performed by the design-check module; this struct only carries the restraint
256
+ * definition through the model.
257
+ */
258
+ BucklingRestraint: {
259
+ /**
260
+ * Format: int32
261
+ * @description Node (on one of the member set's members) where the restraint acts.
262
+ */
263
+ node_id: number;
264
+ /** @description Restrains displacement along the member's local y axis. */
265
+ restrains_local_y?: boolean;
266
+ /** @description Restrains displacement along the member's local z axis. */
267
+ restrains_local_z?: boolean;
268
+ /**
269
+ * @description Restrains twist (rotation about the local x axis), i.e. a
270
+ * lateral-torsional restraint.
271
+ */
272
+ restrains_torsion?: boolean;
273
+ };
274
+ /**
275
+ * @description Results of a linear (eigenvalue) buckling analysis: the lowest positive
276
+ * critical load factors and their buckling mode shapes.
277
+ */
278
+ BucklingResults: {
279
+ modes: components["schemas"]["BucklingMode"][];
280
+ };
281
+ /**
282
+ * @description One line of the transparent hand-calc: a symbolic formula, the same formula
283
+ * with real numbers substituted, and the resulting value + unit (display units).
284
+ */
285
+ CalcStep: {
286
+ formula: string;
287
+ label: string;
288
+ substituted: string;
289
+ unit: string;
290
+ /** Format: double */
291
+ value: number;
292
+ };
293
+ /**
294
+ * @description The evaluator kind. Open union — new codes (AISC, …) add variants; the
295
+ * result/report/colour layer is identical for every variant.
296
+ */
297
+ CheckSpec: {
298
+ Generic: components["schemas"]["GenericSpec"];
299
+ } | {
300
+ Ec3Steel: components["schemas"]["Ec3SteelSpec"];
301
+ };
302
+ /**
303
+ * @description Physical dimension a [`QuantitySource::DimensionedConstant`] carries, so its
304
+ * trace value is scaled + labelled consistently with the quantities it is
305
+ * compared against. Serialized in the input schema (unlike runtime [`Dimension`]).
306
+ * @enum {string}
307
+ */
308
+ ConstantDimension: "Length" | "Force" | "Moment" | "Stress" | "Area" | "Angle";
309
+ /**
310
+ * @description Transverse deflection component, measured relative to the entity's end-to-end
311
+ * chord (local-frame axes perpendicular to the chord).
312
+ * @enum {string}
313
+ */
314
+ DeflectionComponent: "LocalY" | "LocalZ" | "Magnitude";
315
+ /**
316
+ * @description Unit of mass density used by every `Material.density` in the model.
317
+ *
318
+ * Chosen **independently** of `lengthUnit` — a mm/N model may still declare
319
+ * `kg/m3` and pass raw values like structural steel's `7850`. Accepted JSON
320
+ * tokens are the ASCII strings `"kg/m3"` and `"kg/mm3"` (digit `3`, not the
321
+ * superscript `³`); both normalise to SI (kg/m³) internally regardless of the
322
+ * length unit. Default: `"kg/m3"`.
323
+ * @enum {string}
324
+ */
325
+ DensityUnit: "kg/m3" | "kg/mm3";
326
+ /**
327
+ * @description Python:
328
+ * class Dimensionality(Enum):
329
+ * TWO_DIMENSIONAL = "2D"
330
+ * THREE_DIMENSIONAL = "3D"
331
+ * @enum {string}
332
+ */
333
+ Dimensionality: "2D" | "3D";
334
+ /**
335
+ * @description Directional combination rule across excitation directions.
336
+ * @enum {string}
337
+ */
338
+ DirectionalCombination: "SRSS" | "PERCENT30";
339
+ /**
340
+ * @description Nodal displacement component.
341
+ * @enum {string}
342
+ */
343
+ DispComponent: "Dx" | "Dy" | "Dz" | "Rx" | "Ry" | "Rz" | "Magnitude";
344
+ /** @description A linearly varying distributed load applied along a member over a fractional span (start/end magnitudes). */
345
+ DistributedLoad: {
346
+ direction: components["schemas"]["Vector3"];
347
+ /** Format: double */
348
+ end_frac: number;
349
+ /** Format: double */
350
+ end_magnitude: number;
351
+ /** Format: int32 */
352
+ id: number;
353
+ /** Format: double */
354
+ magnitude: number;
355
+ /** Format: int32 */
356
+ member: number;
357
+ /** Format: double */
358
+ start_frac: number;
359
+ };
360
+ /**
361
+ * @description EN 1993-1-1 (steel) design parameters for a section. Engineer-supplied
362
+ * (we don't auto-classify — flange/web geometry isn't stored). Namespaced under
363
+ * `Section.ec3` so other codes (e.g. AISC) can add their own block without
364
+ * polluting the universal section properties.
365
+ */
366
+ Ec3SectionParams: {
367
+ /**
368
+ * Format: double
369
+ * @description Effective area for class 4 sections (EN 1993-1-5 §4.3), in the model's
370
+ * area unit. Required together with `wel_y_eff` to run EC3 checks on a
371
+ * class 4 section.
372
+ */
373
+ a_eff?: number | null;
374
+ buckling_curve_lt?: null | components["schemas"]["BucklingCurve"];
375
+ buckling_curve_y?: null | components["schemas"]["BucklingCurve"];
376
+ buckling_curve_z?: null | components["schemas"]["BucklingCurve"];
377
+ /**
378
+ * Format: int32
379
+ * @description Cross-section class 1–4 (EN 1993-1-1 §5.5). Class 4 needs effective
380
+ * properties (currently a limitation — see the EC3 evaluator).
381
+ */
382
+ section_class?: number | null;
383
+ /**
384
+ * Format: double
385
+ * @description Effective elastic section modulus about y (major axis) for class 4
386
+ * sections (EN 1993-1-5), in the model's section-modulus unit.
387
+ */
388
+ wel_y_eff?: number | null;
389
+ /**
390
+ * Format: double
391
+ * @description Effective elastic section modulus about z (minor axis) for class 4
392
+ * sections (EN 1993-1-5), in the model's section-modulus unit.
393
+ */
394
+ wel_z_eff?: number | null;
395
+ /**
396
+ * Format: double
397
+ * @description Mono-symmetry parameter `z_j` (EN 1993-1-1 / NCCI SN030) in the model's
398
+ * length unit; 0 for doubly-symmetric sections. Enables the general LTB
399
+ * `M_cr` (used with the spec's C2/C3/z_g).
400
+ */
401
+ z_j?: number | null;
402
+ };
403
+ /** @description Built-in EN 1993-1-1 steel member check (§6.2 cross-section + §6.3 buckling). */
404
+ Ec3SteelSpec: {
405
+ /**
406
+ * Format: double
407
+ * @description LTB moment-distribution factor C1. When omitted it is computed from the
408
+ * member's actual moment diagram (NCCI SN003 quarter-point formula); set it
409
+ * explicitly to override (e.g. 1.0 = conservative uniform moment).
410
+ */
411
+ c1?: number | null;
412
+ /**
413
+ * Format: double
414
+ * @description LTB factors C2 / C3 for the general `M_cr` (load height / mono-symmetry).
415
+ * Default 0.0 → the doubly-symmetric form (no load-height or z_j term).
416
+ * @default 0
417
+ */
418
+ c2: number;
419
+ /**
420
+ * Format: double
421
+ * @default 0
422
+ */
423
+ c3: number;
424
+ /**
425
+ * Format: double
426
+ * @default 1
427
+ */
428
+ gamma_m0: number;
429
+ /**
430
+ * Format: double
431
+ * @default 1
432
+ */
433
+ gamma_m1: number;
434
+ /** @default true */
435
+ include_buckling: boolean;
436
+ /** @default true */
437
+ include_ltb: boolean;
438
+ interaction_method?: components["schemas"]["InteractionMethod"];
439
+ /**
440
+ * Format: double
441
+ * @description Transverse-load application height `z_g` above the shear centre (model
442
+ * length units). Positive = destabilising (load above shear centre).
443
+ * Default 0.0 (load at the shear centre).
444
+ * @default 0
445
+ */
446
+ z_g: number;
447
+ };
448
+ /**
449
+ * @description Which load drives the reference stress state for a linear buckling analysis.
450
+ * Its first-order member axial forces scale linearly with the load, so the
451
+ * returned eigenvalue is the critical load factor `α_cr` directly.
452
+ */
453
+ EigenLoadRef: {
454
+ /**
455
+ * Format: int32
456
+ * @description Reference a load case by id.
457
+ */
458
+ LoadCase: number;
459
+ } | {
460
+ /**
461
+ * Format: int32
462
+ * @description Reference a load combination by id.
463
+ */
464
+ LoadCombination: number;
465
+ };
466
+ /**
467
+ * @description Generic, calculation-agnostic grouping of model entities for UI /
468
+ * visualization. Metadata only — ignored by the solver, surfaced in the
469
+ * OpenAPI schema for consumers (mirrors `WorkPlane`/`WorkAxis`). A group may
470
+ * reference any mix of entity kinds via the typed id lists below; each list
471
+ * defaults to empty.
472
+ */
473
+ EntityGroup: {
474
+ /** Format: int32 */
475
+ id: number;
476
+ member_ids?: number[];
477
+ member_set_ids?: number[];
478
+ name?: string;
479
+ node_ids?: number[];
480
+ /** @description Generated plate finite elements. */
481
+ plate_element_ids?: number[];
482
+ /** @description Modeled plate surfaces. */
483
+ plate_surface_ids?: number[];
484
+ support_ids?: number[];
485
+ work_axis_ids?: number[];
486
+ work_plane_ids?: number[];
487
+ };
488
+ /**
489
+ * @description A node named relative to the entity (member) being checked — its own ends, or,
490
+ * via the member's `reference_member` / `reference_node`, a paired member/node.
491
+ * Lets a check compare against the member it points at, reusably by classification
492
+ * (each member carries its own reference).
493
+ * @enum {string}
494
+ */
495
+ EntityNodeRef: "Start" | "End" | "ReferenceMemberStart" | "ReferenceMemberEnd" | "ReferenceNode";
496
+ /**
497
+ * @description Which entity a result belongs to. A tagged union (`{"type": …, "<kind>_id": …}`)
498
+ * so exactly one target kind is set — consistent with `EntitySelector` and
499
+ * `PlatePressureTarget`.
500
+ */
501
+ EntityRef: {
502
+ /** Format: int32 */
503
+ member_id: number;
504
+ /** @enum {string} */
505
+ type: "Member";
506
+ } | {
507
+ /** Format: int32 */
508
+ memberset_id: number;
509
+ /** @enum {string} */
510
+ type: "MemberSet";
511
+ } | {
512
+ /** Format: int32 */
513
+ plate_element_id: number;
514
+ /** @enum {string} */
515
+ type: "PlateElement";
516
+ } | {
517
+ /** Format: int32 */
518
+ plate_surface_id: number;
519
+ /** @enum {string} */
520
+ type: "PlateSurface";
521
+ };
522
+ /**
523
+ * @description Which entities a check applies to. Internally tagged (`{"type": …}`) so every
524
+ * variant is an object (a mixed bare-string/object `oneOf` breaks the cloud TS
525
+ * generator).
526
+ */
527
+ EntitySelector: {
528
+ /** @enum {string} */
529
+ type: "AllMembers";
530
+ } | {
531
+ ids: number[];
532
+ /** @enum {string} */
533
+ type: "Members";
534
+ } | {
535
+ ids: number[];
536
+ /** @enum {string} */
537
+ type: "MemberSets";
538
+ } | {
539
+ /** @enum {string} */
540
+ type: "MemberClassification";
541
+ value: string;
542
+ } | {
543
+ /** @enum {string} */
544
+ type: "AllPlates";
545
+ } | {
546
+ ids: number[];
547
+ /** @enum {string} */
548
+ type: "PlateSurfaces";
549
+ } | {
550
+ ids: number[];
551
+ /** @enum {string} */
552
+ type: "PlateElements";
553
+ };
554
+ /**
555
+ * @description Which member a property/force quantity resolves against: the entity itself, or
556
+ * the member named by its `reference_member`. Defaults to the entity (so existing
557
+ * checks are unchanged).
558
+ * @enum {string}
559
+ */
560
+ EntityTarget: "SelfEntity" | "ReferenceMember";
561
+ /** @description The result of one check for one entity, enveloped over the applicable combos. */
562
+ EntityUnityResult: {
563
+ /** Format: double */
564
+ capacity?: number | null;
565
+ /** Format: double */
566
+ demand: number;
567
+ entity: components["schemas"]["EntityRef"];
568
+ /** Format: int32 */
569
+ governing_combination_id?: number | null;
570
+ /** Format: double */
571
+ location_x_frac?: number | null;
572
+ message?: string | null;
573
+ /** @description Rendered narrative report (from the check's `report_template`), if any. */
574
+ rendered_report?: string | null;
575
+ status: components["schemas"]["UnityStatus"];
576
+ /**
577
+ * @description Transparent hand-calc trace (symbolic + substituted) in display units.
578
+ * @default []
579
+ */
580
+ trace: components["schemas"]["CalcStep"][];
581
+ /** Format: double */
582
+ utilization: number;
583
+ };
584
+ /**
585
+ * @description Per-result solver diagnostics. `errors` mark results that are present but not
586
+ * trustworthy (e.g. a second-order load that meets or exceeds the elastic
587
+ * critical/buckling load); `warnings` are advisory. Empty in the common case.
588
+ */
589
+ ErrorsAndWarnings: {
590
+ /** @default [] */
591
+ errors: components["schemas"]["SolverMessage"][];
592
+ /** @default [] */
593
+ warnings: components["schemas"]["SolverMessage"][];
594
+ };
595
+ /** @description Root FERS document: settings, the structural model, the analysis to run, and (after solving) results. */
596
+ FERS: {
597
+ /** @description The analysis definition: solver options + load/imperfection cases. */
598
+ analysis: components["schemas"]["Analysis"];
599
+ /** @description The structural model: geometry, topology, materials, workspace. */
600
+ model: components["schemas"]["Model"];
601
+ results?: null | components["schemas"]["ResultsBundle"];
602
+ /**
603
+ * Format: int32
604
+ * @description Schema contract version (see [`SCHEMA_VERSION`]). Defaults to the current
605
+ * version when omitted so older documents still parse.
606
+ * @default 2
607
+ */
608
+ schema_version: number;
609
+ /** @description Units + general info (analysis solver options live on `analysis.options`). */
610
+ settings: components["schemas"]["Settings"];
611
+ };
612
+ /** @enum {string} */
613
+ ForceUnit: "N" | "kN";
614
+ /** @description Project metadata (name, author, version) shown in reports. */
615
+ GeneralInfo: {
616
+ author: string;
617
+ project_name: string;
618
+ version: string;
619
+ };
620
+ /**
621
+ * @description A user-authored, templated-formula check. `utilization = demand / capacity`,
622
+ * both evaluated in SI; the report shows each step filled in with real numbers.
623
+ */
624
+ GenericSpec: {
625
+ /** @description Capacity (resistance) expression, e.g. `"fy"`. */
626
+ capacity: string;
627
+ /**
628
+ * @description Demand (action effect) expression, e.g.
629
+ * `"bending_moment * fibre_distance / second_moment_of_area"`.
630
+ */
631
+ demand: string;
632
+ /**
633
+ * @description Named variables referenced by `demand`/`capacity` (and, via the computed
634
+ * trace, by the check's `report_template`).
635
+ * @default []
636
+ */
637
+ variables: components["schemas"]["VarBinding"][];
638
+ };
639
+ /**
640
+ * @description A geometric quantity.
641
+ * @enum {string}
642
+ */
643
+ GeometryProperty: "Length";
644
+ /**
645
+ * @description EN 1998-1 ground type (Table 3.1) selecting the spectrum shape parameters.
646
+ * @enum {string}
647
+ */
648
+ GroundType: "A" | "B" | "C" | "D" | "E";
649
+ /** @description Geometric imperfections (sway/translation) applied for a set of load combinations. */
650
+ ImperfectionCase: {
651
+ /** Format: int32 */
652
+ imperfection_case_id: number;
653
+ load_combinations: number[];
654
+ sway_imperfections: components["schemas"]["SwayImperfection"][];
655
+ translation_imperfections: components["schemas"]["TranslationImperfection"][];
656
+ };
657
+ /**
658
+ * @description k_ij interaction-factor method for EN 1993-1-1 §6.3.3.
659
+ * @enum {string}
660
+ */
661
+ InteractionMethod: "AnnexA" | "AnnexB";
662
+ /** @description Lateral-force (equivalent static) method results (§4.3.3.2). */
663
+ LateralForceResults: {
664
+ combined: components["schemas"]["Results"];
665
+ per_direction: components["schemas"]["SeismicDirectionResult"][];
666
+ };
667
+ /** @enum {string} */
668
+ LengthUnit: "mm" | "cm" | "m";
669
+ /** @enum {string} */
670
+ LimitState: "SLS" | "ULS" | "FLS" | "ALS";
671
+ /**
672
+ * @description The coordinate frame a member point load/moment direction is expressed in.
673
+ * @enum {string}
674
+ */
675
+ LoadAxes: "global" | "local";
676
+ /** @description A named collection of loads (nodal, distributed, surface, member point loads/moments, plate pressures, imperfections). */
677
+ LoadCase: {
678
+ /** @default [] */
679
+ distributed_loads: components["schemas"]["DistributedLoad"][];
680
+ /** Format: int32 */
681
+ id: number;
682
+ /** @default [] */
683
+ member_point_loads: components["schemas"]["MemberPointLoad"][];
684
+ /** @default [] */
685
+ member_point_moments: components["schemas"]["MemberPointMoment"][];
686
+ name: string;
687
+ /** @default [] */
688
+ nodal_loads: components["schemas"]["NodalLoad"][];
689
+ /** @default [] */
690
+ nodal_moments: components["schemas"]["NodalMoment"][];
691
+ /** @default [] */
692
+ plate_pressures: components["schemas"]["PlatePressure"][];
693
+ /** @default [] */
694
+ surface_loads: components["schemas"]["SurfaceLoad"][];
695
+ };
696
+ /** @description One `(load case, factor)` term of a load combination. */
697
+ LoadCaseFactor: {
698
+ /** Format: double */
699
+ factor: number;
700
+ /** Format: int32 */
701
+ load_case_id: number;
702
+ };
703
+ /** @description A factored combination of load cases for a given limit state (SLS/ULS/FLS/ALS). */
704
+ LoadCombination: {
705
+ check: string;
706
+ /** Format: int32 */
707
+ id: number;
708
+ limit_state?: null | components["schemas"]["LimitState"];
709
+ load_case_factors: components["schemas"]["LoadCaseFactor"][];
710
+ name: string;
711
+ situation?: string | null;
712
+ };
713
+ /**
714
+ * @description Distinguishes a concentrated force from a concentrated moment at a node.
715
+ * @enum {string}
716
+ */
717
+ LoadType: "force" | "moment";
718
+ /**
719
+ * @description Mass-matrix formulation for modal (natural-frequency) analysis.
720
+ *
721
+ * - **Consistent** (default): full Przemieniecki element mass matrix that
722
+ * couples translations and rotations. More accurate, matches the consistent
723
+ * stiffness matrix, and is positive-definite on translational + rotational
724
+ * DOFs.
725
+ * - **Lumped**: diagonal mass matrix (HRZ-style half-mass at each node for the
726
+ * translational DOFs only). Simpler and cheaper; rotational/warping DOFs
727
+ * carry no inertia, so the mass matrix is only positive-semidefinite. The
728
+ * subspace-iteration eigensolver handles the massless DOFs.
729
+ *
730
+ * Python:
731
+ * class MassFormulation(Enum):
732
+ * CONSISTENT = "CONSISTENT"
733
+ * LUMPED = "LUMPED"
734
+ * @enum {string}
735
+ */
736
+ MassFormulation: "CONSISTENT" | "LUMPED";
737
+ /** @description An isotropic material (E, G, density, yield strength) with optional orthotropic plate properties. */
738
+ Material: {
739
+ /** Format: double */
740
+ density: number;
741
+ /** Format: double */
742
+ e_mod: number;
743
+ /** Format: double */
744
+ g_mod: number;
745
+ /** Format: int32 */
746
+ id: number;
747
+ name: string;
748
+ orthotropic_plate?: null | components["schemas"]["OrthotropicPlateMaterial"];
749
+ /** Format: double */
750
+ yield_stress: number;
751
+ };
752
+ /**
753
+ * @description A material property.
754
+ * @enum {string}
755
+ */
756
+ MaterialProperty: "E" | "G" | "Fy" | "Density";
757
+ /** @description A finite-element member between two nodes, with a section, member type and optional end hinges/offsets. */
758
+ Member: {
759
+ /**
760
+ * Format: double
761
+ * @description Optional user-supplied buckling reduction factor χ (EN 1993-1-1 §6.3).
762
+ * Currently informational: the EC3 unity-check evaluator computes its own χ
763
+ * from the section's buckling curve and does not yet read this override.
764
+ */
765
+ chi?: number | null;
766
+ /**
767
+ * @description Free-text grouping key used to target this member in unity checks
768
+ * (`EntitySelector::MemberClassification`). `None` = unclassified.
769
+ */
770
+ classification?: string | null;
771
+ /** Format: int32 */
772
+ end_hinge?: number | null;
773
+ /** Format: int32 */
774
+ end_node_id: number;
775
+ end_offset?: null | components["schemas"]["MemberEndOffset"];
776
+ /** Format: int32 */
777
+ id: number;
778
+ member_type: components["schemas"]["MemberType"];
779
+ /**
780
+ * @description When true, the cross-section is mirrored: shear-center offsets y_s and
781
+ * z_s are negated, and the shape_path geometry is flipped.
782
+ */
783
+ mirror?: boolean;
784
+ /**
785
+ * Format: double
786
+ * @description Initial cable tension (force units) for `Cable` members. Used to derive
787
+ * the unstretched length when `unstretched_length` is not given directly:
788
+ * `L₀ = L_chord / (1 + pretension/EA)`. Ignored for non-cable members.
789
+ */
790
+ pretension?: number | null;
791
+ /**
792
+ * Format: int32
793
+ * @description Reference member used by the modeler/UI to define this member's orientation
794
+ * or grouping. Not used by the solver; preserved for consumers/unity checks.
795
+ */
796
+ reference_member?: number | null;
797
+ /**
798
+ * Format: int32
799
+ * @description Reference node used by the modeler/UI (e.g. orientation reference). Not used
800
+ * by the solver; preserved for consumers/unity checks.
801
+ */
802
+ reference_node?: number | null;
803
+ /** Format: double */
804
+ rotation_angle: number;
805
+ /** Format: int32 */
806
+ section?: number | null;
807
+ /** Format: int32 */
808
+ start_hinge?: number | null;
809
+ /** Format: int32 */
810
+ start_node_id: number;
811
+ start_offset?: null | components["schemas"]["MemberEndOffset"];
812
+ /**
813
+ * Format: double
814
+ * @description Explicit unstretched (natural) length L₀ (length units) for `Cable`
815
+ * members. Takes precedence over `pretension`. When neither is set, the
816
+ * cable's unstretched length defaults to the straight chord length.
817
+ */
818
+ unstretched_length?: number | null;
819
+ /**
820
+ * Format: double
821
+ * @description Optional self-weight override as a gravity load **per unit length**, in the
822
+ * model's force/length units (already including g). When non-zero it replaces
823
+ * the computed `density · area · g` self-weight for this member (see
824
+ * `append_self_weight_loads`); `0.0` means "use the computed value".
825
+ */
826
+ weight: number;
827
+ };
828
+ /**
829
+ * @description One sampled point on a member's deflected shape: the global displacement
830
+ * `[dx, dy, dz]` at fractional position `x_frac ∈ [0, 1]` along the member
831
+ * (0 = start node, 1 = end node).
832
+ */
833
+ MemberDisplacementSample: {
834
+ /** @description Global displacement `[dx, dy, dz]` at this station, in model length units. */
835
+ displacement: components["schemas"]["Vector3"];
836
+ /**
837
+ * Format: double
838
+ * @description Fractional position along the member, 0 (start) … 1 (end).
839
+ */
840
+ x_frac: number;
841
+ };
842
+ /**
843
+ * @description A rigid offset between a member end and its node, in the **global** frame
844
+ * (`X`, `Y`, `Z`).
845
+ */
846
+ MemberEndOffset: {
847
+ /** Format: double */
848
+ X?: number;
849
+ /** Format: double */
850
+ Y?: number;
851
+ /** Format: double */
852
+ Z?: number;
853
+ };
854
+ /**
855
+ * @description Local member force component (member local axes). Used by member unity checks
856
+ * (`QuantitySource::MemberForce`) and member-hinge stiffness curves. Distinct
857
+ * from [`crate::models::stiffness_curve::SupportForceComponent`], whose global
858
+ * `Fx/Fy/Fz` reaction names apply to support stiffness curves.
859
+ * @enum {string}
860
+ */
861
+ MemberForceComponent: "N" | "Vy" | "Vz" | "Mx" | "My" | "Mz" | "Bimoment";
862
+ /** @description A member end release / spring: translational and rotational stiffnesses with optional nonlinear curves. */
863
+ MemberHinge: {
864
+ /**
865
+ * @description Free-text label for human readability only (e.g. `"Column base"`,
866
+ * `"SPRING_YZ"`). The solver ignores this field — actual hinge behavior is
867
+ * driven entirely by the release/stiffness fields below. Not a constrained
868
+ * value set, so intentionally a `String` rather than an enum.
869
+ */
870
+ hinge_type: string;
871
+ /** Format: int32 */
872
+ id: number;
873
+ /** Format: double */
874
+ max_bimoment_warp?: number | null;
875
+ /** Format: double */
876
+ max_moment_mx?: number | null;
877
+ /** Format: double */
878
+ max_moment_my?: number | null;
879
+ /** Format: double */
880
+ max_moment_mz?: number | null;
881
+ /** Format: double */
882
+ max_tension_vx?: number | null;
883
+ /** Format: double */
884
+ max_tension_vy?: number | null;
885
+ /** Format: double */
886
+ max_tension_vz?: number | null;
887
+ /** Format: double */
888
+ rotational_release_mx?: number | null;
889
+ /** Format: double */
890
+ rotational_release_my?: number | null;
891
+ /** Format: double */
892
+ rotational_release_mz?: number | null;
893
+ /** Format: double */
894
+ rotational_release_warp?: number | null;
895
+ stiffness_curve_mx?: null | components["schemas"]["MemberStiffnessCurve"];
896
+ stiffness_curve_my?: null | components["schemas"]["MemberStiffnessCurve"];
897
+ stiffness_curve_mz?: null | components["schemas"]["MemberStiffnessCurve"];
898
+ stiffness_curve_vx?: null | components["schemas"]["MemberStiffnessCurve"];
899
+ stiffness_curve_vy?: null | components["schemas"]["MemberStiffnessCurve"];
900
+ stiffness_curve_vz?: null | components["schemas"]["MemberStiffnessCurve"];
901
+ /** Format: double */
902
+ translational_release_vx?: number | null;
903
+ /** Format: double */
904
+ translational_release_vy?: number | null;
905
+ /** Format: double */
906
+ translational_release_vz?: number | null;
907
+ };
908
+ /** @description A concentrated force applied at a fractional position along a member. */
909
+ MemberPointLoad: {
910
+ /**
911
+ * @description Coordinate frame the `direction` is expressed in.
912
+ * @default global
913
+ */
914
+ axes: components["schemas"]["LoadAxes"];
915
+ /** @description Load direction unit vector (global or local axes). */
916
+ direction: components["schemas"]["Vector3"];
917
+ /** Format: int32 */
918
+ id: number;
919
+ /** Format: double */
920
+ magnitude: number;
921
+ /** Format: int32 */
922
+ member: number;
923
+ /**
924
+ * Format: double
925
+ * @description Fractional position along the member (0.0 = start, 1.0 = end).
926
+ */
927
+ position: number;
928
+ };
929
+ /** @description A concentrated moment applied at a fractional position along a member. */
930
+ MemberPointMoment: {
931
+ /**
932
+ * @description Coordinate frame the `direction` is expressed in.
933
+ * @default global
934
+ */
935
+ axes: components["schemas"]["LoadAxes"];
936
+ /** @description Load direction unit vector (global or local axes). */
937
+ direction: components["schemas"]["Vector3"];
938
+ /** Format: int32 */
939
+ id: number;
940
+ /** Format: double */
941
+ magnitude: number;
942
+ /** Format: int32 */
943
+ member: number;
944
+ /**
945
+ * Format: double
946
+ * @description Fractional position along the member (0.0 = start, 1.0 = end).
947
+ */
948
+ position: number;
949
+ };
950
+ /**
951
+ * @description Per-member result: local/global end forces, envelope maxima/minima, and section forces.
952
+ *
953
+ * ## Sign convention (see also `compute_section_forces` in `functions/results.rs`)
954
+ *
955
+ * - **Frames.** `start_node_forces` / `end_node_forces` are in the **global** frame.
956
+ * `local_*` fields and `section_forces` are in the member's **local centroidal**
957
+ * frame. For geometrically-nonlinear (corotational) results the local frame is the
958
+ * **corotated (deformed-element) frame**, so the bending moment stays in one
959
+ * component along a co-linear member chain and section forces interpolate correctly.
960
+ * - **Start vs end node.** The two member ends report forces in the static-equilibrium
961
+ * ("nodal reaction") convention, so the **end node is the Newton's-3rd-law opposite**
962
+ * of the start node and the interior `section_forces`. Plotting
963
+ * `[start, …section_forces…, end]` raw therefore draws a `value → −value` sawtooth;
964
+ * use [`MemberResult::internal_force_series`] (which negates the end node) for a
965
+ * continuous diagram, or negate `local_end_forces` yourself.
966
+ * - **Components.** Axial `fx` is **tension-positive**; `fy`/`fz` are shears, `mx` is
967
+ * torsion, `my`/`mz` are bending moments, `bw` is the warping bimoment.
968
+ */
969
+ MemberResult: {
970
+ /**
971
+ * @description Member-end force at the end node, in the **global** frame (Newton's-3rd-law
972
+ * opposite of the start-node internal force).
973
+ */
974
+ end_node_forces: components["schemas"]["NodeForces"];
975
+ /**
976
+ * @description Continuous, ready-to-plot internal force diagram from `x_frac = 0` (start) to
977
+ * `x_frac = 1` (end), in the local frame: `local_start_forces`, then
978
+ * `section_forces`, then the **negated** `local_end_forces` (converted from the
979
+ * Newton's-3rd-law node reaction to the internal-force convention) so the series
980
+ * is continuous with no sawtooth across shared nodes.
981
+ */
982
+ internal_force_series?: components["schemas"]["SectionForce"][];
983
+ local_displacement_end_node: components["schemas"]["NodeDisplacement"];
984
+ local_displacement_start_node: components["schemas"]["NodeDisplacement"];
985
+ /**
986
+ * @description Internal force at the end node, in the member **local centroidal** frame.
987
+ * This is the nodal-reaction convention, i.e. the Newton's-3rd-law opposite of
988
+ * the internal force at the end — negate it to get the continuous internal value.
989
+ */
990
+ local_end_forces: components["schemas"]["NodeForces"];
991
+ /** @description Per-component maxima over the member, in the local frame. */
992
+ local_maximums: components["schemas"]["NodeForces"];
993
+ /** @description Per-component minima over the member, in the local frame. */
994
+ local_minimums: components["schemas"]["NodeForces"];
995
+ /**
996
+ * @description Internal force at the start node, in the member **local centroidal** frame
997
+ * (corotated frame for nonlinear results). Equals `internal_force_series[0]`.
998
+ */
999
+ local_start_forces: components["schemas"]["NodeForces"];
1000
+ /** @description Per-component maxima over the member (global frame). */
1001
+ maximums: components["schemas"]["NodeForces"];
1002
+ /**
1003
+ * @description Optional sampled deflected shape: the member's global displacement at
1004
+ * evenly-spaced stations from `x_frac = 0` to `1`, reconstructed by
1005
+ * cubic-Hermite interpolation of the end-node translations + rotations.
1006
+ * Empty unless `AnalysisOptions::include_member_deflected_shape` is enabled.
1007
+ * The interpolation is the end-DOF homogeneous cubic — exact for members with
1008
+ * no span load; under a member UDL the true shape is quartic, so mid-span sag
1009
+ * is slightly under-rendered (matching client-side Hermite reconstructions).
1010
+ */
1011
+ member_displacements?: components["schemas"]["MemberDisplacementSample"][];
1012
+ /** @description Per-component minima over the member (global frame). */
1013
+ minimums: components["schemas"]["NodeForces"];
1014
+ /**
1015
+ * @description Continuous internal forces at evenly-spaced **interior** fractions
1016
+ * (`0 < x_frac < 1`), in the local frame. These already follow the internal-force
1017
+ * convention (no end-node flip). For a ready-to-plot 0→1 diagram including the
1018
+ * endpoints use [`MemberResult::internal_force_series`].
1019
+ */
1020
+ section_forces: components["schemas"]["SectionForce"][];
1021
+ /** @description Member-end force at the start node, in the **global** frame. */
1022
+ start_node_forces: components["schemas"]["NodeForces"];
1023
+ };
1024
+ /**
1025
+ * @description A member set represents one physical beam: the ordered chain of collinear
1026
+ * finite-element members that together form a single continuous structural
1027
+ * member. Members are referenced by id; the member objects themselves live in
1028
+ * the top-level `FERS.members` list.
1029
+ */
1030
+ MemberSet: {
1031
+ /**
1032
+ * Format: double
1033
+ * @description Buckling-length overrides for code checks (EN 1993-1-1 §6.3). When absent,
1034
+ * the unity-check evaluator derives L_cr from `buckling_restraints` spacing.
1035
+ * Explicit lengths (m) take precedence over the factors.
1036
+ */
1037
+ buckling_length_y?: number | null;
1038
+ /** Format: double */
1039
+ buckling_length_z?: number | null;
1040
+ /**
1041
+ * @description Node-based buckling restraints along the beam (replaces scalar l_y/l_z).
1042
+ * @default []
1043
+ */
1044
+ buckling_restraints: components["schemas"]["BucklingRestraint"][];
1045
+ /**
1046
+ * @description Free-text label for the modeler/UI (e.g. "Upright", "Beam"); not used by
1047
+ * the solver.
1048
+ */
1049
+ classification?: string | null;
1050
+ /**
1051
+ * Format: double
1052
+ * @description Effective-length factor K_y (L_cr,y = K_y · L) when no explicit length given.
1053
+ */
1054
+ effective_length_factor_y?: number | null;
1055
+ /** Format: double */
1056
+ effective_length_factor_z?: number | null;
1057
+ /** Format: int32 */
1058
+ id: number;
1059
+ /**
1060
+ * Format: double
1061
+ * @description Unrestrained length for lateral-torsional buckling (m).
1062
+ */
1063
+ ltb_length?: number | null;
1064
+ /** @description Ids of the members (in `FERS.members`) that make up this beam. */
1065
+ member_ids: number[];
1066
+ };
1067
+ /**
1068
+ * @description A **member-hinge** spring stiffness that varies with a member-local force.
1069
+ *
1070
+ * `points` is a sorted list of `[force_value, stiffness]` pairs and `depends_on`
1071
+ * is the member-local force component driving the interpolation. `Bimoment` is
1072
+ * not a valid curve driver (no slot in the member-end force array).
1073
+ */
1074
+ MemberStiffnessCurve: {
1075
+ /** @description Which member-local force component the stiffness depends on. */
1076
+ depends_on: components["schemas"]["MemberStiffnessCurveDriver"];
1077
+ /** @description Sorted `[force_value, stiffness]` pairs (≥ 2 points, positive stiffness). */
1078
+ points: [
1079
+ number,
1080
+ number
1081
+ ][];
1082
+ /**
1083
+ * @description When `true`, the curve is driven by the SIGNED force, so tension and
1084
+ * compression can have different stiffness (points may span negative
1085
+ * force). When `false` (default), the curve is driven by `|force|`
1086
+ * (symmetric in tension/compression — the legacy behaviour).
1087
+ */
1088
+ signed?: boolean;
1089
+ };
1090
+ /**
1091
+ * @description Which member-local force component a **member-hinge** stiffness curve depends on.
1092
+ *
1093
+ * A subset of [`crate::models::unitychecks::quantities::MemberForceComponent`]:
1094
+ * the six member-end force/moment components, excluding `Bimoment` (which has no
1095
+ * slot in the member-end force array and cannot drive a curve). Keeping a
1096
+ * dedicated driver enum makes the schema express exactly what is valid.
1097
+ * @enum {string}
1098
+ */
1099
+ MemberStiffnessCurveDriver: "N" | "Vy" | "Vz" | "Mx" | "My" | "Mz";
1100
+ /** @enum {string} */
1101
+ MemberType: "Normal" | "Truss" | "Tension" | "Compression" | "Rigid" | "Cable";
1102
+ /**
1103
+ * @description Request for a modal (natural-frequency) analysis: solve `K·φ = ω²·M·φ` and
1104
+ * report the lowest `num_modes` natural frequencies and mode shapes. Mass comes
1105
+ * from the structural self-mass (`density · area`), honoring the per-member
1106
+ * `weight` override (a gravity force per unit length, so mass/length =
1107
+ * `weight / |gravity_factor|`).
1108
+ */
1109
+ ModalAnalysisSettings: {
1110
+ /** @description Mass-matrix formulation (Consistent default, Lumped optional). */
1111
+ mass_formulation?: components["schemas"]["MassFormulation"];
1112
+ /**
1113
+ * Format: int32
1114
+ * @description Maximum subspace-iteration sweeps. Defaults to 100 when omitted.
1115
+ */
1116
+ max_iterations?: number | null;
1117
+ /**
1118
+ * Format: int32
1119
+ * @description Number of natural modes (lowest frequencies) to extract.
1120
+ */
1121
+ num_modes: number;
1122
+ /**
1123
+ * Format: double
1124
+ * @description Eigen convergence tolerance (relative change in the tracked eigenvalues
1125
+ * between subspace sweeps). Defaults to 1e-6 when omitted.
1126
+ */
1127
+ tolerance?: number | null;
1128
+ };
1129
+ /**
1130
+ * @description Modal combination rule for MRSA.
1131
+ * @enum {string}
1132
+ */
1133
+ ModalCombination: "CQC" | "SRSS";
1134
+ /**
1135
+ * @description Results of a modal (natural-frequency) analysis: the lowest natural modes of
1136
+ * the structure, sorted by ascending frequency.
1137
+ *
1138
+ * All quantities are SI / time-based and therefore independent of the model's
1139
+ * length and force units: frequencies in hertz, periods in seconds, masses in
1140
+ * kilograms. Mode shapes are normalized so the largest translational component
1141
+ * equals 1 (a unit-free shape); the generalized mass and effective modal mass
1142
+ * are reported separately for response-spectrum / participation work.
1143
+ */
1144
+ ModalResults: {
1145
+ modes: components["schemas"]["ModeShape"][];
1146
+ };
1147
+ /** @description A single natural vibration mode. */
1148
+ ModeShape: {
1149
+ /**
1150
+ * Format: double
1151
+ * @description Angular frequency `ω` (rad/s).
1152
+ */
1153
+ angular_frequency: number;
1154
+ /**
1155
+ * @description Mode shape: per-node displacement pattern (normalized so the largest
1156
+ * translational component is 1).
1157
+ */
1158
+ displacements: {
1159
+ [key: string]: components["schemas"]["NodeDisplacement"];
1160
+ };
1161
+ /**
1162
+ * @description Effective modal mass per global direction `[X, Y, Z, RX, RY, RZ]`
1163
+ * (`Γ² / (φᵀ·M·φ)`, in kg). The sum across modes approaches the total
1164
+ * free mass of the structure in each direction.
1165
+ */
1166
+ effective_mass: number[];
1167
+ /**
1168
+ * Format: double
1169
+ * @description Eigenvalue `ω²` (rad²/s²).
1170
+ */
1171
+ eigenvalue: number;
1172
+ /**
1173
+ * Format: double
1174
+ * @description Generalized (modal) mass `φᵀ·M·φ` (kg) for the reported, max-translation
1175
+ * normalized shape.
1176
+ */
1177
+ modal_mass: number;
1178
+ /**
1179
+ * Format: int32
1180
+ * @description 1-based mode number (1 = lowest frequency).
1181
+ */
1182
+ mode: number;
1183
+ /**
1184
+ * Format: double
1185
+ * @description Natural frequency `f = ω / 2π` (Hz).
1186
+ */
1187
+ natural_frequency: number;
1188
+ /**
1189
+ * @description Modal participation factor per global direction
1190
+ * `[X, Y, Z, RX, RY, RZ]` (`Γ = φᵀ·M·r`).
1191
+ */
1192
+ participation_factors: number[];
1193
+ /**
1194
+ * Format: double
1195
+ * @description Period `T = 1 / f` (s).
1196
+ */
1197
+ period: number;
1198
+ };
1199
+ /**
1200
+ * @description The structural model: nodes, members, plates and their supporting
1201
+ * definitions (materials, sections, supports, hinges, shape paths).
1202
+ */
1203
+ Model: {
1204
+ materials: components["schemas"]["Material"][];
1205
+ /** @default [] */
1206
+ member_hinges: components["schemas"]["MemberHinge"][];
1207
+ member_sets: components["schemas"]["MemberSet"][];
1208
+ /** @description Single source of truth for member objects. Member sets reference these by id. */
1209
+ members: components["schemas"]["Member"][];
1210
+ nodal_supports: components["schemas"]["NodalSupport"][];
1211
+ nodes: components["schemas"]["Node"][];
1212
+ /** @default [] */
1213
+ plate_elements: components["schemas"]["PlateElement"][];
1214
+ /** @default [] */
1215
+ plate_surfaces: components["schemas"]["PlateSurface"][];
1216
+ sections: components["schemas"]["Section"][];
1217
+ /** @default [] */
1218
+ shape_paths: components["schemas"]["ShapePath"][];
1219
+ /** @default {} */
1220
+ workspace: components["schemas"]["Workspace"];
1221
+ };
1222
+ /** @description Modal response spectrum analysis results (§4.3.3.3). */
1223
+ MrsaResults: {
1224
+ /** @description Final envelope after directional combination. */
1225
+ combined: components["schemas"]["Results"];
1226
+ /** @description Per excitation direction (base shear, modal-mass table, per-direction envelope). */
1227
+ per_direction: components["schemas"]["SeismicDirectionResult"][];
1228
+ };
1229
+ /** @description A concentrated force applied at a node. */
1230
+ NodalLoad: {
1231
+ direction: components["schemas"]["Vector3"];
1232
+ /** Format: int32 */
1233
+ id: number;
1234
+ load_type: components["schemas"]["LoadType"];
1235
+ /** Format: double */
1236
+ magnitude: number;
1237
+ /** Format: int32 */
1238
+ node: number;
1239
+ };
1240
+ /** @description A concentrated moment applied at a node. */
1241
+ NodalMoment: {
1242
+ direction: components["schemas"]["Vector3"];
1243
+ /** Format: int32 */
1244
+ id: number;
1245
+ load_type: components["schemas"]["LoadType"];
1246
+ /** Format: double */
1247
+ magnitude: number;
1248
+ /** Format: int32 */
1249
+ node: number;
1250
+ };
1251
+ /**
1252
+ * @description Boundary conditions at a node: per-axis translation/rotation conditions plus
1253
+ * optional warping. Each condition is in the **global** frame; an absent
1254
+ * (`None`) field means that DOF is free.
1255
+ */
1256
+ NodalSupport: {
1257
+ RX?: null | components["schemas"]["SupportCondition"];
1258
+ RY?: null | components["schemas"]["SupportCondition"];
1259
+ RZ?: null | components["schemas"]["SupportCondition"];
1260
+ X?: null | components["schemas"]["SupportCondition"];
1261
+ Y?: null | components["schemas"]["SupportCondition"];
1262
+ Z?: null | components["schemas"]["SupportCondition"];
1263
+ /** @description Free-text label for the modeler/UI; not used by the solver. */
1264
+ classification?: string | null;
1265
+ /** Format: int32 */
1266
+ id: number;
1267
+ warping_condition?: null | components["schemas"]["SupportCondition"];
1268
+ };
1269
+ /** @description A model node with global coordinates and an optional support. */
1270
+ Node: {
1271
+ /** Format: double */
1272
+ X: number;
1273
+ /** Format: double */
1274
+ Y: number;
1275
+ /** Format: double */
1276
+ Z: number;
1277
+ /** Format: int32 */
1278
+ id: number;
1279
+ /** Format: int32 */
1280
+ nodal_support?: number | null;
1281
+ };
1282
+ /** @description Nodal displacement result (translations, rotations and warping). */
1283
+ NodeDisplacement: {
1284
+ /** Format: double */
1285
+ dx: number;
1286
+ /** Format: double */
1287
+ dy: number;
1288
+ /** Format: double */
1289
+ dz: number;
1290
+ /** Format: double */
1291
+ rx: number;
1292
+ /** Format: double */
1293
+ ry: number;
1294
+ /** Format: double */
1295
+ rz: number;
1296
+ /** Format: double */
1297
+ warp?: number;
1298
+ };
1299
+ /**
1300
+ * @description A 6-DOF force/moment set (plus warping bimoment) in a given frame (global or
1301
+ * member-local, set by the field that owns it). Axial is tension-positive.
1302
+ */
1303
+ NodeForces: {
1304
+ /**
1305
+ * Format: double
1306
+ * @description Warping bimoment ([F·L²]).
1307
+ */
1308
+ bw?: number;
1309
+ /**
1310
+ * Format: double
1311
+ * @description Axial force (tension-positive).
1312
+ */
1313
+ fx: number;
1314
+ /**
1315
+ * Format: double
1316
+ * @description Shear force about the local/global y axis.
1317
+ */
1318
+ fy: number;
1319
+ /**
1320
+ * Format: double
1321
+ * @description Shear force about the local/global z axis.
1322
+ */
1323
+ fz: number;
1324
+ /**
1325
+ * Format: double
1326
+ * @description Torsional moment about the x axis.
1327
+ */
1328
+ mx: number;
1329
+ /**
1330
+ * Format: double
1331
+ * @description Bending moment about the y axis.
1332
+ */
1333
+ my: number;
1334
+ /**
1335
+ * Format: double
1336
+ * @description Bending moment about the z axis.
1337
+ */
1338
+ mz: number;
1339
+ };
1340
+ /** @description A node's global coordinates within a result. */
1341
+ NodeLocation: {
1342
+ /** Format: double */
1343
+ X: number;
1344
+ /** Format: double */
1345
+ Y: number;
1346
+ /** Format: double */
1347
+ Z: number;
1348
+ };
1349
+ /**
1350
+ * @description Controls the nonlinear formulation used for second-order analysis.
1351
+ *
1352
+ * - **PDelta**: Total-Lagrangian P-Δ. Geometric stiffness is added to the
1353
+ * original-frame elastic stiffness. This is the approach used by most
1354
+ * commercial solvers. Accurate for moderate
1355
+ * rotations (< ~10°) but increasingly approximate for larger rotations.
1356
+ *
1357
+ * - **Corotational** (default): Load-incremental corotational Newton-Raphson.
1358
+ * The element frame tracks the deformed geometry, so internal forces and
1359
+ * equilibrium are self-consistent even for large rotations (> 15°).
1360
+ * For small rotations the results converge to P-Delta.
1361
+ *
1362
+ * Python:
1363
+ * class NonlinearMethod(Enum):
1364
+ * P_DELTA = "P_DELTA"
1365
+ * COROTATIONAL = "COROTATIONAL"
1366
+ * @enum {string}
1367
+ */
1368
+ NonlinearMethod: "P_DELTA" | "COROTATIONAL";
1369
+ /**
1370
+ * @description Orthotropic in-plane/bending material properties for plates, expressed in the
1371
+ * plate's local axes (x = `local_x_direction`, y in-plane perpendicular).
1372
+ */
1373
+ OrthotropicPlateMaterial: {
1374
+ /**
1375
+ * Format: double
1376
+ * @description Young's modulus along local x.
1377
+ */
1378
+ e_x: number;
1379
+ /**
1380
+ * Format: double
1381
+ * @description Young's modulus along local y.
1382
+ */
1383
+ e_y: number;
1384
+ /**
1385
+ * Format: double
1386
+ * @description In-plane shear modulus.
1387
+ */
1388
+ g_xy: number;
1389
+ /**
1390
+ * Format: double
1391
+ * @description Transverse shear modulus (x–z); used by Mindlin/thick plates.
1392
+ */
1393
+ g_xz?: number | null;
1394
+ /**
1395
+ * Format: double
1396
+ * @description Transverse shear modulus (y–z); used by Mindlin/thick plates.
1397
+ */
1398
+ g_yz?: number | null;
1399
+ /**
1400
+ * Format: double
1401
+ * @description Major Poisson's ratio (ν_xy); ν_yx is derived from `e_x·ν_yx = e_y·ν_xy`.
1402
+ */
1403
+ nu_xy: number;
1404
+ };
1405
+ /**
1406
+ * @description The kind of drawing operation a [`ShapeCommand`] performs.
1407
+ * @enum {string}
1408
+ */
1409
+ PathCommand: "moveTo" | "lineTo" | "arcTo" | "closePath";
1410
+ /**
1411
+ * @description Controls the geometric stiffness (K_g) formulation for P-Delta analysis.
1412
+ *
1413
+ * - **Consistent** (default): Full Przemieniecki K_g with 6/5·P/L translation
1414
+ * terms, bending-axial rotational coupling (P/10, PL/15, PL/30), and
1415
+ * Wagner torsion. Most accurate near buckling and for lateral-torsional
1416
+ * stability; captures both global P-Δ and local P-δ effects.
1417
+ *
1418
+ * - **Simplified**: Diagonal P/L terms for transverse translations only —
1419
+ * no rotational coupling, no Wagner torsion. Matches the P-Delta
1420
+ * formulation used by most commercial solvers.
1421
+ * Captures global P-Δ (sway) but not local P-δ (member curvature).
1422
+ *
1423
+ * Python:
1424
+ * class PdeltaFormulation(Enum):
1425
+ * CONSISTENT = "CONSISTENT"
1426
+ * SIMPLIFIED = "SIMPLIFIED"
1427
+ * @enum {string}
1428
+ */
1429
+ PdeltaFormulation: "CONSISTENT" | "SIMPLIFIED";
1430
+ /**
1431
+ * @description Controls the P-Delta amplification strategy.
1432
+ *
1433
+ * - **Full** (default): All 3D translational directions are amplified by
1434
+ * geometric stiffness. Most rigorous for general 3D structures.
1435
+ *
1436
+ * - **InPlaneOnly**: Automatically detects the structural plane from the
1437
+ * model's bounding box and suppresses P-Delta amplification in the
1438
+ * thinnest (out-of-plane) direction. Matches the in-plane-only sway
1439
+ * approach used by most commercial solvers.
1440
+ * If the model is truly 3D (all three axes have similar extent), no
1441
+ * axis is suppressed.
1442
+ *
1443
+ * Python:
1444
+ * class PdeltaMode(Enum):
1445
+ * FULL = "FULL"
1446
+ * IN_PLANE_ONLY = "IN_PLANE_ONLY"
1447
+ * @enum {string}
1448
+ */
1449
+ PdeltaMode: "FULL" | "IN_PLANE_ONLY";
1450
+ /**
1451
+ * @description In-plane (membrane) constitutive assumption.
1452
+ * @enum {string}
1453
+ */
1454
+ PlaneState: "PlaneStress" | "PlaneStrain";
1455
+ /**
1456
+ * @description Structural behavior of a plate.
1457
+ *
1458
+ * - `Shell` (default): in-plane (membrane) + out-of-plane (bending) behavior.
1459
+ * - `Membrane`: in-plane only; useful for panels, diaphragms, or fabric-like
1460
+ * surfaces. Bending stiffness and bending resultants are suppressed.
1461
+ * @enum {string}
1462
+ */
1463
+ PlateBehavior: "Shell" | "Membrane";
1464
+ /** @description A generated finite element of a plate mesh (3-node triangle or 4-node quad). */
1465
+ PlateElement: {
1466
+ /** @default Shell */
1467
+ behavior: components["schemas"]["PlateBehavior"];
1468
+ /** Format: int32 */
1469
+ id: number;
1470
+ local_x_direction?: components["schemas"]["Vector3"];
1471
+ /** Format: int32 */
1472
+ material: number;
1473
+ /** @description Element connectivity: 3 nodes (triangle) or 4 nodes (quad). */
1474
+ node_ids: number[];
1475
+ /**
1476
+ * Format: double
1477
+ * @description Distance from the reference surface along the local plate normal.
1478
+ * @default 0
1479
+ */
1480
+ offset: number;
1481
+ /**
1482
+ * @description In-plane constitutive assumption (plane stress/strain).
1483
+ * @default PlaneStress
1484
+ */
1485
+ plane_state: components["schemas"]["PlaneState"];
1486
+ /**
1487
+ * Format: int32
1488
+ * @description The `PlateSurface` this element was meshed from, if any.
1489
+ */
1490
+ source_surface_id?: number | null;
1491
+ stiffness_modifiers?: null | components["schemas"]["PlateStiffnessModifiers"];
1492
+ /**
1493
+ * @description Finite-element theory (thin/thick/auto).
1494
+ * @default Auto
1495
+ */
1496
+ theory: components["schemas"]["PlateTheory"];
1497
+ /** Format: double */
1498
+ thickness: number;
1499
+ };
1500
+ /**
1501
+ * @description Preferred generated element shape when meshing a [`super::platesurface::PlateSurface`].
1502
+ * @enum {string}
1503
+ */
1504
+ PlateElementShape: "Auto" | "Triangle" | "Quad";
1505
+ /** @description Division counts for a structured (u, v) mesh. */
1506
+ PlateMeshDivisions: {
1507
+ /** Format: int32 */
1508
+ u: number;
1509
+ /** Format: int32 */
1510
+ v: number;
1511
+ };
1512
+ /**
1513
+ * @description Meshing algorithm for a plate surface.
1514
+ *
1515
+ * - `Auto`: solver chooses (currently Delaunay).
1516
+ * - `Structured`: transfinite quad grid; requires a 4-edge boundary and
1517
+ * [`PlateMeshDivisions`].
1518
+ * - `Unstructured`: force the Delaunay mesher.
1519
+ * @enum {string}
1520
+ */
1521
+ PlateMeshMethod: "Auto" | "Structured" | "Unstructured";
1522
+ /** @description Mesh generation settings for a plate surface. */
1523
+ PlateMeshSettings: {
1524
+ divisions?: null | components["schemas"]["PlateMeshDivisions"];
1525
+ /** @default Auto */
1526
+ element_shape: components["schemas"]["PlateElementShape"];
1527
+ /** @default Auto */
1528
+ method: components["schemas"]["PlateMeshMethod"];
1529
+ /**
1530
+ * Format: double
1531
+ * @description Target element edge length. `None` meshes the boundary as-is (no interior
1532
+ * refinement).
1533
+ */
1534
+ target_size?: number | null;
1535
+ };
1536
+ /**
1537
+ * @description A hole in a plate surface. The mesher generates elements around it; the
1538
+ * opening's boundary is part of the original surface geometry, not the elements.
1539
+ */
1540
+ PlateOpening: {
1541
+ /** @description Hole boundary (≥ 3 existing model nodes). */
1542
+ boundary_node_ids: number[];
1543
+ /** Format: int32 */
1544
+ id: number;
1545
+ };
1546
+ /**
1547
+ * @description A pressure load applied directly to a modeled plate surface or a single
1548
+ * generated plate element. Distinct from [`super::surfaceload::SurfaceLoad`],
1549
+ * which applies a load over an arbitrary polygon.
1550
+ */
1551
+ PlatePressure: {
1552
+ direction: components["schemas"]["Vector3"];
1553
+ /** Format: int32 */
1554
+ id: number;
1555
+ /** Format: double */
1556
+ magnitude: number;
1557
+ /**
1558
+ * @description When true the pressure acts on the area projected onto `direction`
1559
+ * (e.g. snow), otherwise on the true element area.
1560
+ * @default false
1561
+ */
1562
+ projected: boolean;
1563
+ /** @description What the pressure is applied to — exactly one of a surface or an element. */
1564
+ target: components["schemas"]["PlatePressureTarget"];
1565
+ };
1566
+ /**
1567
+ * @description The target of a [`PlatePressure`]. A tagged union so exactly one target kind
1568
+ * is set (replaces the previous pair of nullable ids).
1569
+ */
1570
+ PlatePressureTarget: {
1571
+ /** @enum {string} */
1572
+ kind: "Surface";
1573
+ /** Format: int32 */
1574
+ surface_id: number;
1575
+ } | {
1576
+ /** @enum {string} */
1577
+ kind: "Element";
1578
+ /** Format: int32 */
1579
+ plate_element_id: number;
1580
+ };
1581
+ /** @description Per-plate-element result (stress resultants). */
1582
+ PlateResult: {
1583
+ centroid: components["schemas"]["NodeLocation"];
1584
+ centroid_displacement_global: components["schemas"]["NodeDisplacement"];
1585
+ centroid_displacement_local: components["schemas"]["NodeDisplacement"];
1586
+ nodal_forces_global: {
1587
+ [key: string]: components["schemas"]["NodeForces"];
1588
+ };
1589
+ /** Format: int32 */
1590
+ plate_id: number;
1591
+ resultants: components["schemas"]["PlateResultants"];
1592
+ };
1593
+ /** @description Plate stress resultants: membrane forces, bending moments and transverse shears. */
1594
+ PlateResultants: {
1595
+ /** Format: double */
1596
+ mx: number;
1597
+ /** Format: double */
1598
+ mxy: number;
1599
+ /** Format: double */
1600
+ my: number;
1601
+ /** Format: double */
1602
+ nx: number;
1603
+ /** Format: double */
1604
+ nxy: number;
1605
+ /** Format: double */
1606
+ ny: number;
1607
+ /** Format: double */
1608
+ qx: number;
1609
+ /** Format: double */
1610
+ qy: number;
1611
+ };
1612
+ /**
1613
+ * @description Optional per-plate stiffness scale factors (e.g. cracked-concrete, composite
1614
+ * or reduced-stiffness modeling). Each defaults to `1.0` (unmodified).
1615
+ */
1616
+ PlateStiffnessModifiers: {
1617
+ /** Format: double */
1618
+ bending?: number;
1619
+ /** Format: double */
1620
+ membrane?: number;
1621
+ /** Format: double */
1622
+ shear?: number;
1623
+ };
1624
+ /**
1625
+ * @description A plate-element stress measure (FEM/plate checks).
1626
+ * @enum {string}
1627
+ */
1628
+ PlateStressMeasure: "VonMises" | "PrincipalMax" | "PrincipalMin";
1629
+ /**
1630
+ * @description A user-modeled plate surface (slab / wall / panel) that is meshed into
1631
+ * [`super::plateelement::PlateElement`]s by the solver.
1632
+ */
1633
+ PlateSurface: {
1634
+ /** @default Shell */
1635
+ behavior: components["schemas"]["PlateBehavior"];
1636
+ /** @description Outer boundary, referencing existing model nodes (counter-clockwise). */
1637
+ boundary_node_ids: number[];
1638
+ classification?: string | null;
1639
+ /**
1640
+ * @description Ids of the plate elements generated from this surface. Populated by the
1641
+ * mesher; any input value is ignored (derived from element
1642
+ * `source_surface_id`).
1643
+ * @default []
1644
+ */
1645
+ readonly generated_plate_element_ids: number[];
1646
+ /** Format: int32 */
1647
+ id: number;
1648
+ local_x_direction?: components["schemas"]["Vector3"];
1649
+ /** Format: int32 */
1650
+ material: number;
1651
+ mesh?: null | components["schemas"]["PlateMeshSettings"];
1652
+ /**
1653
+ * Format: int32
1654
+ * @description Surfaces sharing a `mesh_group_id` are meshed together so coincident
1655
+ * boundary nodes are shared between them.
1656
+ */
1657
+ mesh_group_id?: number | null;
1658
+ name?: string | null;
1659
+ /**
1660
+ * Format: double
1661
+ * @description Distance from the reference surface along the local plate normal.
1662
+ * @default 0
1663
+ */
1664
+ offset: number;
1665
+ /**
1666
+ * @description Holes in the surface; the mesher generates elements around them.
1667
+ * @default []
1668
+ */
1669
+ openings: components["schemas"]["PlateOpening"][];
1670
+ /**
1671
+ * @description In-plane constitutive assumption (plane stress/strain).
1672
+ * @default PlaneStress
1673
+ */
1674
+ plane_state: components["schemas"]["PlaneState"];
1675
+ stiffness_modifiers?: null | components["schemas"]["PlateStiffnessModifiers"];
1676
+ /**
1677
+ * @description Finite-element theory (thin/thick/auto).
1678
+ * @default Auto
1679
+ */
1680
+ theory: components["schemas"]["PlateTheory"];
1681
+ /** Format: double */
1682
+ thickness: number;
1683
+ };
1684
+ /**
1685
+ * @description Plate finite-element theory.
1686
+ *
1687
+ * - `Kirchhoff`: thin-plate (no transverse shear deformation). Current default
1688
+ * formulation (DKT bending element).
1689
+ * - `Mindlin`: thick-plate (Reissner–Mindlin, includes transverse shear).
1690
+ * - `Auto`: the solver chooses based on span/thickness.
1691
+ * @enum {string}
1692
+ */
1693
+ PlateTheory: "Auto" | "Mindlin" | "Kirchhoff";
1694
+ /** @enum {string} */
1695
+ PressureUnit: "Pa" | "kPa" | "MPa" | "GPa";
1696
+ /** @description A bindable quantity — the source of a `{{variable}}` in a unity-check formula. */
1697
+ QuantitySource: {
1698
+ /**
1699
+ * @description A local member force, reduced by `aggregation` and enveloped over the
1700
+ * check's applicable load combinations.
1701
+ */
1702
+ MemberForce: {
1703
+ aggregation?: components["schemas"]["Aggregation"];
1704
+ component: components["schemas"]["MemberForceComponent"];
1705
+ of?: components["schemas"]["EntityTarget"];
1706
+ };
1707
+ } | {
1708
+ /** @description A nodal displacement of the entity (member end / governing node). */
1709
+ Displacement: {
1710
+ component: components["schemas"]["DispComponent"];
1711
+ };
1712
+ } | {
1713
+ /**
1714
+ * @description Displacement (or rotation) of a node named relative to the entity — its own
1715
+ * ends, or the paired member/node via `reference_member` / `reference_node`.
1716
+ * Compose two of these for relative drift / differential settlement.
1717
+ */
1718
+ NodeDisplacement: {
1719
+ at: components["schemas"]["EntityNodeRef"];
1720
+ component: components["schemas"]["DispComponent"];
1721
+ };
1722
+ } | {
1723
+ /**
1724
+ * @description Deflected position (undeformed coordinate + displacement) of a node named
1725
+ * relative to the entity, along a global axis. For clearance / "below a line"
1726
+ * checks: compare two positions to get the deflected gap.
1727
+ */
1728
+ NodePosition: {
1729
+ at: components["schemas"]["EntityNodeRef"];
1730
+ axis: components["schemas"]["Axis"];
1731
+ };
1732
+ } | {
1733
+ /**
1734
+ * @description Transverse deflection relative to the entity's end-to-end chord
1735
+ * (support-to-support for a member-set). Removes support settlement and rigid
1736
+ * chord rotation, leaving the member's own sag — the quantity SLS deflection
1737
+ * limits (e.g. `span/200`) are written against. The deflected shape is
1738
+ * reconstructed by cubic Hermite interpolation and reduced by `aggregation`.
1739
+ */
1740
+ MemberDeflection: {
1741
+ aggregation?: components["schemas"]["Aggregation"];
1742
+ component: components["schemas"]["DeflectionComponent"];
1743
+ };
1744
+ } | {
1745
+ /** @description A property of the entity's (or its reference member's) section. */
1746
+ Section: {
1747
+ of?: components["schemas"]["EntityTarget"];
1748
+ property: components["schemas"]["SectionProperty"];
1749
+ };
1750
+ } | {
1751
+ /** @description A property of the entity's (or its reference member's) material. */
1752
+ Material: {
1753
+ of?: components["schemas"]["EntityTarget"];
1754
+ property: components["schemas"]["MaterialProperty"];
1755
+ };
1756
+ } | {
1757
+ /** @description A geometric quantity of the entity (or its reference member). */
1758
+ Geometry: {
1759
+ of?: components["schemas"]["EntityTarget"];
1760
+ property: components["schemas"]["GeometryProperty"];
1761
+ };
1762
+ } | {
1763
+ /** @description A plate-element stress measure (for plate-targeted checks). */
1764
+ PlateStress: {
1765
+ measure: components["schemas"]["PlateStressMeasure"];
1766
+ };
1767
+ } | {
1768
+ /**
1769
+ * Format: double
1770
+ * @description A literal, dimensionless constant — rendered raw (no unit, no scaling) in
1771
+ * the report trace. Use [`QuantitySource::DimensionedConstant`] instead when
1772
+ * the constant is compared against a dimensioned quantity (a moment capacity,
1773
+ * a deflection limit, …) so the trace stays unit-consistent.
1774
+ */
1775
+ Constant: number;
1776
+ } | {
1777
+ /**
1778
+ * @description A literal constant tagged with its physical [`ConstantDimension`]. The
1779
+ * `value` is given in **SI** units for that dimension; the report trace then
1780
+ * scales and labels it exactly like the quantities it is compared against, so
1781
+ * the `substituted` arithmetic stays consistent with the computed value and
1782
+ * both sides of a demand/capacity ratio share a unit. (A moment capacity of
1783
+ * 2 kN·m → `{ value: 2000.0, dimension: "Moment" }`.)
1784
+ */
1785
+ DimensionedConstant: {
1786
+ dimension: components["schemas"]["ConstantDimension"];
1787
+ /** Format: double */
1788
+ value: number;
1789
+ };
1790
+ };
1791
+ /** @description Support reaction at a node (forces, location and support id). */
1792
+ ReactionNodeResult: {
1793
+ location: components["schemas"]["NodeLocation"];
1794
+ nodal_forces: components["schemas"]["NodeForces"];
1795
+ /** Format: int32 */
1796
+ support_id: number;
1797
+ };
1798
+ /**
1799
+ * @description Design response spectrum definition. Externally tagged: exactly one of the
1800
+ * three variants.
1801
+ */
1802
+ ResponseSpectrum: {
1803
+ /**
1804
+ * @description EN 1998-1 parametric: shape parameters (S, Tb, Tc, Td) are looked up from
1805
+ * the ground type + spectrum type, scaled by `ag` and the behaviour factor
1806
+ * `q`.
1807
+ */
1808
+ EurocodeParametric: {
1809
+ /**
1810
+ * Format: double
1811
+ * @description Design ground acceleration on type-A ground, `a_g = γ_I·a_gR` [m/s²].
1812
+ */
1813
+ ag: number;
1814
+ /**
1815
+ * Format: double
1816
+ * @description Lower-bound factor `β` for the design spectrum (default 0.2).
1817
+ */
1818
+ beta?: number;
1819
+ ground_type: components["schemas"]["GroundType"];
1820
+ /**
1821
+ * Format: double
1822
+ * @description Behaviour factor `q` (≥ 1).
1823
+ */
1824
+ q: number;
1825
+ spectrum_type: components["schemas"]["SpectrumType"];
1826
+ };
1827
+ } | {
1828
+ /** @description Direct spectrum parameters (no preset lookup); national-annex agnostic. */
1829
+ DirectParameters: {
1830
+ /** Format: double */
1831
+ ag: number;
1832
+ /** Format: double */
1833
+ beta?: number;
1834
+ /** Format: double */
1835
+ q: number;
1836
+ /** Format: double */
1837
+ s: number;
1838
+ /** Format: double */
1839
+ tb: number;
1840
+ /** Format: double */
1841
+ tc: number;
1842
+ /** Format: double */
1843
+ td: number;
1844
+ };
1845
+ } | {
1846
+ /**
1847
+ * @description Arbitrary `(period, spectral_acceleration)` table [s, m/s²], linearly
1848
+ * interpolated (clamped beyond the ends).
1849
+ */
1850
+ CustomPoints: {
1851
+ points: number[][];
1852
+ };
1853
+ };
1854
+ ResultType: {
1855
+ /** Format: int32 */
1856
+ Loadcase: number;
1857
+ } | {
1858
+ /** Format: int32 */
1859
+ Loadcombination: number;
1860
+ };
1861
+ /** @description Results for a single load case or combination: displacements, reactions, member and plate results. */
1862
+ Results: {
1863
+ displacement_nodes: {
1864
+ [key: string]: components["schemas"]["NodeDisplacement"];
1865
+ };
1866
+ /**
1867
+ * @description Solver diagnostics (errors/warnings) for this load case/combination.
1868
+ * Empty in the common case.
1869
+ */
1870
+ errors_and_warnings?: components["schemas"]["ErrorsAndWarnings"];
1871
+ member_results: {
1872
+ [key: string]: components["schemas"]["MemberResult"];
1873
+ };
1874
+ name: string;
1875
+ plate_results?: {
1876
+ [key: string]: components["schemas"]["PlateResult"];
1877
+ };
1878
+ reaction_nodes: {
1879
+ [key: string]: components["schemas"]["ReactionNodeResult"];
1880
+ };
1881
+ result_type: components["schemas"]["ResultType"];
1882
+ /**
1883
+ * @description How the solve for this load case/combination ran (iterations, time,
1884
+ * convergence). See [`SolverDiagnostics`].
1885
+ */
1886
+ solver_diagnostics?: components["schemas"]["SolverDiagnostics"];
1887
+ summary: components["schemas"]["ResultsSummary"];
1888
+ };
1889
+ /** @description All analysis results: per load case, per load combination, unity-check results and the optional HTML report. */
1890
+ ResultsBundle: {
1891
+ buckling?: null | components["schemas"]["BucklingResults"];
1892
+ loadcases: {
1893
+ [key: string]: components["schemas"]["Results"];
1894
+ };
1895
+ loadcombinations: {
1896
+ [key: string]: components["schemas"]["Results"];
1897
+ };
1898
+ modal?: null | components["schemas"]["ModalResults"];
1899
+ /**
1900
+ * @description Optional single consolidated HTML report (populated only when requested
1901
+ * via the CLI `--report` flag or `AnalysisOptions.include_report_html`).
1902
+ */
1903
+ report_html?: string | null;
1904
+ seismic?: null | components["schemas"]["SeismicResults"];
1905
+ /**
1906
+ * @description Unity-check results (one entry per check definition), enveloped over the
1907
+ * applicable load combinations.
1908
+ * @default []
1909
+ */
1910
+ unity_check_results: components["schemas"]["UnityCheckResult"][];
1911
+ };
1912
+ /** @description Counts of the result quantities produced (displacements, reactions, member/plate forces). */
1913
+ ResultsSummary: {
1914
+ total_displacements: number;
1915
+ total_member_forces: number;
1916
+ total_plate_forces?: number;
1917
+ total_reaction_forces: number;
1918
+ };
1919
+ /** @enum {string} */
1920
+ RigidStrategy: "LinearMpc" | "RigidMember";
1921
+ /** @description A cross-section: area, second moments, torsion/warping constants, shear areas, optional section moduli and EC3 design parameters. */
1922
+ Section: {
1923
+ /**
1924
+ * Format: double
1925
+ * @description Effective shear area in Y-direction (m²). None = no shear deformation (Euler-Bernoulli).
1926
+ */
1927
+ a_sy?: number | null;
1928
+ /**
1929
+ * Format: double
1930
+ * @description Effective shear area in Z-direction (m²). None = no shear deformation (Euler-Bernoulli).
1931
+ */
1932
+ a_sz?: number | null;
1933
+ /** Format: double */
1934
+ area: number;
1935
+ /** Format: double */
1936
+ b?: number | null;
1937
+ /**
1938
+ * Format: double
1939
+ * @description Centroid Y-coordinate within the shape path coordinate system (mm).
1940
+ * Used by the viewer to offset shape-path extrusions so the centroid
1941
+ * aligns with the member node. Not used by the solver.
1942
+ */
1943
+ centroid_y?: number | null;
1944
+ /**
1945
+ * Format: double
1946
+ * @description Centroid Z-coordinate within the shape path coordinate system (mm).
1947
+ */
1948
+ centroid_z?: number | null;
1949
+ ec3?: null | components["schemas"]["Ec3SectionParams"];
1950
+ /** Format: double */
1951
+ h?: number | null;
1952
+ /**
1953
+ * Format: double
1954
+ * @description Warping constant (m⁶). None = no warping (pure St. Venant torsion).
1955
+ */
1956
+ i_w?: number | null;
1957
+ /** Format: double */
1958
+ i_y: number;
1959
+ /**
1960
+ * Format: double
1961
+ * @description Product of inertia about centroidal axes (mm⁴ in JSON, scaled to m⁴ by solver).
1962
+ * Non-zero for asymmetric sections (e.g. angle, C-channel with unequal flanges).
1963
+ * When present and non-zero, the solver auto-detects whether `i_y`/`i_z`
1964
+ * are centroidal or principal values (by checking angle consistency) and
1965
+ * applies or skips the principal-axis rotation accordingly.
1966
+ */
1967
+ i_yz?: number | null;
1968
+ /** Format: double */
1969
+ i_z: number;
1970
+ /** Format: int32 */
1971
+ id: number;
1972
+ /** Format: double */
1973
+ j: number;
1974
+ /** Format: int32 */
1975
+ material: number;
1976
+ name: string;
1977
+ /**
1978
+ * Format: double
1979
+ * @description Angle (degrees) from centroidal to principal axes.
1980
+ * When `i_yz` is absent or zero, this angle is used to rotate the
1981
+ * stiffness matrix from principal to centroidal frame. When `i_yz`
1982
+ * is present, the solver checks whether `i_y`/`i_z` are centroidal
1983
+ * (angle matches formula) or principal (rotation applied).
1984
+ * Positive = counter-clockwise. Default 0.
1985
+ */
1986
+ principal_axis_angle?: number | null;
1987
+ /** Format: int32 */
1988
+ shape_path?: number | null;
1989
+ /**
1990
+ * Format: double
1991
+ * @description Wagner coefficient for lateral-torsional buckling.
1992
+ */
1993
+ wagner_coeff?: number | null;
1994
+ /**
1995
+ * Format: double
1996
+ * @description Elastic section modulus about the y (major) axis (m³). Universal property
1997
+ * (≡ AISC `S_x`); used by unity checks for bending capacity.
1998
+ */
1999
+ wel_y?: number | null;
2000
+ /**
2001
+ * Format: double
2002
+ * @description Elastic section modulus about the z (minor) axis (m³).
2003
+ */
2004
+ wel_z?: number | null;
2005
+ /**
2006
+ * Format: double
2007
+ * @description Plastic section modulus about the y (major) axis (m³, ≡ AISC `Z_x`).
2008
+ */
2009
+ wpl_y?: number | null;
2010
+ /**
2011
+ * Format: double
2012
+ * @description Plastic section modulus about the z (minor) axis (m³).
2013
+ */
2014
+ wpl_z?: number | null;
2015
+ /**
2016
+ * Format: double
2017
+ * @description Shear center Y-coordinate relative to centroid (m).
2018
+ */
2019
+ y_s?: number | null;
2020
+ /**
2021
+ * Format: double
2022
+ * @description Shear center Z-coordinate relative to centroid (m).
2023
+ */
2024
+ z_s?: number | null;
2025
+ };
2026
+ /** @description Forces at an intermediate cross-section along a member, in local member axes. */
2027
+ SectionForce: {
2028
+ /** @description Internal forces at this section, in the member local centroidal frame. */
2029
+ forces: components["schemas"]["NodeForces"];
2030
+ /**
2031
+ * Format: double
2032
+ * @description Fractional position along the member from the start node, in `[0, 1]`.
2033
+ */
2034
+ x_frac: number;
2035
+ };
2036
+ /**
2037
+ * @description A section property (universal; see [`crate::models::members::section::Section`]).
2038
+ * @enum {string}
2039
+ */
2040
+ SectionProperty: "Area" | "Iy" | "Iz" | "J" | "Iw" | "WelY" | "WelZ" | "WplY" | "WplZ" | "H" | "B" | "Asy" | "Asz";
2041
+ /** @description Request for a seismic analysis (MRSA and/or lateral force). */
2042
+ SeismicAnalysisSettings: {
2043
+ /**
2044
+ * Format: double
2045
+ * @description Viscous damping ratio `ξ` for the CQC correlation (default 0.05).
2046
+ * @default 0.05
2047
+ */
2048
+ damping: number;
2049
+ /** @description Directional combination rule (default SRSS). */
2050
+ directional_combination?: components["schemas"]["DirectionalCombination"];
2051
+ /** @description Excitation directions to analyze (default `[X, Y]`). */
2052
+ directions?: components["schemas"]["SeismicDirection"][];
2053
+ /**
2054
+ * @description Include structural self-mass (density·area + weight override) in the
2055
+ * seismic mass. Default true.
2056
+ * @default true
2057
+ */
2058
+ include_structural_mass: boolean;
2059
+ /** @description Structural mass-matrix formulation (Consistent default, Lumped optional). */
2060
+ mass_formulation?: components["schemas"]["MassFormulation"];
2061
+ /** @description Gravity load cases converted to seismic mass (`ΣG + ψE·Q`). */
2062
+ mass_sources?: components["schemas"]["SeismicMassSource"][];
2063
+ /**
2064
+ * Format: int32
2065
+ * @description Maximum subspace-iteration sweeps (default 100).
2066
+ */
2067
+ max_iterations?: number | null;
2068
+ method: components["schemas"]["SeismicMethod"];
2069
+ /** @description Modal combination rule (default CQC). */
2070
+ modal_combination?: components["schemas"]["ModalCombination"];
2071
+ /**
2072
+ * Format: int32
2073
+ * @description Number of vibration modes to extract for MRSA.
2074
+ */
2075
+ num_modes: number;
2076
+ /** @description Design spectrum for the X excitation direction. */
2077
+ spectrum_x: components["schemas"]["ResponseSpectrum"];
2078
+ spectrum_y?: null | components["schemas"]["ResponseSpectrum"];
2079
+ spectrum_z?: null | components["schemas"]["ResponseSpectrum"];
2080
+ /**
2081
+ * Format: double
2082
+ * @description Eigen convergence tolerance (default 1e-6).
2083
+ */
2084
+ tolerance?: number | null;
2085
+ };
2086
+ /**
2087
+ * @description A global excitation direction.
2088
+ * @enum {string}
2089
+ */
2090
+ SeismicDirection: "X" | "Y" | "Z";
2091
+ /** @description Seismic response for a single excitation direction. */
2092
+ SeismicDirectionResult: {
2093
+ /**
2094
+ * Format: double
2095
+ * @description Combined base shear in this direction (force units).
2096
+ */
2097
+ base_shear: number;
2098
+ /** @description Combined response for this direction alone (before directional combination). */
2099
+ combined: components["schemas"]["Results"];
2100
+ direction: components["schemas"]["SeismicDirection"];
2101
+ /** @description Per-mode contributions (empty for the lateral-force method). */
2102
+ modes?: components["schemas"]["SeismicModeContribution"][];
2103
+ /**
2104
+ * Format: double
2105
+ * @description Σ effective modal mass / total mass — the EN 1998-1 §4.3.3.3.1(3) ≥0.90
2106
+ * check (1.0 for the lateral-force method).
2107
+ */
2108
+ participating_mass_ratio: number;
2109
+ /**
2110
+ * Format: double
2111
+ * @description Total seismic mass excited in this direction (kg).
2112
+ */
2113
+ total_seismic_mass: number;
2114
+ };
2115
+ /**
2116
+ * @description A gravity load case that contributes to the seismic mass with a combination
2117
+ * factor (`ψE,i` for variable actions, `1.0` for permanent `G`).
2118
+ */
2119
+ SeismicMassSource: {
2120
+ /** Format: int32 */
2121
+ load_case_id: number;
2122
+ /**
2123
+ * Format: double
2124
+ * @description Combination factor `ψE` (EN 1998-1 §3.2.4 / §4.2.4). Use 1.0 for permanent loads.
2125
+ */
2126
+ psi: number;
2127
+ };
2128
+ /**
2129
+ * @description Which seismic method(s) to run.
2130
+ * @enum {string}
2131
+ */
2132
+ SeismicMethod: "MODAL_RESPONSE_SPECTRUM" | "LATERAL_FORCE" | "BOTH";
2133
+ /** @description A single mode's contribution to the response in one direction. */
2134
+ SeismicModeContribution: {
2135
+ /**
2136
+ * Format: double
2137
+ * @description Modal base shear `Γ²·Sd(T)` (force units).
2138
+ */
2139
+ base_shear: number;
2140
+ /**
2141
+ * Format: double
2142
+ * @description Effective modal mass `Γ²` (kg).
2143
+ */
2144
+ effective_mass: number;
2145
+ /**
2146
+ * Format: double
2147
+ * @description Effective modal mass / total seismic mass in this direction.
2148
+ */
2149
+ effective_mass_ratio: number;
2150
+ /** Format: int32 */
2151
+ mode: number;
2152
+ /**
2153
+ * Format: double
2154
+ * @description Modal participation factor `Γ = φ̂ᵀ·M·r` for this direction (mass-normalized `φ̂`).
2155
+ */
2156
+ participation_factor: number;
2157
+ /**
2158
+ * Format: double
2159
+ * @description Natural period `T = 2π/ω` (s).
2160
+ */
2161
+ period: number;
2162
+ /**
2163
+ * Format: double
2164
+ * @description Design spectral acceleration `Sd(T)` (m/s²).
2165
+ */
2166
+ spectral_acceleration: number;
2167
+ };
2168
+ /**
2169
+ * @description Seismic analysis results (EN 1998-1): modal response spectrum and/or
2170
+ * lateral-force outputs. Forces/displacements/reactions are in the model's
2171
+ * units; periods in seconds, spectral accelerations in m/s², masses in kg.
2172
+ */
2173
+ SeismicResults: {
2174
+ lateral_force?: null | components["schemas"]["LateralForceResults"];
2175
+ modal_response_spectrum?: null | components["schemas"]["MrsaResults"];
2176
+ };
2177
+ /** @description Top-level settings: general project info and the unit system. */
2178
+ Settings: {
2179
+ general_info: components["schemas"]["GeneralInfo"];
2180
+ unit_settings: components["schemas"]["UnitSettings"];
2181
+ };
2182
+ /** @description A single command in a cross-section shape path (move/line/arc). */
2183
+ ShapeCommand: {
2184
+ /** Format: double */
2185
+ center_y?: number | null;
2186
+ /** Format: double */
2187
+ center_z?: number | null;
2188
+ command: components["schemas"]["PathCommand"];
2189
+ /** Format: double */
2190
+ r?: number | null;
2191
+ /** Format: double */
2192
+ theta0?: number | null;
2193
+ /** Format: double */
2194
+ theta1?: number | null;
2195
+ /** Format: double */
2196
+ y?: number | null;
2197
+ /** Format: double */
2198
+ z?: number | null;
2199
+ };
2200
+ /** @description A 2-D cross-section outline (a sequence of shape commands) used for visualization. */
2201
+ ShapePath: {
2202
+ /** Format: int32 */
2203
+ id: number;
2204
+ name: string;
2205
+ shape_commands: components["schemas"]["ShapeCommand"][];
2206
+ };
2207
+ /**
2208
+ * @description Per-result solver run diagnostics: how the solve for this load case /
2209
+ * combination actually ran. Populated best-effort; fields that are not
2210
+ * meaningful for a given solve path are left `None`.
2211
+ */
2212
+ SolverDiagnostics: {
2213
+ /**
2214
+ * @description Effective analysis method used for this result: `"Linear"`,
2215
+ * `"P_DELTA"`, or `"COROTATIONAL"`.
2216
+ */
2217
+ analysis_method?: string | null;
2218
+ /** @description Whether the solve converged. Linear solves report `true`. */
2219
+ converged?: boolean;
2220
+ /**
2221
+ * Format: int32
2222
+ * @description Total nonlinear (Newton-Raphson / corotational) iterations actually
2223
+ * executed, summed across load steps and active-set/correction outer
2224
+ * loops. `None` for purely linear (first-order) solves.
2225
+ */
2226
+ iterations?: number | null;
2227
+ /**
2228
+ * Format: double
2229
+ * @description Final relative residual norm at convergence (nonlinear solves). `None`
2230
+ * for linear solves where no residual is iterated.
2231
+ */
2232
+ residual_norm?: number | null;
2233
+ /**
2234
+ * Format: double
2235
+ * @description Wall-clock solve time for this result, in milliseconds. `None` when the
2236
+ * time is not individually attributable (e.g. a batch first-order solve
2237
+ * that shares one factorization across many load cases).
2238
+ */
2239
+ solve_time_ms?: number | null;
2240
+ };
2241
+ /**
2242
+ * @description A single solver diagnostic: a stable machine-readable `code` plus a
2243
+ * human-readable `message`. Severity is given by the list it belongs to
2244
+ * (`ErrorsAndWarnings::errors` vs `ErrorsAndWarnings::warnings`).
2245
+ */
2246
+ SolverMessage: {
2247
+ code: string;
2248
+ message: string;
2249
+ };
2250
+ /**
2251
+ * @description EN 1998-1 spectrum type: Type 1 (Ms ≥ 5.5, Table 3.2) or Type 2 (Table 3.3).
2252
+ * @enum {string}
2253
+ */
2254
+ SpectrumType: "TYPE1" | "TYPE2";
2255
+ /** @description A single boundary condition (fixed/free/spring) with optional stiffness or stiffness curve. */
2256
+ SupportCondition: {
2257
+ condition_type: components["schemas"]["SupportConditionType"];
2258
+ /** Format: double */
2259
+ stiffness?: number | null;
2260
+ stiffness_curve?: null | components["schemas"]["SupportStiffnessCurve"];
2261
+ };
2262
+ /** @enum {string} */
2263
+ SupportConditionType: "Fixed" | "Free" | "Spring" | "PositiveOnly" | "NegativeOnly";
2264
+ /**
2265
+ * @description Which global reaction component a **support** stiffness curve depends on.
2266
+ *
2267
+ * Supports react in the global coordinate system, so the names are the global
2268
+ * reaction components `Fx/Fy/Fz` (forces) and `Mx/My/Mz` (moments). Distinct
2269
+ * from [`MemberStiffnessCurveDriver`], whose member-local names (`N/Vy/Vz/…`)
2270
+ * apply to member-hinge stiffness curves.
2271
+ * @enum {string}
2272
+ */
2273
+ SupportForceComponent: "Fx" | "Fy" | "Fz" | "Mx" | "My" | "Mz";
2274
+ /**
2275
+ * @description A **support** spring stiffness that varies with a global reaction component.
2276
+ *
2277
+ * `points` is a sorted list of `[force_value, stiffness]` pairs and `depends_on`
2278
+ * is the global reaction component driving the interpolation.
2279
+ */
2280
+ SupportStiffnessCurve: {
2281
+ /** @description Which global reaction component the stiffness depends on. */
2282
+ depends_on: components["schemas"]["SupportForceComponent"];
2283
+ /** @description Sorted `[force_value, stiffness]` pairs (≥ 2 points, positive stiffness). */
2284
+ points: [
2285
+ number,
2286
+ number
2287
+ ][];
2288
+ /**
2289
+ * @description When `true`, the curve is driven by the SIGNED reaction, so tension and
2290
+ * compression can have different stiffness (points may span negative
2291
+ * force). When `false` (default), the curve is driven by `|force|`
2292
+ * (symmetric — the legacy behaviour).
2293
+ */
2294
+ signed?: boolean;
2295
+ };
2296
+ /** @description A pressure load over an arbitrary polygon, distributed onto the underlying members/plates. */
2297
+ SurfaceLoad: {
2298
+ direction: components["schemas"]["Vector3"];
2299
+ distribution_direction?: components["schemas"]["Vector3"];
2300
+ /** Format: int32 */
2301
+ id: number;
2302
+ /** Format: double */
2303
+ magnitude: number;
2304
+ polygon: components["schemas"]["SurfaceLoadVertex"][];
2305
+ };
2306
+ /** @description A vertex of a surface-load polygon, in the **global** frame (`X`, `Y`, `Z`). */
2307
+ SurfaceLoadVertex: {
2308
+ /** Format: double */
2309
+ X: number;
2310
+ /** Format: double */
2311
+ Y: number;
2312
+ /** Format: double */
2313
+ Z: number;
2314
+ };
2315
+ /**
2316
+ * @description A geometric sway (out-of-plumb) imperfection, applied to the whole model as
2317
+ * imperfect initial geometry.
2318
+ *
2319
+ * `magnitude` is the lean angle in **radians** about `axis`. Every node leans
2320
+ * toward the sway direction `axis × height_direction` by
2321
+ * `magnitude · (height above reference_point)`, where height is measured along
2322
+ * `height_direction`. The `height_direction` component is never displaced, so
2323
+ * nodes on the reference plane stay put (no base lift).
2324
+ *
2325
+ * It applies to the entire model for the load combinations its
2326
+ * [`crate::models::imperfections::imperfectioncase::ImperfectionCase`] targets —
2327
+ * there is no per-member targeting; subdividing or grouping members does not
2328
+ * change the result.
2329
+ */
2330
+ SwayImperfection: {
2331
+ /** @description Rotation axis. The sway direction is `axis × height_direction`. */
2332
+ axis: components["schemas"]["Vector3"];
2333
+ /**
2334
+ * @description Direction along which height is measured and which is never displaced
2335
+ * (the structure's "up"). Defaults to global +Y.
2336
+ */
2337
+ height_direction?: components["schemas"]["Vector3"];
2338
+ /**
2339
+ * Format: double
2340
+ * @description Sway (lean) angle in **radians**, applied about `axis`.
2341
+ */
2342
+ magnitude: number;
2343
+ /**
2344
+ * @description A point on the zero-sway plane: the lean is proportional to a node's
2345
+ * height above this point (along `height_direction`). Only a measurement
2346
+ * reference, not a pivot. Defaults to the origin.
2347
+ */
2348
+ reference_point?: components["schemas"]["Vector3"];
2349
+ };
2350
+ /** @description A translational geometric imperfection along an axis, applied to member sets. */
2351
+ TranslationImperfection: {
2352
+ axis: components["schemas"]["Vector3"];
2353
+ /** Format: double */
2354
+ magnitude: number;
2355
+ memberset_ids: number[];
2356
+ };
2357
+ /** @description The model's unit system (length, force, density, pressure) for input and results. */
2358
+ UnitSettings: {
2359
+ /**
2360
+ * @description Unit of every `Material.density`; independent of `lengthUnit`
2361
+ * (a mm/N model may still declare `"kg/m3"`). See [`DensityUnit`].
2362
+ */
2363
+ densityUnit?: components["schemas"]["DensityUnit"];
2364
+ forceUnit?: components["schemas"]["ForceUnit"];
2365
+ lengthUnit?: components["schemas"]["LengthUnit"];
2366
+ pressureUnit?: components["schemas"]["PressureUnit"];
2367
+ system?: components["schemas"]["UnitSystem"];
2368
+ };
2369
+ /**
2370
+ * @description The unit system a model is expressed in.
2371
+ * @enum {string}
2372
+ */
2373
+ UnitSystem: "metric" | "imperial";
2374
+ /** @description One unity check the engineer defines. */
2375
+ UnityCheckDefinition: {
2376
+ applies_to: components["schemas"]["EntitySelector"];
2377
+ description?: string | null;
2378
+ id: string;
2379
+ limit_state?: null | components["schemas"]["LimitState"];
2380
+ /**
2381
+ * @description Restrict to these combination ids (empty = all matching `limit_state`).
2382
+ * @default []
2383
+ */
2384
+ load_combination_ids: number[];
2385
+ name: string;
2386
+ /**
2387
+ * @description Optional narrative report template (authored HTML/markdown). Placeholders are
2388
+ * filled from each entity's computed trace: `{{label}}` → that step's display
2389
+ * string (number + unit) and `{{= expr}}` → `expr` evaluated over the trace
2390
+ * values (display units). Rendered into each `EntityUnityResult.rendered_report`
2391
+ * only when `analysis.options.render_unity_reports` is true.
2392
+ */
2393
+ report_template?: string | null;
2394
+ spec: components["schemas"]["CheckSpec"];
2395
+ /**
2396
+ * @description Utilization colour boundaries [green→yellow, yellow→orange, orange→red].
2397
+ * @default [
2398
+ * 0.8,
2399
+ * 0.95,
2400
+ * 1
2401
+ * ]
2402
+ */
2403
+ thresholds: number[];
2404
+ };
2405
+ /** @description All entity results for one check + the governing (worst) one. */
2406
+ UnityCheckResult: {
2407
+ check_id: string;
2408
+ governing?: null | components["schemas"]["EntityUnityResult"];
2409
+ limit_state?: null | components["schemas"]["LimitState"];
2410
+ /** Format: double */
2411
+ max_utilization: number;
2412
+ name: string;
2413
+ /** @default [] */
2414
+ per_entity: components["schemas"]["EntityUnityResult"][];
2415
+ status: components["schemas"]["UnityStatus"];
2416
+ };
2417
+ /**
2418
+ * @description 4-colour utilization status. Derived from utilization vs the check's
2419
+ * thresholds `[green→yellow, yellow→orange, orange→red]`.
2420
+ * @enum {string}
2421
+ */
2422
+ UnityStatus: "Green" | "Yellow" | "Orange" | "Red";
2423
+ /** @description Binds a friendly placeholder name (used in `{{name}}`) to a value source. */
2424
+ VarBinding: {
2425
+ name: string;
2426
+ source: components["schemas"]["VarSource"];
2427
+ };
2428
+ /**
2429
+ * @description The source of a named formula variable: a catalog quantity, or a
2430
+ * sub-expression over previously-declared variables/quantities.
2431
+ */
2432
+ VarSource: {
2433
+ Quantity: components["schemas"]["QuantitySource"];
2434
+ } | {
2435
+ /** @description An expression string (may reference earlier variable names + functions). */
2436
+ Expression: string;
2437
+ };
2438
+ /**
2439
+ * @description A 3-component vector `[x, y, z]`.
2440
+ *
2441
+ * Shared schema referenced (via `#[schema(value_type = Vector3)]`) by every
2442
+ * direction/axis field so the OpenAPI defines one reusable component instead of
2443
+ * repeating the inline array. The Rust model keeps plain `(f64, f64, f64)`
2444
+ * tuples and the JSON shape is unchanged.
2445
+ */
2446
+ Vector3: [
2447
+ number,
2448
+ number,
2449
+ number
2450
+ ];
2451
+ /** @description A construction axis (origin + direction) for the UI/CAD workspace. */
2452
+ WorkAxis: {
2453
+ /** Format: double */
2454
+ direction_x: number;
2455
+ /** Format: double */
2456
+ direction_y: number;
2457
+ /** Format: double */
2458
+ direction_z: number;
2459
+ /** Format: int32 */
2460
+ id: number;
2461
+ name?: string;
2462
+ /** Format: double */
2463
+ origin_x: number;
2464
+ /** Format: double */
2465
+ origin_y: number;
2466
+ /** Format: double */
2467
+ origin_z: number;
2468
+ };
2469
+ /** @description A construction plane (origin + normal) for the UI/CAD workspace. */
2470
+ WorkPlane: {
2471
+ /** Format: int32 */
2472
+ id: number;
2473
+ name?: string;
2474
+ /** Format: double */
2475
+ normal_x: number;
2476
+ /** Format: double */
2477
+ normal_y: number;
2478
+ /** Format: double */
2479
+ normal_z: number;
2480
+ /** Format: double */
2481
+ origin_x: number;
2482
+ /** Format: double */
2483
+ origin_y: number;
2484
+ /** Format: double */
2485
+ origin_z: number;
2486
+ };
2487
+ /**
2488
+ * @description Calculation-agnostic visualization / CAD helpers (not part of the structural
2489
+ * FE model, but useful for the UI and for grouping entities).
2490
+ */
2491
+ Workspace: {
2492
+ /**
2493
+ * @description Generic, calculation-agnostic entity groups for UI/visualization.
2494
+ * @default []
2495
+ */
2496
+ entity_groups: components["schemas"]["EntityGroup"][];
2497
+ /** @default [] */
2498
+ work_axes: components["schemas"]["WorkAxis"][];
2499
+ /** @default [] */
2500
+ work_planes: components["schemas"]["WorkPlane"][];
2501
+ };
2502
+ };
2503
+ responses: never;
2504
+ parameters: never;
2505
+ requestBodies: never;
2506
+ headers: never;
2507
+ pathItems: never;
2508
+ }
2509
+ export type $defs = Record<string, never>;
2510
+ export type operations = Record<string, never>;
2511
+
2512
+ export type FERS = components['schemas']['FERS'];
2513
+ export type ResultsBundle = components['schemas']['ResultsBundle'];