Navigation, hierarchy, and the data contract that screens expose. Global IA
in 00-shared/05; components in 00-shared/03. Sources: bulk module source
files, students adapter, users/students services.
Org Admin / Dashboard
└── People (or Admin section per module)
├── Users / Students list (module surfaces)
└── Import & Export ────► Bulk hub (SS1) ← this module
├── SS2 Preview
├── SS3 Confirm
├── SS4 Result / Error review
└── SS5 Export
Entry: one top-level "Import / Export" destination, not buried per-entity;
entity choice is the first decision inside the flow (only students today,
students-import.adapter.ts:15).
entity path param is a free string; only students resolves
(bulk-import.service.ts:17-20). Everything else → 404.
(planned) entities per IMPLEMENTATION_PLAN.md:172: fees, library, exams
(and teachers, by symmetry). Until discovery exists, the client ships a
hard-coded entity list ['students'].
SS2 → SS3 disabled when contract warnings are blocking (08 §1).
SS4 error rows link back to the source file's line number; "re-upload
corrected file" returns to SS2 with the failed rows pre-highlighted by
row number.