Add print view, board info card and document logo upload
- Seitenansicht (/projects/:projectId/print): tabular cover page, board overview with supply structure and power sums, one plan per board with a repeating title block; PDF via the browser print dialog with named @page rules (A4 portrait cover, A4/A3 landscape plans, page x of y). - Distribution-board info card (board number, location, fed-from, remark) in the board edit dialog, persisted through the additively extended distribution-board.update command (migration 0008, snapshot schema 6, legacy subtree commands normalized). - Global document logo upload (PNG/JPEG/SVG, max 2 MB) outside project revisions and snapshots. - fed-from stays free text; the overview hierarchy and cumulated sums are preliminary until the feed link is modeled. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
2742b26b87
commit
94688d7a8c
38 changed files with 5301 additions and 32 deletions
53
AGENTS.md
53
AGENTS.md
|
|
@ -250,8 +250,10 @@ not change the project revision or undo/redo stacks. Restoring a server-stored
|
|||
snapshot verifies its checksum and the current-state hash, replaces supported
|
||||
project data atomically and records a new `restore` revision with a complete
|
||||
inverse command. Restore can therefore be undone and redone after a restart.
|
||||
Current snapshot schema version 5 additionally stores the manual quantity share
|
||||
of every CircuitDeviceRow. Version 4 snapshots are upgraded with
|
||||
Current snapshot schema version 6 additionally stores the distribution-board
|
||||
info fields `boardNumber`, `location`, `fedFrom` and `remark`; all older
|
||||
supported versions are upgraded with `null` for these fields. Version 5 stores
|
||||
the manual quantity share of every CircuitDeviceRow. Version 4 snapshots are upgraded with
|
||||
`manualQuantity = quantity`; they already contain the complete confirmed
|
||||
external-model source, import batches, room mappings and objects. Version 3
|
||||
snapshots are upgraded with an empty external-model state; version 2 snapshots
|
||||
|
|
@ -265,7 +267,7 @@ project graph.
|
|||
Project-wide Revit CSV configuration uses
|
||||
`external-csv-configuration.update`. Its complete expected/target snapshot is
|
||||
persisted through the shared project-command transaction, so create, update,
|
||||
delete, Undo and Redo are revision-safe. Snapshot schema 5, restore and portable
|
||||
delete, Undo and Redo are revision-safe. Snapshot schema 5/6, restore and portable
|
||||
project duplication preserve the configuration; duplication remaps its internal
|
||||
id and project link.
|
||||
The project page exposes the Revit CSV modal. It edits the complete
|
||||
|
|
@ -279,7 +281,7 @@ immutable import batches with original bytes plus the classified cell matrix,
|
|||
normalized source-room mappings and external objects unique by
|
||||
`(sourceId, ifcGuid)`. Source values, planning values and overrides are separate.
|
||||
The general external-model repository is read-only; runtime writes belong only
|
||||
to typed command adapters. Snapshot/restore and portable project transfer schema version 5
|
||||
to typed command adapters. Snapshot/restore and portable project transfer schema version 5/6
|
||||
capture the complete external state and remap every internal UUID and link while
|
||||
preserving IFCGUIDs, source values, original bytes and the classified matrix.
|
||||
Import batches additionally store the monotonic project CSV configuration
|
||||
|
|
@ -422,6 +424,18 @@ the only supported circuit-protection source; no flat compatibility fields remai
|
|||
Distribution-board floor assignment and a project-enabled supply type use
|
||||
`distribution-board.update`; both values are snapshot/export fields and one
|
||||
persistent undo step.
|
||||
The same command (still schema version 1, additively extended) carries the
|
||||
board info-card fields `boardNumber`, `location`, `fedFrom` and `remark`
|
||||
(migration `0008`). They are nullable, trimmed planner values; the PUT route
|
||||
only includes submitted info fields in the command and its inverse. An empty
|
||||
board with info values is no longer an unchanged setup, so history deletion of
|
||||
it is rejected like a changed simultaneity factor. Populated-subtree commands
|
||||
stored before these fields existed are normalized to `null` values
|
||||
(`normalizeDistributionBoardSubtreeSnapshot`). `fedFrom` is deliberately free
|
||||
text: the logical link to the feeding board/circuit is an open design decision.
|
||||
These fields are intended to be prefillable from Revit parameters later, but
|
||||
only through the Phase 14 rules (preview, explicit confirmation, no silent
|
||||
overwrite).
|
||||
Floor and room setup uses persistent insert, update and delete commands with
|
||||
complete stable snapshots. Their inverses remove or restore only unchanged records and
|
||||
reject floors with assigned rooms/distribution boards or rooms referenced by
|
||||
|
|
@ -443,6 +457,32 @@ Required operations:
|
|||
- synchronization changes
|
||||
|
||||
|
||||
## Print View (Seitenansicht)
|
||||
|
||||
- Route `src/app/projects/[projectId]/print/page.tsx`, opened from the project
|
||||
page button "Seitenansicht". Read-only: it only uses existing GET endpoints.
|
||||
- Pure read model `src/frontend/print/print-document-model.ts` (tested in
|
||||
`tests/print-document-model.test.ts`); React sheets in
|
||||
`src/frontend/print/print-document.tsx`; styles scoped to `.print-view` in
|
||||
`src/frontend/print/print-document.css`.
|
||||
- Pages: cover (A4 portrait, tabular), board overview with structure and
|
||||
power sums, one plan per board (A4/A3 landscape) whose title block sits in
|
||||
`<thead>` so it repeats on printed pages. PDF export uses the browser print
|
||||
dialog; page size, margins and "Seite x von y" come from injected named
|
||||
`@page` rules (`lb-portrait`, `lb-landscape`).
|
||||
- The board hierarchy and "Σ inkl. unterlagert" in the overview are
|
||||
PRELIMINARY (text match of `fedFrom` against board number/name, plain sum,
|
||||
no upstream simultaneity factor). Replace this once the feed link is modeled.
|
||||
- Colors/fonts are the provisional kbp CD (`--pd-*` variables) until the
|
||||
official CD specification exists. Cover fields shown as "[ergänzen]"
|
||||
(address, Leistungsphase, office staff) have no data model yet.
|
||||
- The document logo is global office branding: table
|
||||
`document_branding_assets` (migration `0008`), endpoints
|
||||
`GET|PUT|DELETE /api/document-branding/logo` and `GET /api/document-branding`.
|
||||
It is intentionally outside project revisions, snapshots and transfer.
|
||||
Uploads are PNG/JPEG/SVG up to 2 MB with a content signature check; the logo
|
||||
is served with `nosniff` and a restrictive CSP.
|
||||
|
||||
## Revit / CSV External Model Work
|
||||
|
||||
When explicitly working on Phase 14, use
|
||||
|
|
@ -538,6 +578,11 @@ Users must be able to override sizing suggestions.
|
|||
- full electrical sizing
|
||||
- multi-user/PostgreSQL operation
|
||||
- supported production deployment
|
||||
- logical feed link between distribution boards (`fedFrom` stays free text
|
||||
until the project owner decides whether it references a board, a feeding
|
||||
circuit or both) and the resulting hierarchical power summation
|
||||
- data model for the remaining print cover fields (address, Leistungsphase,
|
||||
project lead/editor) and the official kbp CD values
|
||||
|
||||
Do not implement these while working on an unrelated phase.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue