- Cross-section rows now include maxLengthForVoltageDropM, the inverse of
the voltage-drop formula: the longest single run that stays within the
requested max voltage drop at the given load/cosPhi/phase. Shown as a KPI
and in the ok-summary alert.
- Added PRACTICAL_MINIMUM_CROSS_SECTION_MM2 (2.5 mm² for single_phase
circuits) - a planning convention already named in this projects own
docs/spec/06-future-sizing-and-calculations.md, not a thermal/
voltage-drop requirement. Only ever raises a calculated recommendation,
never lowers one that already needs more. circuitCategory is looked up
from the circuits section and passed through from the editor.
- The manual cross-section field now warns (not blocks - manual override
must stay possible per the same spec doc) when the typed value is not a
standard cross-section, is smaller than the last calculation, or is
below the practical minimum for single_phase circuits.
- Modal title now includes the circuit displayName next to the equipment
identifier.
- Replaced the calculator emoji trigger icon with an inline SVG - the emoji
did not render in at least one tested environment (missing font glyph),
SVG has no such dependency.
- calculateCableSizing now selects cross-section against
designCurrentA = max(operatingCurrentA, existingProtectionRatedCurrentA)
instead of the load current alone. A breaker only trips at its own rated
current (In), so a cable sized for the actual load could overheat under
sustained current below that threshold - the standard In <= Iz rule.
Voltage-drop calculation still uses the real operating current, only the
capacity check changed. Alerts and the ok-summary now name the breaker as
the limiting factor when it is one.
- Added a manual cable type/cross-section entry in the modal itself:
running a calculation pre-fills these fields as a suggestion, but they
are the single field that actually gets applied, and stay editable -
this restores the direct manual-entry capability the modal replaced when
it took over the cableSummary/cableCrossSection cell click.
- Fixed calculator icon position from a trailing ::after (inconsistent
position depending on cell text length, easy to miss on empty cells) to
a fixed-position ::before, so it is always in the same place regardless
of whether cable data is already filled in.
- No new display for the existing protection device - it already has its
own Schutz column in this app.
Isolated module (mirrors src/external-model/ dependency direction) that
adds an on-demand, DIN VDE 0298-4 referenced cable cross-section
calculator: a click-on-a-circuit input mask for laying method,
insulation, ambient temperature, grouping and voltage-drop limit that
suggests a cross-section for the circuit cableCrossSection/cableLength
fields. Applying a suggestion goes through the existing circuit.update
command (expectedRevision, undo/redo) unchanged - nothing here writes
to circuits directly or touches the revision/command system. See
docs/cable-sizing-module.md for the full rationale, API contract,
verification status and maintenance plan. Proposal, not yet reviewed
by the project owner - see the docs file.
423 existing + 11 new tests pass, build:api/build:web/typecheck:scripts
clean.