SmartInventory / NetworkAccess — Carry-Forward Feature Inventory
Purpose. The definitive, exhaustive, de-duplicated, categorized list of every capability the current SmartInventory / NetworkAccess product supports today, with an explicit carry-forward disposition for each — so the greenfield Lepton Infrastructure Cloud team knows exactly what must be carried forward, what must be redesigned, what becomes tenant configuration, and what to leave behind.
Scope. The generic product on references/SmartInventory-3.0@develop + the live smartinventory_qa DB + the live web UI capture (v8.16.4.0). Synthesis of: Product Specification, WebUI Screen Catalog, WebUI Usage/API Map, Splicing & Entity Forms, Live Entity Grounding, Mobile App Analysis, the 9 database docs, Customer Forks Analysis, and the Legacy Architecture Study. Dispositions are grounded in the Gaps & Improvement Analysis and the “config-not-code” thesis.
Date: 2026-06-18.
How to read the dispositions.
- Carry as-is — core capability; keep the capability (implementation may modernize but the feature is non-negotiable).
- Carry but redesign — keep the capability, rebuild the implementation (note the how, e.g. “schema-driven, not 80 flag columns”; “graph edges, not recursive FK procs”).
- Carry as config — capability becomes tenant configuration / data in the new platform (no per-customer code).
- Drop / do-not-carry — legacy cruft, dead code, or anti-pattern to leave behind (with reason).
1. GIS / Map & Visualization
| Feature | What it does | Evidence | Disposition |
|---|---|---|---|
| Dual basemap (Google or OSM) | Selectable web-mercator basemap under the network overlay | Product Spec §3.6 (MapAuthType=KEY|CLIENT, GoogleMapController); Screen Catalog §2 (si.toggleBaseMap) | Carry as-is (basemap pluggable; MapLibre + PMTiles target) |
| No-map / white canvas | Render entities on a blank canvas (schematic mode) | Screen Catalog §2 (toggleWhiteMap) | Carry as-is |
| Self-hosted MapServer WMS entity overlay | ~58 network layers + landbase rendered as authenticated WMS image tiles | Product Spec §3.6; DB GIS-2 (19 .map files, ~60 vw_*_map views, datashare.inc) | Carry but redesign (server-side vector tiles from the typed model; style-as-data, retire .map files) |
| Per-status symbology (P/A/D) | Distinct icon/color per Planned / As-built / Dormant status | Product Spec §3.6 (symbols.sym, ~270 status-foldered PNGs); Screen Catalog §5.5 LayerIconMapping (196 rows) | Carry as config (icon/style mapping as tenant data — already partly UI-editable) |
| Grouped layer tree + live feature counts | Collapsible NETWORK LAYERS panel grouped by layer_group_master/_mapping, per-layer counts | Screen Catalog §2; DB layer_group_master, layer_group_mapping, ViewLayerGroupsMapping | Carry as config (tree grouping/order is tenant data) |
| Per-layer visibility / select / edit / label toggles + zoom bounds | Show/hide, selectability, editability, labeling, min/max zoom per layer | Screen Catalog §2; DB layer_details (isvisible, minzoomlevel/maxzoomlevel, map_layer_seq) | Carry as config |
| Planned / As-Built / Dormant lifecycle sub-toggles | Filter the map by network status per layer | Screen Catalog §2 (si.handlePrClick, si.handleChClick) | Carry as-is (lifecycle is the real product dimension; network_status P/A/D) |
| Advanced / project-specification filters | Filter the map by project/planning/workorder/purpose code | Screen Catalog §2 (si.GetProjecSpeciFilter); Spec §3.1.11 (BLO) | Carry as-is |
| deck.gl WebGL high-volume vector overlay | GPU vector rendering for large feature sets | Product Spec §3.6 (deck.gl 8.9 + 9.0 bundled); QA-5 | Carry but redesign (single modern stack; one deck.gl/MapLibre version) |
| Client topology / schematic libs (jsts, jsPlumb, d3) | Topology ops, splice editor, schematic trees in-browser | Product Spec §3.6; Splicing doc | Carry but redesign (componentized; one d3/topology stack, not v3+v5) |
| Vector layers + delta sync | Fetch vector data full / geom-filtered with delta sync | Product Spec §3.6 (VectorLayerController); layer_details.is_vector_layer_implemented | Carry but redesign (true delta/sync model; see Mobile) |
| Landbase basemap layers (runtime-built) | Operator-defined reference layers (roads, hydrology, electric utility, etc.) | Screen Catalog §5.8 (landbase_layer_master, landbase_layer_columns_settings); DB 06 | Carry as config (the one true “new layer without code” path — generalize it) |
| Ortho / raster imagery overlay | Overlay georeferenced raster ortho images | Product Spec §3.6 (OrthoImageLayerController); Screen Catalog §5.5 (ViewOrthoImage) | Carry as-is |
| Business layers | Toggle arbitrary business overlays | Product Spec §3.6 (BusinessLayerController, BLLYR) | Carry as config |
| Redline / markup | Point/line/polygon annotations with task workflow (ADD/EDIT/DELETE, assigned-by/to) | Product Spec §3.6 (RDL, RedlineController); Screen Catalog §3.5, dlg-05 | Carry as-is |
| Saved workspaces | Save/restore map workspaces per user | Product Spec §3.6 (WorkSpaceController); Screen Catalog §2 (si.getWorkSpaces) | Carry as-is |
| Map print / print manager | Print map to PDF with templates, by drawn selection shape | Product Spec §3.6 (PrintController, MapLayoutController, PMP, PMM-*); PrintLog/PrintSavedTemplate | Carry but redesign (generic async export/print job framework) |
| Map layout / auto-draw tools | Auto-generate entities within a drawn polygon/square/rectangle | Product Spec §3.1.2 (MAP-LAYOUT, EAD); Screen Catalog §3.1 (si.toggleLayout) | Carry as-is |
| Region/circle navigator | India state→district tree (~2,544) to zoom/scope map; province boundaries | Screen Catalog §3.9; Spec §3.5 (RegionProvinceController) | Carry but redesign (generic admin-geography hierarchy, not India-hardcoded) |
| Point buffer / radius tool | Draw a radius buffer around a point | Screen Catalog §3.1 (si.EnablePointBufferRadius) | Carry as-is |
| Per-user spatial row filtering | Map rows filtered to a user’s permitted geography | Product Spec §6 (user_permission_area, MapServer %Filter%); DB 08 | Carry but redesign (validated filters at tile gateway; not injectable .map placeholders) |
| SRID 4326 throughout | All geometry in WGS84 | Product Spec §3.6; DB 00 §4 | Carry but redesign (typed geometry(…,4326); first-class CRS metadata per layer; reprojection at edge) |
2. Entity / Asset Data Model — the 66-layer entity catalog
The product manages 66 entity types = 66 rows in the layer_details registry (114 columns each; ~80 boolean capability flags). point_master carries 33 entity types, line_master 6, polygon_master 10; the remainder are ISP/abstract layers (DB 00 §3, DB 01). The catalog itself is the product’s core asset. Grouped below.
2.1 The layers (grouped)
| Group | Layers (entity types) | Evidence |
|---|---|---|
| OSP civil / structures (points) | Pole, Manhole, Handhole, Structure/Chamber, Vault, Cabinet, Tree, POI, Central_Office, GI Pipe, Rebar, Reinstatement | DB 00 (point_master: Pole 183k, Structure 142k, Manhole 84k); Spec §4; Screen Catalog §3.1 |
| OSP span / linear (lines) | Cable, Trench, Duct, Microduct, Conduit, PatchCord | DB 00 (line_master: Cable 95k, Duct 94k, Trench 76k); Spec §4 |
| Distribution / splicers | SpliceClosure, SpliceTray, FMS, FDB, FDC, FDP, POD, MPOD, DLC, DP, Coupler, ATB, PatchPanel | DB 01 (is_splicer = 11 layers); DB 04; Spec §4; Screen Catalog §3.1 |
| ISP / indoor (inside-plant) | Building, BldStructure, Floor, Shaft, Room, Rack, WallMount, HTB, ODF (view-only), OpticalRepeater | DB 04 (isp_floor_info 142k, isp_shaft_info 176k); Spec §3.1.7; layer_details.is_isp_layer=20 |
| CPE / customer-edge | ONT/ONU, CPE, Splitter, Customer, FAT | DB 01 (is_cpe_entity=5); Spec §4; Screen Catalog §3.1 |
| Equipment-model hierarchy (templates) | Equipment → Chassis → Slot → Card → Port → Tray (isp_model_*) | DB 04 (isp_model_info, isp_model_rules, isp_model_type_master, isp_base_model, isp_brand_master); Screen Catalog §5.4 |
| Wireless overlay | Antenna, Sector, Tower, TowerPOP, MicrowaveLink, InstallationInfo | Spec §3.9, §4; DB 07 (att_details_tower 85 cols, att_details_microwavelink 114 cols) |
| Planning polygons / boundaries | Area, SubArea, CSA_Boundary, DSA_Boundary, SurveyArea, ROW, RestrictedArea, DemandPoint | DB 00 (polygon_master); DB 05; Screen Catalog §3.1 |
| Landbase (runtime) | Operator-defined landbase layers (Building, Camera, Electric Utility, Hydrology, …) | Screen Catalog §5.8 (landbase_layer_master); DB 06 |
| Logical / connectivity | FiberLink, OSPSplicing, PortInfo, FATConnection, ConnectionInfo (edges) | DB 04; Spec §4 |
| Commercial / ops | Fault, MaintenanceCharges, Lmc, Serviceability, Feasibility, DarkFiberFeasibility, Competitor, NetworkTicket | DB 07; Spec §4 |
2.2 Data-model mechanisms
| Feature | What it does | Evidence | Disposition |
|---|---|---|---|
Geometry/attribute decoupling (*_master + att_details_<e>) | Geometry in 3 master tables, attributes in 1:1 att_details_*, joined by integer system_id | DB 00 §3, DB 01; ≈660 ST_GeomFromText (Gaps DAT-5) | Carry but redesign (typed geometry on the element; collapse the master split; NTS/GeoJSON at edge) |
layer_details schema registry (66×114, ~80 flags) | One config row per entity type declares tables/views/URLs/capabilities | DB 00 §3(b), DB 01; Gaps DAT-3 | Carry but redesign (real schema registry: type/subtype + JSON-schema attributes, versioned, tenant-scoped — not a 114-column flag God-row) |
Wide typed attribute columns (att_details_*) | Per-entity typed domain attributes (91–152 cols) | DB 02 (93 att_details_* tables) | Carry but redesign (schema-driven JSONB + JSON Schema, indexed/validated) |
Item/vendor template specs (item_template_*) | Per-entity equipment/spec catalog with cost/RFS metadata | DB 02, DB 05 (item_template_master 230 rows); Screen Catalog §5.4 | Carry as config (vendor-spec / BOQ catalog) |
| Dynamic-attribute EAV overlay | Custom fields per entity via dynamic_controls → entity_additional_attributes | Spec §3.5 DynamicForm; DB 02 (3 EAV generations); Screen Catalog §5.6 | Carry but redesign (single extensibility mechanism — typed schema registry, retire dual wide-column+EAV) |
| Entity category / sub-type discriminator | Sub-classify an entity (Cable: Feeder/Distribution/Drop) | DB 01 (entity_category); design_id_generator.feature_type | Carry as-is (type/subtype is core) |
Network-id hierarchy spine (network_id/parent_network_id) | Self-referential containment/scoping code in 207/190 tables | DB 00 §3(c) | Carry but redesign (explicit containment edges; do not conflate containment + connectivity + tenancy in one string) |
Spatial parent resolution at save (fn_get_parent_info, ST_WITHIN) | Compute containing parent from geometry at save time | DB 01 | Carry but redesign (deterministic, explicit containment; geometry-derived as a suggestion not the source of truth) |
GeoJSON read caches (60 <e>_geojson_master) | Pre-materialized GeoJSON Features for map serving | DB 01 (fn_geojson_update_entity_attribute) | Drop / do-not-carry (replace with vector-tile pipeline; no jsonb-text caches) |
Approval workflow envelope (approval_flag/approver_id/remarks) | Per-entity create/approve workflow fields | DB 01 (effectively dead: approval_flag='A' ~100%) | Carry but redesign (revive as a real, eventful approval workflow — see §15; the current columns are vestigial) |
| Lifecycle status history ledger | Append-only Planned→As-built→Dormant transitions | DB 01 (entity_status_history 1.35M rows) | Carry as-is (the real lifecycle signal; feeds event store) |
| Bulk lifecycle conversion over radius | Bulk convert assets to as-built/dormant/decommissioned within a radius | Spec §3.1.4 (BUP, BulkUpdateController) | Carry as-is |
EAV-into-other_info JSON save | Dynamic-form fields serialized into an other_info JSON column on the entity | Splicing/Forms doc §3.6; DB 02 (gen-1 other_info jsonb bag) | Carry but redesign (typed JSONB + JSON Schema, indexed; retire the untyped bag) |
| Auto-generated wide report view from EAV | Pivot typed-EAV attributes back to a wide vw_*_report view; rebuild on attr-def change | DB 02 (fn_create_dynamic_entity_wide_view, fn_refresh_dynamic_view_on_attr_def) | Carry but redesign (schema-registry-driven projections, not DDL-on-data triggers) |
| Customer label remapping | Display label differs from internal entity (FAT→FDB, CPE→ONT, ATB→HTB…) per layer_details | Forms doc §3.1; Live Grounding | Carry as config (per-tenant terminology override) |
| Denormalized counters / label maintenance | Triggers keep duct/cable counts, calculated lengths, display labels, region/province in sync | DB 03 (fn_trg_update_duct_cable_count, fn_trg_updatecablecalculatedlength, fn_trg_update_entity_attribute, fn_trg_update_entity_region_province) | Carry but redesign (event-driven projections, not triggers) |
3. Connectivity & Splicing
| Feature | What it does | Evidence | Disposition |
|---|---|---|---|
| Explicit connectivity edge table | Directed port-to-port edges (splice/patch/through) keyed by (entity_type, system_id, port_no) | DB 04 (connection_info 26k rows, 27 cols) | Carry but redesign (model as property graph — Apache AGE/edges; this table maps cleanly to nodes+edges) |
| Fiber-strand registry | One row per (cable, tube, core, fiber) with usage/connection status, colors | DB 04 (att_details_cable_info 1.01M rows) | Carry as-is (fiber-strand granularity is core; model strands as edges/ports) |
| Drag-drop splicing GUI | Visual port-to-port splice editor (cable↔ODF↔CPE) using jsPlumb | Spec §3.1.5 (MNS, SplicingController); Splicing doc; Screen Catalog §3.2 | Carry as-is (re-implement on typed graph) |
| Manual splice-here | Port-to-port splice at a clicked point | Screen Catalog §3.2 (splicing.spliceHere); fn_splicing_save_connections | Carry as-is |
| Bulk splicing upload | Import splice connections from a file by splicing type | Spec §3.1.5 (BLK-SDU); Screen Catalog dlg-13 | Carry but redesign (generic typed import) |
| Splice validation rules | Validate splice eligibility before save | DB 04 (fn_validate_splicing 400L) | Carry as config (splice rules as data, not hardcoded proc) |
| Tray / closure / port management | Manage trays, closures, port inventory + status | Spec §3.1.5; DB 04 (att_details_splice_tray, isp_port_info ~301k) | Carry as-is |
| Core/port status vocabulary | Vacant/Reserved/Faulty/Connected with color, is-manual, is-splicing-allowed | Screen Catalog §5.5 (port_status/ViewPortStatus); DB 04 | Carry as config (controlled vocabulary as tenant data) |
| Auto core/port status sync trigger | Flip strand is_connected/status when a connection changes | DB 04 (fn_trg_update_core_port_status 342L) | Carry but redesign (event-driven projection, not DB trigger) |
| OLT patching workspace | OLT port-patching UI (admin “OLT Patching”) | Screen Catalog §5.9; Spec §7 (OLT = vendor attrs on EquipmentInfo, no dedicated OLT entity) | Carry but redesign (first-class OLT/ODF entities in the typed equipment model) |
| ODF-to-cable connection view | Connect ODF ports to cables | Spec §3.1.7 (_ODFToCable.cshtml, view-only, no ODF entity) | Carry but redesign (first-class ODF entity) |
| Equipment-model patching rules (parent/child) | Which model may attach to which (Equipment/Chassis/Slot/Card/Port/Tray) | DB 04 (isp_model_rules, fn_splicing_isp_model_get_connection); Screen Catalog §5.4 | Carry as config |
| Model-rule-aware patch matrix | Patch matrix renders only legal port connections per model rules | Splicing doc §2.2-2.3 (Splicing/ConnectionEditor, ConnectionBuilder.js, fn_export_patching_report) | Carry as config |
| Through-connection semantics | Distinguish splice vs pass-through (same core in/out) on an edge | DB 04 / Splicing doc §1.3,§1.6 (is_through_connection, grey edge) | Carry as-is |
| A/B cable-end metadata | Mark which cable end (A/B) an edge attaches to | Splicing doc §1.6 (is_cable_a_end); Live Grounding (a/b endpoint model) | Carry as-is |
| Range-based bulk cross-connect | Splice a range of cores between two cables in one action | Splicing doc §1.6 (spliceAll/cableToCableSplicing) | Carry as-is |
| OSP/ISP split re-pointing | Re-point existing connections when a cable is split | DB 04 (fn_splicing_save_osp_split_connection/_isp_split_connection) | Carry as-is |
| FAT accept / reset temp splicing | Confirm or discard auto-generated splices | Splicing doc §1.8 (fn_fat_update_connection_status, fat_process_running_status lock) | Carry as-is |
| Splice tray model | Trays inside a closure; edges reference source/dest tray | DB 04 (att_details_splice_tray; connection_info.*_tray_system_id) | Carry as-is |
| Splice diagram → image/PDF export | Export the jsPlumb splice diagram | Splicing doc §1.1 (html2canvas + canvg) | Carry as-is |
| HOTO optical readings | Capture OTDR/LSPM tube/fiber readings at handover (offline-capable) | Mobile doc (NetworkEntityAPI/GetOpticalHotoDetails/SaveOpticalHotoDetails) | Carry as-is |
| Splitter loss reference | Insertion loss (dB) per split ratio × wavelength | DB 08 (splitter_loss_master) | Carry as config |
| Termination-point connectivity rules | Which entity types may terminate on which host layer (ISP/OSP TP) | DB 08 (termination_point_master); Screen Catalog §5.5 | Carry as config |
| Connection / single path finder | Trace connectivity from a port/point | Spec §3.1.5 (CPF, CommonPathFinderController); Screen Catalog §3.2 | Carry but redesign (native graph traversal, not cursor-walk + recursive CTE) |
| CPF → KML export | Export a connection path to KML | Spec §3.1.5 (CommonPathFinderController) | Carry as-is |
| Fiber-cut tracing | Trace which fibers/circuits a cut affects | Spec §3.1.6 (FBC, FiberCutTracingController); DB 04 (fn_otdr_get_fiber_cut_details) | Carry but redesign (graph impact-trace) |
| Fault-location detail trace | Locate fault along the network | DB 04 (fn_api_get_fault_location_detail 433L) | Carry but redesign (graph) |
| Schematic / single-line diagram (SLD) | Generate splice/topology schematic & butterfly diagrams | Spec §3.1.9 (ReportController SLD/butterfly); DB 04 (fn_get_schematic_view 478L) | Carry as-is (capability); redesign generation |
| End-to-end POP→premises schematic | d3 tree from POP to premises | Spec §3.1.9 (LogicalDiagramController, mobile) | Carry as-is |
| FAT auto-splicing engine | Auto-generate splice plan per SubArea (splitter↔cable fibers) | DB 05 (fn_fat_generate_splicing 2,895L; fat_process_*) | Carry but redesign (declarative rules; the densest single proc) |
| Tube/core color standard | Tube and core color sequence (color char → color) | Screen Catalog §5.7 (TubeCoreColorSettings); Splicing doc | Carry as config |
| Cable map color settings | Color by cable type/category/fiber-count | Screen Catalog §5.7 (ViewCableMapColorSettings) | Carry as config |
| Optical link budget | Per-wavelength optical power budget with splitter-loss tables | Spec §3.1.5 (VOIL, OpticalLinkBudgetController); Screen Catalog §5.9 (Splicing/viewlossdetails) | Carry as-is (capability); loss tables as config |
| OTDR distance/length metadata | Store OTDR distance/length scalars on assets | Spec §3.1.5, §7 (metadata only — no .sor import) | Carry but redesign (ingest real .sor traces + time-series for predictive maintenance — Gaps AI-3) |
4. Fiber Links / Circuits
| Feature | What it does | Evidence | Disposition |
|---|---|---|---|
| Fiber-link / circuit inventory | End-to-end circuit definition; GIS-vs-cable length | Spec §3.1.6 (FLK, FiberLinkController); DB 04 (att_details_fiber_link) | Carry as-is |
| Link search (common path finder) | Search fiber links | Spec §3.1.6 (CMPF, si.openLinkSearch) | Carry as-is |
| Customer fiber-link search | Search links by associated customer | Spec §3.1.6 (CFLF) | Carry as-is |
| Fiber allocation tool | Allocate fibers/cores to links | Spec §3.1.6 (FiberAllocationToolController) | Carry as-is |
| Path / link / location tracker | Track a path/route across the network | Spec §3.1.6 (LTK, OpenPathTracker) | Carry but redesign (graph) |
5. Cable / Linear-Asset Operations
| Feature | What it does | Evidence | Disposition |
|---|---|---|---|
| Split linear asset (cable/duct/trench/microduct) | Split at a point, preserving attributes & connectivity | Spec §3.1.2 (SPLIT-*, layer_details.is_split_allowed) | Carry as-is |
| Merge cables | Merge adjacent cable segments | Spec §3.1.2 (MRG-CABLE, si.showMergeCablesPopup) | Carry as-is |
| Fiber / tube / core editing | Edit fiber counts, tube/core structure & colors | Spec §3.1.2; Splicing doc | Carry as-is |
| Loop & slack management | Model fiber loops and slack | Spec §3.1.2 (Loop/Slack; UploadTempLoop/UploadTempSlack) | Carry as-is |
| Entity-along-direction / layout | Draw/extend entities along a drawn direction | Spec §3.1.2 (EAD) | Carry as-is |
| Asset cloning (single + group) | Clone single or grouped entities with dependents | Spec §3.1.1 (GRP-LIBRY, si.GroupClone); layer_details.is_clone/is_multi_clone | Carry as-is |
6. Network Planning & Auto-Design (SmartPlanner)
| Feature | What it does | Evidence | Disposition |
|---|---|---|---|
| Demand-point upload | Upload demand points (lat/long / homepass count) | Spec §3.2 (SmartPlannerController) | Carry as-is |
| Design-rules engine | Splitter ratios, max distances, network type (UG/aerial), topology (ring/linear), manhole span | Spec §3.2; DB 05 (sp_plan_details: primary/secondary_spliter_ratio, manhole_pole_span, max_cable_length) | Carry as config (design rules as tenant data) |
| Demand clustering | Auto & manual clustering of demand points into service areas | Spec §3.2 | Carry as-is |
| Auto network design | Auto-place splitters/cables/equipment (trench→duct→cable→splice stack) | Spec §3.2; DB 05 (fn_network_planning_save_auto_planning 531L) | Carry but redesign (modern solver; not 4GB staging table) |
| Two-phase stage-then-commit planning | Stage planned nodes, then materialize real entities | DB 05 (temp_auto_network_plan 400k rows / att_details_network_plan) | Carry but redesign (no un-GC’d 4GB staging; eventful) |
| Route optimization | Google Directions + proprietary LeptonRouteAPI; restricted-area avoidance; trench-by-landbase | Spec §3.2 (routingAPIUrl, UploadTempRestrictedArea) | Carry as-is (capability); pluggable routing engine |
| Interactive fine-tuning | Drag splitter/cable path; change ratios on map | Spec §3.2 | Carry as-is |
| Plan clone / version | Clone and version plans | Spec §3.2; DB 05 (bom_boq_revision_info) | Carry as-is |
| Plan deliverables (BOM/KML/SLD/splice plan/tower-building BOM/PDF) | Export design artifacts | Spec §3.2 | Carry as-is |
| MDU in-building plan | In-building distribution plan for MDUs | Spec §3.2 | Carry as-is |
| Plan tool / bulk plan tool | Open planner UI / bulk planning | Spec §3.2 (PTL/BPTL); Screen Catalog §3.8 (Sprout) | Carry as-is |
| Planner ↔ inventory integration | Import planner designs into inventory | Spec §3.2 (SPI, IntegrationController.ImportDataAPIRequest) | Carry as-is |
| Design-ID generator | Mint structured design codes (city/psa/fsa/dsa/csa/ring/seq; S1/S2 splitter tiers) | DB 05 (design_id_generator 5,579 rows; design_sequence_master) | Carry but redesign (deterministic codification service) |
| Homepass / potential computation | Compute homepass/potential within a drawn area | Screen Catalog §3.6 (initiateDrawingsPotential, ComputeHomePass); DB 08 (fn_get_area_potential 905L) | Carry as-is |
| Customer auto-provisioning | Auto-create ONT/drop + splice to splitter port from CAN/box/port + WCR | DB 05 (fn_auto_provisioning 631L) | Carry as-is |
| Point-to-point auto-planning | Auto-plan a P2P backbone segment | DB 05/08 (fn_process_point_to_point_network_planning) | Carry as-is |
7. BOM / BOQ & Costing
| Feature | What it does | Evidence | Disposition |
|---|---|---|---|
| BOM/BOQ material take-off | Quantity × rate take-off over assets in a drawn area | Spec §3.1.9 (BMQ, BOMBOQController); DB 05 (bom_boq_info, bom_boq_master) | Carry but redesign (config-driven; one export engine) |
Rate card (item_template_master) | Cost-per-unit / service-cost-per-unit per spec item | DB 05 (230 rows); Screen Catalog §5.4 | Carry as config |
| FSA-wise overhead-formula engine | Apply FSA-level overhead/buffer formulas to BOM | Spec §3.1.9 (BOMBOQShowModelforBOMDetail); DB 05 (extra_buffer_cost_bom_percentage) | Carry as config |
| Construction BOM | Overhead-construction take-off (pole/clamp/cable counts per town) | Spec §3.1.9 (CON-BOM); DB 05 (construction_bom_details) | Carry as-is |
| RFS item flags (A/B/C-RFS) | Ready-for-service classification of catalog items | Screen Catalog §5.4 (is A/B/C-RFS item) | Carry as config |
| BOM by selection shape | BOM over polygon/rectangle/circle/FUD selection | Spec §3.1.9 (BMQ-POLY/RECT/CIR/FUD) | Carry but redesign (one selection→export framework) |
| FSA unlock dashboard | Feasibility/FSA unlock workflow | Spec §3.1.9 (BMQ-FUD, FSAUnlockDashboard) | Carry as-is |
| BOM revision tracking | Track BOM revisions | DB 05 (bom_boq_revision_info 467 rows) | Carry as-is |
| Service-cost catalog (per spec) | Per-spec named service costs | Screen Catalog §5.4 (ViewSpecificationServices) | Carry as config |
8. Feasibility / Serviceability (SmartSQ / SmartFeasibility)
| Feature | What it does | Evidence | Disposition |
|---|---|---|---|
| Single-address feasibility | Point-to-point feasibility for one address; capture inside/outside/LMC segments | Spec §3.4 (FeasibilityDetailsController); DB 07 (feasibility_input/history/geometry) | Carry as-is |
| Bulk feasibility (Excel) | Batch feasibility for many uploaded addresses | Spec §3.4 (BulkFeasibilityController) | Carry as-is |
| FTTH / ONT reachability | Splitter-to-customer last-mile routing; per-cable core availability | Spec §3.4 (BLFeasibilityRouting, BLCable.GetAvailableCores) | Carry as-is |
| Route / core availability & network status | Planned-vs-as-built routing; P2P multi-core | Spec §3.4 (GetNetworkStatuses, getRoutes); DB 07 (fn_sf_get_available_cores) | Carry as-is (fix: availability rule counts connected cores as available — DB 07) |
| pgRouting shortest-path engine | Dijkstra over a cable-snapshot routing graph | DB 05 (fn_sf_get_routes → pgr_dijkstra); DB 07 | Carry but redesign (live topology projection, not batch-rebuilt snapshot; fix EPSG:26986-on-India length bug) |
| External routing engine | Walking-mode directions via external RoutingAPIUrl (JWT) | Spec §3.4 (RouteAPIHelper) | Carry as-is (pluggable) |
| Cable-type price list | Cores → material/service price per unit | DB 07 (feasibility_cable_type 54 rows) | Carry as config |
| Feasibility exports (KML/KMZ/PDF/Excel/BOM) | Color-coded KML (inside_A/inside_P/outside/LMC), PDF, Excel, BOM | Spec §3.4 (SmartFeasibility/ReportController) | Carry but redesign (one export engine) |
| Dark-fiber feasibility (P2P) | Existing-vs-new-build dark-fiber routing; GeoJSON route geometry | Spec §3.4 (DaFiFeasibilityController); DB 07 (dark_fiber_feasible_routes) | Carry as-is |
| Runtime serviceability for OSS | Splitter/GPON reachability by lat/lng; RFS/design-ID status; XML config state | Spec §3.4 (IntegrationServices/ServiceController, ServiceabilityWinService) | Carry but redesign (event-driven API, not FTP folder-watch timer) |
| Feasibility access log | Who ran a feasibility, from where | DB 07 (user_feasibility_history) | Carry as-is (folds into audit) |
| FWA / P2MP / 4G / 3D-LOS feasibility | Marketed but unverified in code | Spec §3.4, §7 #7 | Drop / do-not-carry as-claimed (treat as net-new if needed; not a real legacy capability) |
9. Work-Force Management / Operations (SmartOps / WFM)
| Feature | What it does | Evidence | Disposition |
|---|---|---|---|
| Assign / view job orders (+ RM variants) | Create/assign/track job orders to field engineers; reporting-manager views | Spec §3.3.1 (WFM-AJO/WFM-VAJO, WorkforceController); Screen Catalog §3.3, dlg-02 | Carry as-is |
| Trouble-ticket-sourced job orders | JOs from trouble tickets | Spec §3.3.1 (WFM-TTAJO/WFM-TTVAJO) | Carry as-is |
| Job packs | Bundle JOs into packs with stage tracking | Spec §3.3.1 (JobPackController, JOB-PACK) | Carry as-is |
| Network ticketing | Open/close tickets from ONT_HOBS / OUTAGE / Trouble-Ticket sources | Spec §3.3.1 (NWT, NetworkTicketController); DB 07 (att_details_networktickets) | Carry as-is |
| Configurable ticket state machine | Ordered workflow per (module, order-type, service-type, RFS-type) | DB 07 (ticket_steps_master 64 rows) | Carry as config |
| Ticket-type vocabulary | Ticket types with color/module (Survey/Construction/O&M/Audit/…) | Screen Catalog §5.5 (ticket_type_master); DB 07 | Carry as config |
| Per-(type,role) ticket RBAC grid | create/edit/view/approve per ticket type × role | DB 07 (ticket_type_role_mapping 154 rows) | Carry as config |
| 3-tier route-issue approval | Multi-level approval workflow for route issues | Spec §3.3.1 (WorkforceController approval twins) | Carry but redesign (eventful approval) |
| Roster management | Crew/shift roster | Spec §3.3.2 (RosterManagementController) | Carry as-is |
| Timesheet / attendance | User timesheets, check-in/out, availability | Spec §3.3.2 (UserTimeSheet); DB 07 (user_timesheet, working_days) | Carry as-is |
| FE appointment-slot booking | Reserve appointment slots; FE skills/availability | DB 07 (tbl_wfm_slot, tbl_wfm_slot_confirmation, tbl_wfm_skill); Spec §3.3.4 (TicketController) | Carry as-is |
| Order/service taxonomy | Order types, service types, JO category/type masters, service facilities | DB 07 (tbl_wfm_ordertype/servicetype, wfm_jo_type_master, wfm_service_facility_master) | Carry as config |
| JO / TT / survey / visit reports | Job-order, trouble-ticket, survey, visit reports | Spec §3.3.3 (WFM-JOReport/WFM-TTJOReport/WFM-SR/WFM-VR); DB 07 (fn_wfm_*_report) | Carry but redesign (one report engine) |
| WFM dashboard | SLA / utilization charts | Spec §3.3.3 (WDBRD, DashboardController) | Carry as-is |
| JO lifecycle SMS + email notifications | 8-timer notification service (unassigned/ack/delayed/no-task/reminder) + 2 daily emails | Spec §3.3.4 (WFMNotificationService, wfm_notification_template) | Carry but redesign (event-driven, not 8 polling timers — Gaps OPS-2) |
| View user permission area | Visualize a user’s permitted geography | Screen Catalog §3.3 (toggleViewUserPermissionArea) | Carry as-is |
10. Survey & Field Workflows
| Feature | What it does | Evidence | Disposition |
|---|---|---|---|
| Field survey (single/bulk) | Survey assignment & capture | Spec §3.3.2 (SVM/SVA/SVB, SurveyAreaController) | Carry as-is |
| Building survey | Survey buildings; upload buildings | Screen Catalog §3.7 (si.showWLTB('Survey'), OpenSurveyBuilding, toggleBuildingUpload) | Carry as-is |
| Survey assignment | Assign survey areas to crews | Screen Catalog §3.7 (Opensurveyassignment) | Carry as-is |
| Acceptance testing (AT) | AT acceptance records | Spec §3.3.2 (ATAcceptance; layer_details.is_at_enabled) | Carry as-is |
11. Data Ingestion / Bulk Upload / ETL
| Feature | What it does | Evidence | Disposition |
|---|---|---|---|
| Bulk import (Excel/KML) | Primary uploader into temp_du_* staging → main tables | Spec §3.7 (DUP/UPB, DataUploaderController); DB 06 | Carry but redesign (one generic typed importer; fix SQL-injection in uploader — DB 06) |
| Pre-upload utility (map→validate→execute) | Multi-step: Upload Files → Column Mapping → Data Validation → Data Execution | Screen Catalog dlg-14; DB 06 (fn_uploader_*) | Carry as-is (good UX flow) |
| ~46 per-entity uploaders | Per-entity staging objects | Spec §3.7 (UploadTemp*.cs); DB 06 (44 temp_du_*, ~45 insert fns) | Carry but redesign (schema-driven, not 45 near-identical functions) |
| Data-uploader column dictionary | Per-entity column map (display/db name, type, mandatory, dropdown-base, kml/excel attr) | Screen Catalog §5.5 (data_uploader_template 884 rows); DB 06 | Carry as config |
| Bulk-update template config | Which columns a bulk-update template carries | Screen Catalog §5.2 (BulkUpdateTemplate) | Carry as config |
| Bulk attribute update | Update attributes in bulk via uploaded file | Spec/Screen Catalog dlg-15 (si.toggleBulkUpdate) | Carry as-is |
| Spatial format conversion (SHP/TAB/DXF/GeoJSON/KML) | Convert via bundled ogr2ogr/GDAL + SharpKml | Spec §3.7 (GIS_Convertor); Gaps GIS-1 (fix lat/lon vs lon/lat ambiguity) | Carry but redesign (typed geometry; fix axis-order bug) |
| Live import progress (SignalR) | Stream import progress to the client | Spec §3.7 (SmartInventoryHub); Gaps OPS notes | Carry as-is (decouple from Forms auth) |
| Upload-job ledger | Track upload jobs (total/success/failed/logs) | DB 06 (upload_summary 1,174 jobs); Screen Catalog dlg-14 | Carry as-is |
| Upload parent/termination validation | Resolve default parent, snap line A/B ends to point entities within a buffer, normalize status, detect dup network_id, enforce geo-scope | DB 06 (fn_uploader_validate_parent_details, fn_uploader_check_termination_points) | Carry but redesign (declarative validation pipeline) |
| Custom-projection reprojection on upload | Reproject configurable source SRID → 4326 at ingest | DB 06 (ISCUSTOMPROJECTIONALLOWED/customProjection) | Carry as config |
| Licensed-user-cap enforcement | Enforce licensed web/mobile user counts at bulk-user upload | DB 06 (fn_bulk_user_upload_chk_limit) | Carry but redesign (entitlements service) |
| Landbase parallel uploader | Schemaless landbase import (attribute_1..10 generic columns) | DB 06 (32 fn_landbase_*, landbase_layer_columns_settings) | Carry but redesign (unify with the generic typed importer) |
| External-data view + upload | View/upload external/uploaded data layers | Spec §3.1.11 (EDV/EDV-UPLD) | Carry as-is |
| XML builder dashboard | Build/export XML deliverables | Spec §3.1.9 (P-XML, xmlbuilderdashboard); Screen Catalog dlg-16 | Carry as-is |
12. Reporting & Export
| Feature | What it does | Evidence | Disposition |
|---|---|---|---|
| Excel / CSV export (NPOI) | Entity & report exports | Spec §3.1.9 (ReportController, 119 NPOI refs) | Carry but redesign (streaming, not in-memory DataTable — Gaps PERF-1) |
| PDF reports (iTextSharp) | Printable PDFs | Spec §3.1.9 | Carry but redesign |
| KML / GIS export | KML export of entities | Spec §3.1.9 | Carry as-is |
| DXF (CAD) export | Export network to CAD DXF | Spec §3.1.9 | Carry as-is |
| Shapefile export | Export to ESRI Shapefile | Spec §3.1.9 | Carry as-is |
| Barcode label reports | Barcode/QR label sheets | Spec §3.1.1, §3.1.9 (is_barcode_enabled = 25 layers) | Carry as-is |
| SLD / butterfly diagrams | Schematic diagrams of splice/topology | Spec §3.1.9; DB 04 | Carry as-is |
| Export by selection shape | Export over polygon/rect/circle/log selections | Spec §3.1.9 (EXRPT, EXRPT-POLY/RECT/CIR, EXPRT-LOG) | Carry but redesign (one selection→export framework) |
| Export-assets / association report | Bulk asset exports; parent/child associations | Spec §3.1.9 (EXASSRPT); Screen Catalog dlg-11 (association_mapping) | Carry as-is |
| Split / audit-history export by selection | Split-report & audit-history export by geometry | Spec §3.1.9 (SPLIT_EXRPT, AUDIT_HISTORY_EXRPT) | Carry but redesign |
| Utilization reports + scheduled email | Capacity/utilization reporting; scheduled email | Spec §3.1.9 (UTL, UtilizationEmailScheduler); DB 07 | Carry but redesign (event-driven scheduler) |
| Utilization thresholds / bands | Per-entity/region Low/Moderate/High/Over % bands | Screen Catalog §5.5 (entity_utilization_settings 33 rows); DB 07 (fn_utilization_get_level) | Carry as config |
| LMC (last-mile) report | Last-mile connectivity report with time-window | Spec §3.1.9 (LMC, IsLMCReportEnabled); Screen Catalog dlg-12 | Carry as-is |
| VSAT report | VSAT site report | Spec §3.1.9 (VSAT) | Carry as config (vertical-specific) |
| Geo-tagged image report | Report of geotagged photos; show on map | Spec §3.1.9 (GTI-W); Screen Catalog dlg-06 | Carry as-is |
| Async export to FTP | Large exports delivered to FTP with poll-log | Spec §3.1.9 (ExportReportLog); Screen Catalog §3.6 | Carry but redesign (queue + object storage, not FTP) |
| Report column pickers (report/history) | Which columns appear in entity reports/history | Screen Catalog §5.7 (ReportColumnSettings, HistoryColumnSettings); layer_details | Carry as config |
| 12 bespoke “draw→filter→export+poll-log” report tools | The whole report family follows one pattern | Screen Catalog §3.6, §7 #4 | Carry but redesign (one generic async export/job framework replaces ~12 tools + 75 Download* methods — Gaps QA-2) |
13. Mobile / Field App (offline, sync, barcode, geo-photo, GPS)
(Enriched from the Mobile App Analysis — ~134 endpoints across 29 controllers; native Android + iOS.)
| Feature | What it does | Evidence | Disposition |
|---|---|---|---|
| Create field entities | ONU/ONT, Splitter, Cable, Manhole, Handhole, SEB, SpliceClosure, Customer, Pole, Tree, WallMount, POD/DLC/MPOD | Spec §3.8 (LibraryController, BuildingController, ISPController) | Carry as-is |
| Offline reference data | Cache legends, layer settings, item templates, vendors, dropdowns offline | Spec §3.8 (OfflineController); layer_details.is_offline_allowed | Carry as-is |
| Vector delta sync | Sync vector data deltas to device | Spec §3.8 (VectorLayerController) | Carry but redesign (true CRDT/delta sync; legacy has no real conflict merge — Gaps MOB-1/2) |
| Geo-tagged photo/document upload | Attach photos/PDFs with geotag | Spec §3.8 (LibraryController.UploadAttachment) | Carry as-is |
| Barcode / QR scanning | Scan/generate asset barcodes | Spec §3.1.1; layer_details.is_barcode_enabled + barcode_column | Carry as-is |
| Customer allocation to ONU | Provision a customer to an ONT in the field | Spec §3.8 (MainController/CRM) | Carry as-is |
| Mobile connection path finder | Trace connectivity from a point on device | Spec §3.8 (ConnectionController, MainController) | Carry as-is |
| Mobile splicing with image capture | Map-based splicing + photo | Spec §3.8 (SplicingController, ConnectionController) | Carry as-is |
| Mobile layer management | Toggle map/landbase layers | Spec §3.8 (LegendDetailsController, LandBaseController) | Carry as-is |
| Mobile network tickets / surveys | Fault tickets & survey-area status | Spec §3.8 (NetworkTicketController, SurveyController) | Carry as-is |
| Mobile WFM job lifecycle | Job list → status update → attachment → completion | Spec §3.3.4 (FEController, wfm/mobile/v1.0) | Carry as-is |
| CPE inventory issue/return (Converge ERP) | Issue/return CPE inventory to ERP | Spec §3.3.4 (ConvergeERPService, CreateInvIssue/Return) | Carry as config (pluggable connector) |
| Mobile OTP / 2FA + signup | OTP generate/verify, signup, location tracking | Spec §3.8 (OTPController, SignInController) | Carry but redesign (OIDC; not opaque tokens) |
| Force-login / single-session / MAC binding | Single active session per user; MAC-bound | Product Spec §6 (SmartInventoryServices token flow) | Carry as-is (capability); redesign mechanism |
| GPS location tracking / location delta | Track FE location | Spec §3.8 (IntegrationServices/LocationDeltaController) | Carry as-is |
| CRM tickets / static help (mobile) | Query CRM tickets; static help content | Spec §3.8 (CRMController) | Carry as-is |
| APK distribution | Publish/serve the mobile APK | Spec §1 (SI.MobileOps, HTTP Basic) | Carry but redesign (store distribution; not Basic-auth service) |
| Offline edit ledger + blind-replay sync | Queue offline create/update/convert/relocate as JSON; UI-triggered replay; server system_id written back | Mobile doc §6 (OfflineNetworkManagerService, EntitySaveRequestTable, FileTable) | Carry but redesign (CRDT/conflict-aware sync; legacy is single modified_on hard-reject — Gaps MOB-2) |
| Offline basemap (MBTiles) | Download region tiles, serve under the map offline | Mobile doc (LegendDetails/DownloadMapTiles, mbtiles_dao) | Carry as-is |
| Offline master pull | Seed local DB: vendors/specs/dropdowns/layer-mapping/legends/colors/landbase/in-progress tickets | Mobile doc (api/Offline/*) | Carry as-is |
| HOTO optical capture (mobile) | OTDR/LSPM tube/fiber readings on device (offline) | Mobile doc (GetOpticalHotoDetails/SaveOpticalHotoDetails) | Carry as-is |
| Last-mile customer connect (mobile) | Pick distribution box→splitter→port→WCR material to connect a customer | Mobile doc (getDistributionBoxInfo, getSplitterPortInfo, GetWCRMaterial, savecustomerassociation) | Carry as-is |
| Customer signature capture | Signature pad for CPE activation | Mobile doc §5.7 (painter) | Carry as-is |
| OCR text scan | Scan text into fields | Mobile doc §5.3 (ocr_scan_text) | Carry as-is |
| Root/jailbreak/mock-GPS guard | Block compromised devices and fake GPS | Mobile doc §5.11 (safe_device, rooted_devices.dart) | Carry as-is |
| Encrypted local-DB backup | AES-256-CBC encrypted ZIP of the on-device SQLite | Mobile doc §7 (aes_encrypt_decrypt.dart) | Carry as-is |
| Build-flavor multi-tenancy (mobile) | One app, ~10+ customer flavors by package name + deep-link config | Mobile doc §1 (environment.dart) | Carry but redesign (runtime tenant resolution, not build flavors) |
| Voice-based network creation | Implemented but disabled/commented (speech_to_text) | Mobile doc §5.13; Spec §3.8 (BRD SI-M02) | Drop / do-not-carry as-claimed (treat as net-new) |
14. Admin & Configuration
| Feature | What it does | Evidence | Disposition |
|---|---|---|---|
| Layer configuration (5 of ~80 flags) | Edit min-zoom + mobile flags per layer in UI | Screen Catalog §5.3 (LayerConfigurationSettings, fn_save_layer_settings_details) | Carry but redesign (expose the whole schema safely as tenant config — §6 of Screen Catalog: the #1 gap) |
| Layer group master + mapping | Define groups; map layers→groups + order | Screen Catalog §5.3 (layer_group_master, layer_group_mapping) | Carry as config |
| Dynamic Form builder | Add custom textbox/dropdown attributes per entity | Screen Catalog §5.6 (DynamicForm, dynamic_controls) | Carry but redesign (schema-registry-driven form generation) |
| Dropdown master (controlled vocab) | Per-entity controlled vocabularies (791 rows) | Screen Catalog §5.5 (dropdown_master) | Carry as config |
| Landbase dropdown master | Landbase-layer vocabularies | Screen Catalog §5.8 (landbase_dropdown_master) | Carry as config |
| Search / Info / Label settings | Which columns are searchable / shown in identify / used as label per entity | Screen Catalog §5.7 (layer_details columns) | Carry as config |
| Landbase layer builder (runtime) | Create a new landbase layer (geom type, styling, network-id rules, custom fields) | Screen Catalog §5.8 (AddLayer) | Carry as config (generalize to all entity types) |
| Equipment Model Builder (CAD visual) | Author Equipment→Chassis→Slot→Card→Port→Tray with dims, ports, parent/child rules | Screen Catalog §5.4 (CreateModel/ViewModels, isp_model_*) | Carry as-is (genuinely good; re-imagine on typed model — Screen Catalog §7 #5) |
| Model image library | SVG/image assets per model | Screen Catalog §5.4 (ViewModelsImage) | Carry as config |
| Vendor / vendor-spec / accessory masters | Vendors, BOQ catalog items, accessories | Spec §3.5; Screen Catalog §5.4 (vendor_master, item_template_master) | Carry as config |
| Vendor-spec bulk upload | Bulk-load catalog | Screen Catalog §5.4 (UploadVendorSpecification) | Carry as-is |
| Port-status settings | The core/port status enum governing splicing | Screen Catalog §5.5 (ViewPortStatus, port_status) | Carry as config |
| Change network code (re-codification) | Recompute an entity’s network id | Screen Catalog §5.5 (ChangeNetworkCode, fn_get_new_networkcode, entity_network_code_history) | Carry as-is (capability); redesign engine |
| Template column data dictionary | Per-entity column metadata for uploads | Screen Catalog §5.5 (ViewTemplateColumn, data_uploader_template) | Carry as config |
| Termination-point settings | Which entities act as ISP/OSP termination points | Screen Catalog §5.5 (ViewTerminationPoint) | Carry as config |
| Utilization settings | Per-entity/region utilization bands | Screen Catalog §5.5 (entity_utilization_settings) | Carry as config |
| Association mapping | Allowed entity-to-entity associations + subtype | Screen Catalog §5.5 (AssociationMapping, association_mapping) | Carry as config |
| Ticket-type master | Ticket-type vocabulary | Screen Catalog §5.5 (ticket_type_master) | Carry as config |
| Layer icon mapping | Per-layer/status icon (196 rows) | Screen Catalog §5.5 (LayerIconMapping) | Carry as config |
| User-activity-log settings | Which controller actions are audited | Screen Catalog §5.5 (ViewUserActivityLogSettings) | Carry but redesign (audit everything via event store) |
| Tube/core color + cable map color | Fiber color standards; cable color by type/category/fiber-count | Screen Catalog §5.7 | Carry as config |
| Connection-label settings | Rules for connection/edge labels; sync-all-labels | Usage/API Map (AdvancedSettings/ConnectionLabelSettings/SyncAllLabels) | Carry as config |
| RCA master (root-cause vocab) | Root-cause dropdown master for trouble tickets | Usage/API Map (WFM/RCAMaster); DB 07 (wfm_tt_type taxonomy) | Carry as config |
| Voice-command master | Configurable voice-command vocabulary | Usage/API Map (AdvancedSettings/VoiceCommandMaster) | Carry as config (only if voice is built) |
| Attachment-type master | Document types × workflow state for attachments | DB 08 (attachment_type_master) | Carry as config |
| File-storage provider selection | Pluggable storage backend (local/FTP/SMB/S3/GCS) | Forks §4#8 (GCS/NAS/FTP dual-store forks); Spec §6 (FTP/SMB) | Carry as config (storage provider as config, not forked code) |
| Upload security scan hook | AV/CDR scan of uploads (e.g. OPSWAT MetaDefender) | Forks §4#9 (Airtel) | Carry as config (pluggable upload-pipeline hook) |
| Per-tenant naming-rule engine | Mask grammar + region resolution + ID generation per tenant | Forks §4#3 (ACT/BharatNet) | Carry as config (generalize codification — see §18) |
| KPI master | Define KPIs | Spec §3.5 (KPIMasterController) | Carry as config |
| Optical link budget master | Wavelength/splitter-loss tables | Spec §3.5 (OpticalLinkBudgetController) | Carry as config |
| Project / region / area masters | Projects, project areas, regions/provinces, province boundaries | Spec §3.5 (ProjectController, RegionProvinceController) | Carry as config |
| Settings family (global/config/advanced/email) | Key/value/typed global settings | Spec §3.5 (global_settings) | Carry but redesign (typed, validated, per-tenant config; not eager unguarded reads — Gaps MT-3) |
| DB backup download + long-query killer | Download DB backups; kill long queries | Spec §3.5 (DownloadbckfileController, LongRunningQueriesController) | Drop / do-not-carry (platform-ops responsibility, not in-app) |
| Dynamic Theme (white-label) | Runtime theme/branding (Dawn/Orchid/Ocean/Olive) | Spec §3.5; Screen Catalog §5.6 (DynamicThemeController) | Carry as config (per-tenant branding) |
15. Identity, Permissions & Tenancy
| Feature | What it does | Evidence | Disposition |
|---|---|---|---|
| User management (3-step wizard) | User details → module rights → work-area geo scope | Screen Catalog §5.1 (user_master, user_permission_area) | Carry as-is |
| Roles + per-entity CRUD permission templates | Entity × (Planned/As-Built/Dormant) × (Add/Edit/Delete/View) matrix | Screen Catalog §5.2 (AddTemplate, role_permission_entity) | Carry as-is (rich RBAC; keep granularity) |
| Role↔module mapping | Gate which modules/layers a role can use | Screen Catalog §5.2 (UpdateRoleModule, role_module_mapping) | Carry as config |
| Geography scoping (Country→Region→State) | Scope a user to a geography | Screen Catalog §5.1; DB 08 (user_permission_area 53k; scope effectively off — 82/95 all-province) | Carry but redesign (real, enforced tenant + geo boundary; row-level security) |
| Geometry-gated permissions | CRUD/ticket-create permission boxed by geography | DB 08 (layer_permission_boundary, fn_get_create_ticket_permission_by_geom) | Carry as config |
| Template-based CRUD rights | Per-template per-layer×lifecycle CRUD grants | DB 08 (layer_rights_template_permission 1,287; role_permission_entity 2,382) | Carry as config |
| Auto-grant new geography to all-scope users | New provinces auto-granted to all-province users | DB 08 (fn_trg_set_user_permissions) | Carry but redesign (explicit scope rules) |
| Bulk user upload | Excel bulk user load with role/module mapping | Screen Catalog §5.1 (BulkUserUpload) | Carry as-is |
| Login / location history | Per-login client/server IP, browser, login/logout, source | Screen Catalog §5.1 (user_login_history) | Carry as-is |
| User↔report mapping | Which reports a user sees | Screen Catalog §5.1 (UserReportMapping) | Carry as config |
| FE tool/asset allocation | Allocate tools (barcode/serial) to field engineers | Screen Catalog §5.1 (Viewfetools) | Carry as-is |
| OTP / 2FA (web + mobile) | Configurable OTP authentication | Spec §3.5 (OTPAuthenticationSettingsController) | Carry but redesign (standards-based MFA) |
| SSO / IdP backends | LDAP, ADFS, Azure AD, Jio ADOID/Seco, Airtel-OID | Product Spec §6 (LoginController.ValidateLogin) | Carry but redesign (OIDC; per-tenant IdP config) |
| Fine-grained module entitlement (90+ codes) | Per-feature licensing via lstUserModule.Contains | Spec §5 (90+ module codes) | Carry but redesign (feature flags / entitlements service — keep the granularity, Gaps §4) |
| Multi-tenancy | Tenant isolation | DB 08 (no tenant key; branch-per-customer; postgres_fdw cross-customer exposure) | Carry but redesign (real per-tenant boundary; single codebase; config-not-code — Gaps MT-1, the headline) |
| Master-password / admin backdoor | Hardcoded auth bypass | Gaps SEC-1/SEC-2 | Drop / do-not-carry (security backdoor — remove now) |
| Reversible (AES) user passwords | Passwords stored reversibly, not hashed | DB 00 §8; Gaps SEC-14 | Drop / do-not-carry (use Argon2/bcrypt or delegate to IdP) |
16. Integrations & APIs
| Feature | What it does | Evidence | Disposition |
|---|---|---|---|
Mobile/web REST API (SmartInventoryServices) | OAuth /token; backs the field app + web | Spec §1, §6; Usage/API Map | Carry but redesign (OIDC/JWT; versioned; not opaque ROPC tokens — Gaps API-1/3, SEC-9) |
Integration API (IntegrationServices) | OSS/BSS API, OAuth /GenerateToken, Swagger | Spec §1, §6; Gaps API-4 | Carry as-is (capability + Swagger); redesign auth |
| API consumer master | Register third-party API clients (with IP allowlist) | Spec §3.5 (APIConsumerMasterController, api_consumer_master) | Carry as config (fix empty-password consumer — DB 08) |
| Converge ERP integration (SOAP) | CPE inventory issue/return to ERP | Spec §3.3.4 (ConvergeERPService) | Carry as config (pluggable connector) |
| HPSM (HP Service Manager) ticketing | IT helpdesk ticket bridge; FTP file upload | Spec §3.3.4 (TicketManagerController); DB 07 (hpsm_ticket_master) | Carry as config (connector) |
| NMS / EMS ticketing | Integrate NMS/EMS tickets | Spec §3.3.4 (BLNetworkTicket, BLWFMTicket) | Carry as config (connector) |
| OSS appointment-slot / JO creation | Reserve/cancel/reschedule slots; create JO/TT-JO from OSS | Spec §3.3.4 (IntegrationServices/TicketController, api/v1) | Carry as-is |
| NMS topology export | Expose network topology to NMS/EMS (e.g. RailTel) | Usage/API Map (NMSIntegrationController); Forks §3.4 | Carry as config (connector) |
| OSS port / FAT-port reserve-release | Atomically reserve/release FAT/feasibility-route ports for provisioning | Usage/API Map (reserveFatPort/releaseFatPort); DB 08 (fn_api_*reservefatport*, fn_api_reserve_feasibility_route) | Carry as-is |
| OSS entity/alarm/discovery API | entityLocation, intermediateEntities, updateAlarmStatus, updateDiscoveredEntity, ontActivationStatusUpdate | Usage/API Map (OSSIntegration) | Carry as-is |
| Project-specification code integration | Save project/planning/workorder/purpose codes via API | Usage/API Map (SaveProjectCode/SavePlanningCode/…) | Carry as-is |
Stored-proc API surface (fn_api_*) | 63 DB functions backing serviceability/fault/customer/provisioning/ticketing APIs | DB 08 (fn_api_*) | Carry but redesign (typed service layer, not stringly-typed procs — Gaps AI-4) |
| Google Maps proxy | Geocode/reverse/directions/distance-matrix/place-search via typed client | Usage/API Map (api/mapsapi, GoogleMapServices) | Carry as-is (pluggable) |
| License enforcement (RSA/AES) | Decode AES-encrypted license from global_settings; CLI generates license | Arch §2 (CodeIN, RSAImplementation) | Carry but redesign (KMS-signed entitlements — Gaps SEC-16) |
| Dark-fiber feasibility API | P2P dark-fiber feasibility for OSS callers | Spec §3.4 (DaFiFeasibilityController) | Carry as-is |
| Customer distance-to-device | Compute customer-to-device distance (Google Geocode) | Spec §3.1.8 (DistanceController) | Carry as-is |
| Customer lifecycle API (shift/save/associate) | Save/shift customer; associate to port; nearby splitter/ODF | DB 08 (fn_api_save_customer_info, fn_api_shift_customer, fn_api_get_nearby_available_splitter) | Carry as-is |
| Self-mutating runtime config (API) | Update/reset runtime API/XML settings via stored proc | DB 08 (fn_api_updateapisettings, fn_api_reset_xml) | Carry but redesign (audited config service, not proc-mutated state) |
| WhatsApp provider | Marketed; stub only | Spec §7 #10 (CommunicationLibrary/WhatsAppProvider.cs) | Drop / do-not-carry as-built (build properly if needed) |
| Twilio SMS | SMS via Twilio / per-deployment gateways | Spec §7 #10; WFMNotificationService | Carry as config (pluggable comms) |
| Background services | WFMNotificationService, ServiceabilityWinService, RoutingDataSync, UtilizationEmailScheduler, BackupDownloadUtility | Spec §1, §6 | Carry but redesign (event-driven jobs / k8s cron; not polling Windows services — Gaps OPS-2) |
| SignalR realtime | Live import/utilization progress | Spec §3.7; Screen Catalog §7 #7 | Carry as-is (decouple from Forms auth) |
17. Audit / History / Approval Workflow
| Feature | What it does | Evidence | Disposition |
|---|---|---|---|
| Entity-change audit | Full per-entity change history (with multilingual labels + export) | Spec §3.1.10 (AuditController, AUDIT_HISTORY_EXRPT) | Carry but redesign (event-sourced log, not shadow tables — Gaps DAT-4/AI-1) |
| Trigger-based shadow-table audit | 68 audit_* tables, 300 triggers | DB 00 §4, DB 03 (fn_trg_*) | Drop / do-not-carry (replace with append-only event store; shadow tables drop columns → silent drift — DB 03) |
| Status-transition ledger | Append-only Planned→As-built→Dormant log | DB 01 (entity_status_history 1.35M) | Carry as-is (folds into event store) |
| Network-code change history | Audit of codification changes | DB 01 (entity_network_code_history, auto_codification_logs) | Carry as-is |
| Approval workflow | Create/approve workflow on entities | DB 01 (vestigial — approval_flag='A' ~100%) | Carry but redesign (real eventful approval; reuse the concept, not the dead columns) |
18. Codification / Network-Coding
| Feature | What it does | Evidence | Disposition |
|---|---|---|---|
| Network-code assignment | Assign formatted network_id per entity at save | DB 01 (fn_get_network_code, network_code_format on layer_mapping) | Carry but redesign (deterministic codification service) |
| Auto-codification (GIS design ID) | Batch hierarchical design-ID assignment (city/psa/fsa/dsa/csa) | DB 01 (fn_auto_codification 499L; codification_layer_details abbreviations) | Carry but redesign (rules as config; the legacy ran it on only 7/424k rows) |
| Layer abbreviations | 2-char codes per layer (SC/TR/FC/PO/CH…) | DB 01 (codification_layer_details) | Carry as config |
| Network-id type / separator rules | Automatic vs Manual id; separator (-//) | Screen Catalog §5.8 (landbase Network Id Type/Network Code Separator); layer_mapping | Carry as config |
| Child→parent layer graph | Candidate parents per layer (ordered by sequence) | DB 01 (layer_mapping 168 rows, parent_sequence) | Carry as config |
19. Wireless Overlay
| Feature | What it does | Evidence | Disposition |
|---|---|---|---|
| Antenna CRUD | Antenna assets (104 attr cols) | Spec §3.9 (AntennaController); DB 07 | Carry as config (vertical layer; schema-driven) |
| Sector CRUD | RF sectors (86 cols) | Spec §3.9 (SectorController); DB 07 | Carry as config |
| Tower CRUD | Towers with POPs/antennas (85 cols) | Spec §3.9 (TowerController); DB 07 | Carry but redesign (fix VaultMaster overload in one render path — Spec §7 #5) |
| Microwave link | Microwave hop links (114 cols) | Spec §3.9 (MicrowaveLinkController); DB 07 | Carry as config (remove plaintext NMS passwords — DB 07) |
| Installation info | Install metadata | Spec §3.9 (InstallationInfo) | Carry as config |
20. Multi-language / Localization & White-Label
| Feature | What it does | Evidence | Disposition |
|---|---|---|---|
| i18n / multilingual engine | DB- or XML-backed resource strings, codegen typed Resources | Spec §6 (ResourcesController, res_resources, MultilingualController) | Carry as-is (capability); redesign delivery |
| Multilingual junk-key tool | Dev tool to find unused resource keys | Spec §1 (MultilingualJunkKeys) | Drop / do-not-carry (dev-only tool) |
| Multilingual audit labels | Localized labels in audit/history | Spec §3.1.10 | Carry as-is |
| White-label theming | Runtime branding/theme per deployment | Spec §6 (DynamicTheme) | Carry as config (per-tenant) |
21. Search & Navigation
| Feature | What it does | Evidence | Disposition |
|---|---|---|---|
| Location geocode search | Search by location (Google) | Screen Catalog §2 (performSearch('Google')) | Carry as-is |
| Entity search | Search network entities | Spec §3.1.11 (GGS); layer_details search columns | Carry as-is |
| Landbase-layer search | Search basemap/landbase features | Spec §3.1.11 (LBL) | Carry as-is |
| Get-address (reverse geocode) | Click-to-address | Spec §3.1.11 (GTA) | Carry as-is |
| Direction / ruler / measurement | Distance & direction tools | Spec §3.1.11 (FND/MSD/DNR) | Carry as-is |
| POD/Central-Office associated entities | Query entities associated to a POD/CO | Spec §5 (COAE, GetPODAssociatedEntities) | Carry as-is |
22. Configurability Primitives the Carry-Forward Implies (Forks → config)
The Customer Forks Analysis shows >85% of the ~1,626 branches are noise; almost all real fork content is config-shaped. The “Carry as config” dispositions above collapse onto this small set of platform primitives — build these and per-customer forking largely disappears (Forks §4):
| Primitive | Absorbs (fork patterns) | Priority |
|---|---|---|
| Runtime custom-entity / attribute-schema builder | New entity types & attributes (CX/GX, HUB/SubBox, PEP, railway POP, FDC/FPOI/GP) | Highest |
| Config-driven form builder + dependency/rules engine | Dynamic forms, conditional show/hide/require, autofill (ACT rebuilt this itself) | Highest |
| Report/template builder (definitions as data) | HOTO/L14/SLD/BOQ/survey reports; per-region variants as rows not methods | Highest |
| Declarative integration/connector framework + ETL pipeline | OSS/BSS, EMS (ZTE/Huawei), ERP/SAP, NMS sync (Airtel ~46k lines) | Highest |
| Per-tenant feature-flag + module registry | Layer/module/menu on-off, 2FA, encrypted-query toggles (every fork) | Highest |
| Per-tenant config + schema isolation + managed migrations | Per-circle DBs, per-region hosts (BharatNet/RailTel/Airtel) | Highest |
| Per-tenant naming/numbering rule engine | Region-pattern codes, geometry-driven region resolution, auto-IDs | High |
| Pluggable IdP/OIDC connector | Airtel-OID, Authentik, Keycloak, Azure AD, central-token | High |
| Config-selectable storage provider | GCS/NAS/FTP/Local dual-store backends | High |
| Configurable geo-hierarchy + row-level security | Province/region/circle scoping | High |
| Notification connector (provider-pluggable) | FCM, SMS gateways | High |
| Configurable upload-pipeline hooks | OPSWAT MetaDefender AV/CDR scan | Med |
| Theming + runtime terminology/i18n override | Logo, client name, terminology (mostly already config) | Med |
| Shared mobile module driven by the same entity/form config | ACT’s 9,186-line forked MobileFormController | Med |
| Configurable planning/rules engine + pluggable routing strategies | OFN/backbone/ring planning, snap-to-linear-reference (rail/road corridor) | Hard (residual frontier) |
Candidate vertical accelerators (productize, do not fork): (1) BharatNet Government Survey / HOTO / Acceptance suite (offline survey + DGPS/depth + L14/SLD/BOQ); (2) OFN / Backbone Planning (Dialog); (3) Vendor-EMS Reconciliation (Airtel ZTE/Huawei ingestion). (Forks §7)
23. Must-Carry-Forward (non-negotiable core)
The ~15 capabilities the product fundamentally is — drop any and it ceases to be SmartInventory:
- GIS-native spatial digital twin — every asset a map feature on PostGIS (≈5,100
ST_*calls server-side). (§1, §2) - The network-entity catalog — the fiber/FTTx asset taxonomy (66 layers: OSP civil/fiber, splicers, ISP/indoor, CPE, wireless, planning polygons, landbase). (§2)
- Schema-driven entity/attribute extensibility — the
layer_details+ template + dynamic-attribute idea (rebuilt as a real schema registry). (§2, §14) - Fiber connectivity & splicing — port-to-port edges, strand-level fiber/tube/core, splice GUI, path/cut tracing (rebuilt as a graph). (§3)
- OLT/ODF/equipment-model patching — the indoor equipment hierarchy + parent/child patching rules. (§3, §14)
- Fiber-link / circuit inventory — end-to-end logical circuits over physical plant. (§4)
- Network planning & auto-design (SmartPlanner) — demand→clustering→auto-design→fine-tune→deliverables. (§6)
- BOM/BOQ & costing — rate-card-driven material take-off with overhead/RFS formulas. (§7)
- Feasibility / serviceability (SmartSQ) — single/bulk/dark-fiber feasibility + OSS runtime serviceability. (§8)
- Work-force management — job orders, tickets (configurable state machine), rosters, timesheets, notifications. (§9)
- Survey & field workflows — area/building survey + acceptance testing. (§10)
- Generic data ingestion / bulk upload — map→validate→execute with a column dictionary. (§11)
- Reporting & multi-format export — Excel/PDF/KML/DXF/SHP/SLD over spatial selections (one engine). (§12)
- Offline-first mobile field app — on-device create/splice/survey/photo/barcode/GPS with sync. (§13)
- RBAC + fine-grained entitlements + lifecycle audit — per-entity×lifecycle×CRUD rights, module entitlements, and an immutable change history. (§15, §17)
- Codification / network-coding — deterministic network-id + design-ID assignment per the layer hierarchy. (§18)
24. Do-Not-Carry-Forward (legacy anti-patterns / dead features to leave behind)
- Hardcoded credentials & backdoors — master-password bypass, base64 admin password, single AES key, plaintext config/SQL/MapServer secrets. (Gaps SEC-1…5)
- Reversible (un-hashed) passwords in
user_master. (DB 08; Gaps SEC-14) - Branch-per-customer multi-tenancy + tenant-specific columns (
iru_given_airtel, etc.) in shared schema. (Gaps MT-1, DAT-6) - Trigger-based shadow-table auditing (68
audit_*tables, 300 triggers, silent column drift). (DB 03; Gaps DAT-4) - GeoJSON-text read caches (60
*_geojson_master) — replace with a vector-tile pipeline. (DB 01) - WKT-string geometry round-tripping + geometry/attribute split +
.map-file rendering. (Gaps DAT-5, GIS-1/2) - Table-per-entity sprawl (~5 tables/entity) + 114-flag
layer_detailsGod-row + dual EAV/wide-column. (Gaps DAT-1/2/3) - In-memory
DataTablereporting + 75 copy-pasteDownload*methods + 12 bespoke report tools. (Gaps PERF-1, QA-2) - Opaque non-JWT tokens, ROPC, AllowInsecureHttp, wildcard CORS, in-memory refresh store, client-set token TTL. (Gaps SEC-6…9, API-3)
- Polling Windows-service sprawl (8-timer notifier, FTP folder-watch) + manual 348-
.sqlmigrations + zero observability. (Gaps OPS-1/2/3) - God classes & dead code —
LibraryController13.7k LOC,ReportController12.9k,Main.js~34k,.bak/_obsoletefiles, tripleMainContext. (Gaps ARC-4/6, QA-3/4/5) - Marketed-but-unbuilt features — OTDR
.sortrace analysis, FWA/P2MP/4G/3D-LOS feasibility, voice-based creation, WhatsApp provider (stub). (Spec §7; build properly only if needed, do not “carry” non-existent code) - In-app DB backup download + long-query killer — platform-ops concern, not product. (§14)
postgres_fdwcross-customer data exposure,tbl_covid_*/temp_*_csvdead/orphan data paths, in-DB_bkp/_testfunction copies. (DB 00 §4, DB 06)
Compiled 2026-06-18. Sources: SmartInventory Product Specification, WebUI Screen Catalog, WebUI Usage & API Map, Splicing & Entity Forms, Live Entity Grounding, Mobile App Analysis, database/00–08, Customer Forks Analysis, Legacy Architecture Study; dispositions grounded in the Gaps & Improvement Analysis and the config-not-code thesis. Describes the generic product on develop; per-customer fork features are out of scope except as drivers of “Carry as config” dispositions.