Skip to content

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

FeatureWhat it doesEvidenceDisposition
Dual basemap (Google or OSM)Selectable web-mercator basemap under the network overlayProduct Spec §3.6 (MapAuthType=KEY|CLIENT, GoogleMapController); Screen Catalog §2 (si.toggleBaseMap)Carry as-is (basemap pluggable; MapLibre + PMTiles target)
No-map / white canvasRender 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 tilesProduct 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 statusProduct 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 countsCollapsible NETWORK LAYERS panel grouped by layer_group_master/_mapping, per-layer countsScreen Catalog §2; DB layer_group_master, layer_group_mapping, ViewLayerGroupsMappingCarry as config (tree grouping/order is tenant data)
Per-layer visibility / select / edit / label toggles + zoom boundsShow/hide, selectability, editability, labeling, min/max zoom per layerScreen Catalog §2; DB layer_details (isvisible, minzoomlevel/maxzoomlevel, map_layer_seq)Carry as config
Planned / As-Built / Dormant lifecycle sub-togglesFilter the map by network status per layerScreen Catalog §2 (si.handlePrClick, si.handleChClick)Carry as-is (lifecycle is the real product dimension; network_status P/A/D)
Advanced / project-specification filtersFilter the map by project/planning/workorder/purpose codeScreen Catalog §2 (si.GetProjecSpeciFilter); Spec §3.1.11 (BLO)Carry as-is
deck.gl WebGL high-volume vector overlayGPU vector rendering for large feature setsProduct Spec §3.6 (deck.gl 8.9 + 9.0 bundled); QA-5Carry but redesign (single modern stack; one deck.gl/MapLibre version)
Client topology / schematic libs (jsts, jsPlumb, d3)Topology ops, splice editor, schematic trees in-browserProduct Spec §3.6; Splicing docCarry but redesign (componentized; one d3/topology stack, not v3+v5)
Vector layers + delta syncFetch vector data full / geom-filtered with delta syncProduct Spec §3.6 (VectorLayerController); layer_details.is_vector_layer_implementedCarry 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 06Carry as config (the one true “new layer without code” path — generalize it)
Ortho / raster imagery overlayOverlay georeferenced raster ortho imagesProduct Spec §3.6 (OrthoImageLayerController); Screen Catalog §5.5 (ViewOrthoImage)Carry as-is
Business layersToggle arbitrary business overlaysProduct Spec §3.6 (BusinessLayerController, BLLYR)Carry as config
Redline / markupPoint/line/polygon annotations with task workflow (ADD/EDIT/DELETE, assigned-by/to)Product Spec §3.6 (RDL, RedlineController); Screen Catalog §3.5, dlg-05Carry as-is
Saved workspacesSave/restore map workspaces per userProduct Spec §3.6 (WorkSpaceController); Screen Catalog §2 (si.getWorkSpaces)Carry as-is
Map print / print managerPrint map to PDF with templates, by drawn selection shapeProduct Spec §3.6 (PrintController, MapLayoutController, PMP, PMM-*); PrintLog/PrintSavedTemplateCarry but redesign (generic async export/print job framework)
Map layout / auto-draw toolsAuto-generate entities within a drawn polygon/square/rectangleProduct Spec §3.1.2 (MAP-LAYOUT, EAD); Screen Catalog §3.1 (si.toggleLayout)Carry as-is
Region/circle navigatorIndia state→district tree (~2,544) to zoom/scope map; province boundariesScreen Catalog §3.9; Spec §3.5 (RegionProvinceController)Carry but redesign (generic admin-geography hierarchy, not India-hardcoded)
Point buffer / radius toolDraw a radius buffer around a pointScreen Catalog §3.1 (si.EnablePointBufferRadius)Carry as-is
Per-user spatial row filteringMap rows filtered to a user’s permitted geographyProduct Spec §6 (user_permission_area, MapServer %Filter%); DB 08Carry but redesign (validated filters at tile gateway; not injectable .map placeholders)
SRID 4326 throughoutAll geometry in WGS84Product Spec §3.6; DB 00 §4Carry 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)

GroupLayers (entity types)Evidence
OSP civil / structures (points)Pole, Manhole, Handhole, Structure/Chamber, Vault, Cabinet, Tree, POI, Central_Office, GI Pipe, Rebar, ReinstatementDB 00 (point_master: Pole 183k, Structure 142k, Manhole 84k); Spec §4; Screen Catalog §3.1
OSP span / linear (lines)Cable, Trench, Duct, Microduct, Conduit, PatchCordDB 00 (line_master: Cable 95k, Duct 94k, Trench 76k); Spec §4
Distribution / splicersSpliceClosure, SpliceTray, FMS, FDB, FDC, FDP, POD, MPOD, DLC, DP, Coupler, ATB, PatchPanelDB 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), OpticalRepeaterDB 04 (isp_floor_info 142k, isp_shaft_info 176k); Spec §3.1.7; layer_details.is_isp_layer=20
CPE / customer-edgeONT/ONU, CPE, Splitter, Customer, FATDB 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 overlayAntenna, Sector, Tower, TowerPOP, MicrowaveLink, InstallationInfoSpec §3.9, §4; DB 07 (att_details_tower 85 cols, att_details_microwavelink 114 cols)
Planning polygons / boundariesArea, SubArea, CSA_Boundary, DSA_Boundary, SurveyArea, ROW, RestrictedArea, DemandPointDB 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 / connectivityFiberLink, OSPSplicing, PortInfo, FATConnection, ConnectionInfo (edges)DB 04; Spec §4
Commercial / opsFault, MaintenanceCharges, Lmc, Serviceability, Feasibility, DarkFiberFeasibility, Competitor, NetworkTicketDB 07; Spec §4

2.2 Data-model mechanisms

FeatureWhat it doesEvidenceDisposition
Geometry/attribute decoupling (*_master + att_details_<e>)Geometry in 3 master tables, attributes in 1:1 att_details_*, joined by integer system_idDB 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/capabilitiesDB 00 §3(b), DB 01; Gaps DAT-3Carry 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 metadataDB 02, DB 05 (item_template_master 230 rows); Screen Catalog §5.4Carry as config (vendor-spec / BOQ catalog)
Dynamic-attribute EAV overlayCustom fields per entity via dynamic_controlsentity_additional_attributesSpec §3.5 DynamicForm; DB 02 (3 EAV generations); Screen Catalog §5.6Carry but redesign (single extensibility mechanism — typed schema registry, retire dual wide-column+EAV)
Entity category / sub-type discriminatorSub-classify an entity (Cable: Feeder/Distribution/Drop)DB 01 (entity_category); design_id_generator.feature_typeCarry as-is (type/subtype is core)
Network-id hierarchy spine (network_id/parent_network_id)Self-referential containment/scoping code in 207/190 tablesDB 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 timeDB 01Carry 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 servingDB 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 fieldsDB 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 ledgerAppend-only Planned→As-built→Dormant transitionsDB 01 (entity_status_history 1.35M rows)Carry as-is (the real lifecycle signal; feeds event store)
Bulk lifecycle conversion over radiusBulk convert assets to as-built/dormant/decommissioned within a radiusSpec §3.1.4 (BUP, BulkUpdateController)Carry as-is
EAV-into-other_info JSON saveDynamic-form fields serialized into an other_info JSON column on the entitySplicing/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 EAVPivot typed-EAV attributes back to a wide vw_*_report view; rebuild on attr-def changeDB 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 remappingDisplay label differs from internal entity (FAT→FDB, CPE→ONT, ATB→HTB…) per layer_detailsForms doc §3.1; Live GroundingCarry as config (per-tenant terminology override)
Denormalized counters / label maintenanceTriggers keep duct/cable counts, calculated lengths, display labels, region/province in syncDB 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

FeatureWhat it doesEvidenceDisposition
Explicit connectivity edge tableDirected 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 registryOne row per (cable, tube, core, fiber) with usage/connection status, colorsDB 04 (att_details_cable_info 1.01M rows)Carry as-is (fiber-strand granularity is core; model strands as edges/ports)
Drag-drop splicing GUIVisual port-to-port splice editor (cable↔ODF↔CPE) using jsPlumbSpec §3.1.5 (MNS, SplicingController); Splicing doc; Screen Catalog §3.2Carry as-is (re-implement on typed graph)
Manual splice-herePort-to-port splice at a clicked pointScreen Catalog §3.2 (splicing.spliceHere); fn_splicing_save_connectionsCarry as-is
Bulk splicing uploadImport splice connections from a file by splicing typeSpec §3.1.5 (BLK-SDU); Screen Catalog dlg-13Carry but redesign (generic typed import)
Splice validation rulesValidate splice eligibility before saveDB 04 (fn_validate_splicing 400L)Carry as config (splice rules as data, not hardcoded proc)
Tray / closure / port managementManage trays, closures, port inventory + statusSpec §3.1.5; DB 04 (att_details_splice_tray, isp_port_info ~301k)Carry as-is
Core/port status vocabularyVacant/Reserved/Faulty/Connected with color, is-manual, is-splicing-allowedScreen Catalog §5.5 (port_status/ViewPortStatus); DB 04Carry as config (controlled vocabulary as tenant data)
Auto core/port status sync triggerFlip strand is_connected/status when a connection changesDB 04 (fn_trg_update_core_port_status 342L)Carry but redesign (event-driven projection, not DB trigger)
OLT patching workspaceOLT 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 viewConnect ODF ports to cablesSpec §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.4Carry as config
Model-rule-aware patch matrixPatch matrix renders only legal port connections per model rulesSplicing doc §2.2-2.3 (Splicing/ConnectionEditor, ConnectionBuilder.js, fn_export_patching_report)Carry as config
Through-connection semanticsDistinguish splice vs pass-through (same core in/out) on an edgeDB 04 / Splicing doc §1.3,§1.6 (is_through_connection, grey edge)Carry as-is
A/B cable-end metadataMark which cable end (A/B) an edge attaches toSplicing doc §1.6 (is_cable_a_end); Live Grounding (a/b endpoint model)Carry as-is
Range-based bulk cross-connectSplice a range of cores between two cables in one actionSplicing doc §1.6 (spliceAll/cableToCableSplicing)Carry as-is
OSP/ISP split re-pointingRe-point existing connections when a cable is splitDB 04 (fn_splicing_save_osp_split_connection/_isp_split_connection)Carry as-is
FAT accept / reset temp splicingConfirm or discard auto-generated splicesSplicing doc §1.8 (fn_fat_update_connection_status, fat_process_running_status lock)Carry as-is
Splice tray modelTrays inside a closure; edges reference source/dest trayDB 04 (att_details_splice_tray; connection_info.*_tray_system_id)Carry as-is
Splice diagram → image/PDF exportExport the jsPlumb splice diagramSplicing doc §1.1 (html2canvas + canvg)Carry as-is
HOTO optical readingsCapture OTDR/LSPM tube/fiber readings at handover (offline-capable)Mobile doc (NetworkEntityAPI/GetOpticalHotoDetails/SaveOpticalHotoDetails)Carry as-is
Splitter loss referenceInsertion loss (dB) per split ratio × wavelengthDB 08 (splitter_loss_master)Carry as config
Termination-point connectivity rulesWhich entity types may terminate on which host layer (ISP/OSP TP)DB 08 (termination_point_master); Screen Catalog §5.5Carry as config
Connection / single path finderTrace connectivity from a port/pointSpec §3.1.5 (CPF, CommonPathFinderController); Screen Catalog §3.2Carry but redesign (native graph traversal, not cursor-walk + recursive CTE)
CPF → KML exportExport a connection path to KMLSpec §3.1.5 (CommonPathFinderController)Carry as-is
Fiber-cut tracingTrace which fibers/circuits a cut affectsSpec §3.1.6 (FBC, FiberCutTracingController); DB 04 (fn_otdr_get_fiber_cut_details)Carry but redesign (graph impact-trace)
Fault-location detail traceLocate fault along the networkDB 04 (fn_api_get_fault_location_detail 433L)Carry but redesign (graph)
Schematic / single-line diagram (SLD)Generate splice/topology schematic & butterfly diagramsSpec §3.1.9 (ReportController SLD/butterfly); DB 04 (fn_get_schematic_view 478L)Carry as-is (capability); redesign generation
End-to-end POP→premises schematicd3 tree from POP to premisesSpec §3.1.9 (LogicalDiagramController, mobile)Carry as-is
FAT auto-splicing engineAuto-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 standardTube and core color sequence (color char → color)Screen Catalog §5.7 (TubeCoreColorSettings); Splicing docCarry as config
Cable map color settingsColor by cable type/category/fiber-countScreen Catalog §5.7 (ViewCableMapColorSettings)Carry as config
Optical link budgetPer-wavelength optical power budget with splitter-loss tablesSpec §3.1.5 (VOIL, OpticalLinkBudgetController); Screen Catalog §5.9 (Splicing/viewlossdetails)Carry as-is (capability); loss tables as config
OTDR distance/length metadataStore OTDR distance/length scalars on assetsSpec §3.1.5, §7 (metadata only — no .sor import)Carry but redesign (ingest real .sor traces + time-series for predictive maintenance — Gaps AI-3)

FeatureWhat it doesEvidenceDisposition
Fiber-link / circuit inventoryEnd-to-end circuit definition; GIS-vs-cable lengthSpec §3.1.6 (FLK, FiberLinkController); DB 04 (att_details_fiber_link)Carry as-is
Link search (common path finder)Search fiber linksSpec §3.1.6 (CMPF, si.openLinkSearch)Carry as-is
Customer fiber-link searchSearch links by associated customerSpec §3.1.6 (CFLF)Carry as-is
Fiber allocation toolAllocate fibers/cores to linksSpec §3.1.6 (FiberAllocationToolController)Carry as-is
Path / link / location trackerTrack a path/route across the networkSpec §3.1.6 (LTK, OpenPathTracker)Carry but redesign (graph)

5. Cable / Linear-Asset Operations

FeatureWhat it doesEvidenceDisposition
Split linear asset (cable/duct/trench/microduct)Split at a point, preserving attributes & connectivitySpec §3.1.2 (SPLIT-*, layer_details.is_split_allowed)Carry as-is
Merge cablesMerge adjacent cable segmentsSpec §3.1.2 (MRG-CABLE, si.showMergeCablesPopup)Carry as-is
Fiber / tube / core editingEdit fiber counts, tube/core structure & colorsSpec §3.1.2; Splicing docCarry as-is
Loop & slack managementModel fiber loops and slackSpec §3.1.2 (Loop/Slack; UploadTempLoop/UploadTempSlack)Carry as-is
Entity-along-direction / layoutDraw/extend entities along a drawn directionSpec §3.1.2 (EAD)Carry as-is
Asset cloning (single + group)Clone single or grouped entities with dependentsSpec §3.1.1 (GRP-LIBRY, si.GroupClone); layer_details.is_clone/is_multi_cloneCarry as-is

6. Network Planning & Auto-Design (SmartPlanner)

FeatureWhat it doesEvidenceDisposition
Demand-point uploadUpload demand points (lat/long / homepass count)Spec §3.2 (SmartPlannerController)Carry as-is
Design-rules engineSplitter ratios, max distances, network type (UG/aerial), topology (ring/linear), manhole spanSpec §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 clusteringAuto & manual clustering of demand points into service areasSpec §3.2Carry as-is
Auto network designAuto-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 planningStage planned nodes, then materialize real entitiesDB 05 (temp_auto_network_plan 400k rows / att_details_network_plan)Carry but redesign (no un-GC’d 4GB staging; eventful)
Route optimizationGoogle Directions + proprietary LeptonRouteAPI; restricted-area avoidance; trench-by-landbaseSpec §3.2 (routingAPIUrl, UploadTempRestrictedArea)Carry as-is (capability); pluggable routing engine
Interactive fine-tuningDrag splitter/cable path; change ratios on mapSpec §3.2Carry as-is
Plan clone / versionClone and version plansSpec §3.2; DB 05 (bom_boq_revision_info)Carry as-is
Plan deliverables (BOM/KML/SLD/splice plan/tower-building BOM/PDF)Export design artifactsSpec §3.2Carry as-is
MDU in-building planIn-building distribution plan for MDUsSpec §3.2Carry as-is
Plan tool / bulk plan toolOpen planner UI / bulk planningSpec §3.2 (PTL/BPTL); Screen Catalog §3.8 (Sprout)Carry as-is
Planner ↔ inventory integrationImport planner designs into inventorySpec §3.2 (SPI, IntegrationController.ImportDataAPIRequest)Carry as-is
Design-ID generatorMint 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 computationCompute homepass/potential within a drawn areaScreen Catalog §3.6 (initiateDrawingsPotential, ComputeHomePass); DB 08 (fn_get_area_potential 905L)Carry as-is
Customer auto-provisioningAuto-create ONT/drop + splice to splitter port from CAN/box/port + WCRDB 05 (fn_auto_provisioning 631L)Carry as-is
Point-to-point auto-planningAuto-plan a P2P backbone segmentDB 05/08 (fn_process_point_to_point_network_planning)Carry as-is

7. BOM / BOQ & Costing

FeatureWhat it doesEvidenceDisposition
BOM/BOQ material take-offQuantity × rate take-off over assets in a drawn areaSpec §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 itemDB 05 (230 rows); Screen Catalog §5.4Carry as config
FSA-wise overhead-formula engineApply FSA-level overhead/buffer formulas to BOMSpec §3.1.9 (BOMBOQShowModelforBOMDetail); DB 05 (extra_buffer_cost_bom_percentage)Carry as config
Construction BOMOverhead-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 itemsScreen Catalog §5.4 (is A/B/C-RFS item)Carry as config
BOM by selection shapeBOM over polygon/rectangle/circle/FUD selectionSpec §3.1.9 (BMQ-POLY/RECT/CIR/FUD)Carry but redesign (one selection→export framework)
FSA unlock dashboardFeasibility/FSA unlock workflowSpec §3.1.9 (BMQ-FUD, FSAUnlockDashboard)Carry as-is
BOM revision trackingTrack BOM revisionsDB 05 (bom_boq_revision_info 467 rows)Carry as-is
Service-cost catalog (per spec)Per-spec named service costsScreen Catalog §5.4 (ViewSpecificationServices)Carry as config

8. Feasibility / Serviceability (SmartSQ / SmartFeasibility)

FeatureWhat it doesEvidenceDisposition
Single-address feasibilityPoint-to-point feasibility for one address; capture inside/outside/LMC segmentsSpec §3.4 (FeasibilityDetailsController); DB 07 (feasibility_input/history/geometry)Carry as-is
Bulk feasibility (Excel)Batch feasibility for many uploaded addressesSpec §3.4 (BulkFeasibilityController)Carry as-is
FTTH / ONT reachabilitySplitter-to-customer last-mile routing; per-cable core availabilitySpec §3.4 (BLFeasibilityRouting, BLCable.GetAvailableCores)Carry as-is
Route / core availability & network statusPlanned-vs-as-built routing; P2P multi-coreSpec §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 engineDijkstra over a cable-snapshot routing graphDB 05 (fn_sf_get_routespgr_dijkstra); DB 07Carry but redesign (live topology projection, not batch-rebuilt snapshot; fix EPSG:26986-on-India length bug)
External routing engineWalking-mode directions via external RoutingAPIUrl (JWT)Spec §3.4 (RouteAPIHelper)Carry as-is (pluggable)
Cable-type price listCores → material/service price per unitDB 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, BOMSpec §3.4 (SmartFeasibility/ReportController)Carry but redesign (one export engine)
Dark-fiber feasibility (P2P)Existing-vs-new-build dark-fiber routing; GeoJSON route geometrySpec §3.4 (DaFiFeasibilityController); DB 07 (dark_fiber_feasible_routes)Carry as-is
Runtime serviceability for OSSSplitter/GPON reachability by lat/lng; RFS/design-ID status; XML config stateSpec §3.4 (IntegrationServices/ServiceController, ServiceabilityWinService)Carry but redesign (event-driven API, not FTP folder-watch timer)
Feasibility access logWho ran a feasibility, from whereDB 07 (user_feasibility_history)Carry as-is (folds into audit)
FWA / P2MP / 4G / 3D-LOS feasibilityMarketed but unverified in codeSpec §3.4, §7 #7Drop / do-not-carry as-claimed (treat as net-new if needed; not a real legacy capability)

9. Work-Force Management / Operations (SmartOps / WFM)

FeatureWhat it doesEvidenceDisposition
Assign / view job orders (+ RM variants)Create/assign/track job orders to field engineers; reporting-manager viewsSpec §3.3.1 (WFM-AJO/WFM-VAJO, WorkforceController); Screen Catalog §3.3, dlg-02Carry as-is
Trouble-ticket-sourced job ordersJOs from trouble ticketsSpec §3.3.1 (WFM-TTAJO/WFM-TTVAJO)Carry as-is
Job packsBundle JOs into packs with stage trackingSpec §3.3.1 (JobPackController, JOB-PACK)Carry as-is
Network ticketingOpen/close tickets from ONT_HOBS / OUTAGE / Trouble-Ticket sourcesSpec §3.3.1 (NWT, NetworkTicketController); DB 07 (att_details_networktickets)Carry as-is
Configurable ticket state machineOrdered workflow per (module, order-type, service-type, RFS-type)DB 07 (ticket_steps_master 64 rows)Carry as config
Ticket-type vocabularyTicket types with color/module (Survey/Construction/O&M/Audit/…)Screen Catalog §5.5 (ticket_type_master); DB 07Carry as config
Per-(type,role) ticket RBAC gridcreate/edit/view/approve per ticket type × roleDB 07 (ticket_type_role_mapping 154 rows)Carry as config
3-tier route-issue approvalMulti-level approval workflow for route issuesSpec §3.3.1 (WorkforceController approval twins)Carry but redesign (eventful approval)
Roster managementCrew/shift rosterSpec §3.3.2 (RosterManagementController)Carry as-is
Timesheet / attendanceUser timesheets, check-in/out, availabilitySpec §3.3.2 (UserTimeSheet); DB 07 (user_timesheet, working_days)Carry as-is
FE appointment-slot bookingReserve appointment slots; FE skills/availabilityDB 07 (tbl_wfm_slot, tbl_wfm_slot_confirmation, tbl_wfm_skill); Spec §3.3.4 (TicketController)Carry as-is
Order/service taxonomyOrder types, service types, JO category/type masters, service facilitiesDB 07 (tbl_wfm_ordertype/servicetype, wfm_jo_type_master, wfm_service_facility_master)Carry as config
JO / TT / survey / visit reportsJob-order, trouble-ticket, survey, visit reportsSpec §3.3.3 (WFM-JOReport/WFM-TTJOReport/WFM-SR/WFM-VR); DB 07 (fn_wfm_*_report)Carry but redesign (one report engine)
WFM dashboardSLA / utilization chartsSpec §3.3.3 (WDBRD, DashboardController)Carry as-is
JO lifecycle SMS + email notifications8-timer notification service (unassigned/ack/delayed/no-task/reminder) + 2 daily emailsSpec §3.3.4 (WFMNotificationService, wfm_notification_template)Carry but redesign (event-driven, not 8 polling timers — Gaps OPS-2)
View user permission areaVisualize a user’s permitted geographyScreen Catalog §3.3 (toggleViewUserPermissionArea)Carry as-is

10. Survey & Field Workflows

FeatureWhat it doesEvidenceDisposition
Field survey (single/bulk)Survey assignment & captureSpec §3.3.2 (SVM/SVA/SVB, SurveyAreaController)Carry as-is
Building surveySurvey buildings; upload buildingsScreen Catalog §3.7 (si.showWLTB('Survey'), OpenSurveyBuilding, toggleBuildingUpload)Carry as-is
Survey assignmentAssign survey areas to crewsScreen Catalog §3.7 (Opensurveyassignment)Carry as-is
Acceptance testing (AT)AT acceptance recordsSpec §3.3.2 (ATAcceptance; layer_details.is_at_enabled)Carry as-is

11. Data Ingestion / Bulk Upload / ETL

FeatureWhat it doesEvidenceDisposition
Bulk import (Excel/KML)Primary uploader into temp_du_* staging → main tablesSpec §3.7 (DUP/UPB, DataUploaderController); DB 06Carry 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 ExecutionScreen Catalog dlg-14; DB 06 (fn_uploader_*)Carry as-is (good UX flow)
~46 per-entity uploadersPer-entity staging objectsSpec §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 dictionaryPer-entity column map (display/db name, type, mandatory, dropdown-base, kml/excel attr)Screen Catalog §5.5 (data_uploader_template 884 rows); DB 06Carry as config
Bulk-update template configWhich columns a bulk-update template carriesScreen Catalog §5.2 (BulkUpdateTemplate)Carry as config
Bulk attribute updateUpdate attributes in bulk via uploaded fileSpec/Screen Catalog dlg-15 (si.toggleBulkUpdate)Carry as-is
Spatial format conversion (SHP/TAB/DXF/GeoJSON/KML)Convert via bundled ogr2ogr/GDAL + SharpKmlSpec §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 clientSpec §3.7 (SmartInventoryHub); Gaps OPS notesCarry as-is (decouple from Forms auth)
Upload-job ledgerTrack upload jobs (total/success/failed/logs)DB 06 (upload_summary 1,174 jobs); Screen Catalog dlg-14Carry as-is
Upload parent/termination validationResolve default parent, snap line A/B ends to point entities within a buffer, normalize status, detect dup network_id, enforce geo-scopeDB 06 (fn_uploader_validate_parent_details, fn_uploader_check_termination_points)Carry but redesign (declarative validation pipeline)
Custom-projection reprojection on uploadReproject configurable source SRID → 4326 at ingestDB 06 (ISCUSTOMPROJECTIONALLOWED/customProjection)Carry as config
Licensed-user-cap enforcementEnforce licensed web/mobile user counts at bulk-user uploadDB 06 (fn_bulk_user_upload_chk_limit)Carry but redesign (entitlements service)
Landbase parallel uploaderSchemaless 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 + uploadView/upload external/uploaded data layersSpec §3.1.11 (EDV/EDV-UPLD)Carry as-is
XML builder dashboardBuild/export XML deliverablesSpec §3.1.9 (P-XML, xmlbuilderdashboard); Screen Catalog dlg-16Carry as-is

12. Reporting & Export

FeatureWhat it doesEvidenceDisposition
Excel / CSV export (NPOI)Entity & report exportsSpec §3.1.9 (ReportController, 119 NPOI refs)Carry but redesign (streaming, not in-memory DataTable — Gaps PERF-1)
PDF reports (iTextSharp)Printable PDFsSpec §3.1.9Carry but redesign
KML / GIS exportKML export of entitiesSpec §3.1.9Carry as-is
DXF (CAD) exportExport network to CAD DXFSpec §3.1.9Carry as-is
Shapefile exportExport to ESRI ShapefileSpec §3.1.9Carry as-is
Barcode label reportsBarcode/QR label sheetsSpec §3.1.1, §3.1.9 (is_barcode_enabled = 25 layers)Carry as-is
SLD / butterfly diagramsSchematic diagrams of splice/topologySpec §3.1.9; DB 04Carry as-is
Export by selection shapeExport over polygon/rect/circle/log selectionsSpec §3.1.9 (EXRPT, EXRPT-POLY/RECT/CIR, EXPRT-LOG)Carry but redesign (one selection→export framework)
Export-assets / association reportBulk asset exports; parent/child associationsSpec §3.1.9 (EXASSRPT); Screen Catalog dlg-11 (association_mapping)Carry as-is
Split / audit-history export by selectionSplit-report & audit-history export by geometrySpec §3.1.9 (SPLIT_EXRPT, AUDIT_HISTORY_EXRPT)Carry but redesign
Utilization reports + scheduled emailCapacity/utilization reporting; scheduled emailSpec §3.1.9 (UTL, UtilizationEmailScheduler); DB 07Carry but redesign (event-driven scheduler)
Utilization thresholds / bandsPer-entity/region Low/Moderate/High/Over % bandsScreen Catalog §5.5 (entity_utilization_settings 33 rows); DB 07 (fn_utilization_get_level)Carry as config
LMC (last-mile) reportLast-mile connectivity report with time-windowSpec §3.1.9 (LMC, IsLMCReportEnabled); Screen Catalog dlg-12Carry as-is
VSAT reportVSAT site reportSpec §3.1.9 (VSAT)Carry as config (vertical-specific)
Geo-tagged image reportReport of geotagged photos; show on mapSpec §3.1.9 (GTI-W); Screen Catalog dlg-06Carry as-is
Async export to FTPLarge exports delivered to FTP with poll-logSpec §3.1.9 (ExportReportLog); Screen Catalog §3.6Carry but redesign (queue + object storage, not FTP)
Report column pickers (report/history)Which columns appear in entity reports/historyScreen Catalog §5.7 (ReportColumnSettings, HistoryColumnSettings); layer_detailsCarry as config
12 bespoke “draw→filter→export+poll-log” report toolsThe whole report family follows one patternScreen Catalog §3.6, §7 #4Carry 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.)

FeatureWhat it doesEvidenceDisposition
Create field entitiesONU/ONT, Splitter, Cable, Manhole, Handhole, SEB, SpliceClosure, Customer, Pole, Tree, WallMount, POD/DLC/MPODSpec §3.8 (LibraryController, BuildingController, ISPController)Carry as-is
Offline reference dataCache legends, layer settings, item templates, vendors, dropdowns offlineSpec §3.8 (OfflineController); layer_details.is_offline_allowedCarry as-is
Vector delta syncSync vector data deltas to deviceSpec §3.8 (VectorLayerController)Carry but redesign (true CRDT/delta sync; legacy has no real conflict merge — Gaps MOB-1/2)
Geo-tagged photo/document uploadAttach photos/PDFs with geotagSpec §3.8 (LibraryController.UploadAttachment)Carry as-is
Barcode / QR scanningScan/generate asset barcodesSpec §3.1.1; layer_details.is_barcode_enabled + barcode_columnCarry as-is
Customer allocation to ONUProvision a customer to an ONT in the fieldSpec §3.8 (MainController/CRM)Carry as-is
Mobile connection path finderTrace connectivity from a point on deviceSpec §3.8 (ConnectionController, MainController)Carry as-is
Mobile splicing with image captureMap-based splicing + photoSpec §3.8 (SplicingController, ConnectionController)Carry as-is
Mobile layer managementToggle map/landbase layersSpec §3.8 (LegendDetailsController, LandBaseController)Carry as-is
Mobile network tickets / surveysFault tickets & survey-area statusSpec §3.8 (NetworkTicketController, SurveyController)Carry as-is
Mobile WFM job lifecycleJob list → status update → attachment → completionSpec §3.3.4 (FEController, wfm/mobile/v1.0)Carry as-is
CPE inventory issue/return (Converge ERP)Issue/return CPE inventory to ERPSpec §3.3.4 (ConvergeERPService, CreateInvIssue/Return)Carry as config (pluggable connector)
Mobile OTP / 2FA + signupOTP generate/verify, signup, location trackingSpec §3.8 (OTPController, SignInController)Carry but redesign (OIDC; not opaque tokens)
Force-login / single-session / MAC bindingSingle active session per user; MAC-boundProduct Spec §6 (SmartInventoryServices token flow)Carry as-is (capability); redesign mechanism
GPS location tracking / location deltaTrack FE locationSpec §3.8 (IntegrationServices/LocationDeltaController)Carry as-is
CRM tickets / static help (mobile)Query CRM tickets; static help contentSpec §3.8 (CRMController)Carry as-is
APK distributionPublish/serve the mobile APKSpec §1 (SI.MobileOps, HTTP Basic)Carry but redesign (store distribution; not Basic-auth service)
Offline edit ledger + blind-replay syncQueue offline create/update/convert/relocate as JSON; UI-triggered replay; server system_id written backMobile 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 offlineMobile doc (LegendDetails/DownloadMapTiles, mbtiles_dao)Carry as-is
Offline master pullSeed local DB: vendors/specs/dropdowns/layer-mapping/legends/colors/landbase/in-progress ticketsMobile 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 customerMobile doc (getDistributionBoxInfo, getSplitterPortInfo, GetWCRMaterial, savecustomerassociation)Carry as-is
Customer signature captureSignature pad for CPE activationMobile doc §5.7 (painter)Carry as-is
OCR text scanScan text into fieldsMobile doc §5.3 (ocr_scan_text)Carry as-is
Root/jailbreak/mock-GPS guardBlock compromised devices and fake GPSMobile doc §5.11 (safe_device, rooted_devices.dart)Carry as-is
Encrypted local-DB backupAES-256-CBC encrypted ZIP of the on-device SQLiteMobile doc §7 (aes_encrypt_decrypt.dart)Carry as-is
Build-flavor multi-tenancy (mobile)One app, ~10+ customer flavors by package name + deep-link configMobile doc §1 (environment.dart)Carry but redesign (runtime tenant resolution, not build flavors)
Voice-based network creationImplemented 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

FeatureWhat it doesEvidenceDisposition
Layer configuration (5 of ~80 flags)Edit min-zoom + mobile flags per layer in UIScreen 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 + mappingDefine groups; map layers→groups + orderScreen Catalog §5.3 (layer_group_master, layer_group_mapping)Carry as config
Dynamic Form builderAdd custom textbox/dropdown attributes per entityScreen 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 masterLandbase-layer vocabulariesScreen Catalog §5.8 (landbase_dropdown_master)Carry as config
Search / Info / Label settingsWhich columns are searchable / shown in identify / used as label per entityScreen 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 rulesScreen Catalog §5.4 (CreateModel/ViewModels, isp_model_*)Carry as-is (genuinely good; re-imagine on typed model — Screen Catalog §7 #5)
Model image librarySVG/image assets per modelScreen Catalog §5.4 (ViewModelsImage)Carry as config
Vendor / vendor-spec / accessory mastersVendors, BOQ catalog items, accessoriesSpec §3.5; Screen Catalog §5.4 (vendor_master, item_template_master)Carry as config
Vendor-spec bulk uploadBulk-load catalogScreen Catalog §5.4 (UploadVendorSpecification)Carry as-is
Port-status settingsThe core/port status enum governing splicingScreen Catalog §5.5 (ViewPortStatus, port_status)Carry as config
Change network code (re-codification)Recompute an entity’s network idScreen Catalog §5.5 (ChangeNetworkCode, fn_get_new_networkcode, entity_network_code_history)Carry as-is (capability); redesign engine
Template column data dictionaryPer-entity column metadata for uploadsScreen Catalog §5.5 (ViewTemplateColumn, data_uploader_template)Carry as config
Termination-point settingsWhich entities act as ISP/OSP termination pointsScreen Catalog §5.5 (ViewTerminationPoint)Carry as config
Utilization settingsPer-entity/region utilization bandsScreen Catalog §5.5 (entity_utilization_settings)Carry as config
Association mappingAllowed entity-to-entity associations + subtypeScreen Catalog §5.5 (AssociationMapping, association_mapping)Carry as config
Ticket-type masterTicket-type vocabularyScreen Catalog §5.5 (ticket_type_master)Carry as config
Layer icon mappingPer-layer/status icon (196 rows)Screen Catalog §5.5 (LayerIconMapping)Carry as config
User-activity-log settingsWhich controller actions are auditedScreen Catalog §5.5 (ViewUserActivityLogSettings)Carry but redesign (audit everything via event store)
Tube/core color + cable map colorFiber color standards; cable color by type/category/fiber-countScreen Catalog §5.7Carry as config
Connection-label settingsRules for connection/edge labels; sync-all-labelsUsage/API Map (AdvancedSettings/ConnectionLabelSettings/SyncAllLabels)Carry as config
RCA master (root-cause vocab)Root-cause dropdown master for trouble ticketsUsage/API Map (WFM/RCAMaster); DB 07 (wfm_tt_type taxonomy)Carry as config
Voice-command masterConfigurable voice-command vocabularyUsage/API Map (AdvancedSettings/VoiceCommandMaster)Carry as config (only if voice is built)
Attachment-type masterDocument types × workflow state for attachmentsDB 08 (attachment_type_master)Carry as config
File-storage provider selectionPluggable 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 hookAV/CDR scan of uploads (e.g. OPSWAT MetaDefender)Forks §4#9 (Airtel)Carry as config (pluggable upload-pipeline hook)
Per-tenant naming-rule engineMask grammar + region resolution + ID generation per tenantForks §4#3 (ACT/BharatNet)Carry as config (generalize codification — see §18)
KPI masterDefine KPIsSpec §3.5 (KPIMasterController)Carry as config
Optical link budget masterWavelength/splitter-loss tablesSpec §3.5 (OpticalLinkBudgetController)Carry as config
Project / region / area mastersProjects, project areas, regions/provinces, province boundariesSpec §3.5 (ProjectController, RegionProvinceController)Carry as config
Settings family (global/config/advanced/email)Key/value/typed global settingsSpec §3.5 (global_settings)Carry but redesign (typed, validated, per-tenant config; not eager unguarded reads — Gaps MT-3)
DB backup download + long-query killerDownload DB backups; kill long queriesSpec §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

FeatureWhat it doesEvidenceDisposition
User management (3-step wizard)User details → module rights → work-area geo scopeScreen Catalog §5.1 (user_master, user_permission_area)Carry as-is
Roles + per-entity CRUD permission templatesEntity × (Planned/As-Built/Dormant) × (Add/Edit/Delete/View) matrixScreen Catalog §5.2 (AddTemplate, role_permission_entity)Carry as-is (rich RBAC; keep granularity)
Role↔module mappingGate which modules/layers a role can useScreen Catalog §5.2 (UpdateRoleModule, role_module_mapping)Carry as config
Geography scoping (Country→Region→State)Scope a user to a geographyScreen 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 permissionsCRUD/ticket-create permission boxed by geographyDB 08 (layer_permission_boundary, fn_get_create_ticket_permission_by_geom)Carry as config
Template-based CRUD rightsPer-template per-layer×lifecycle CRUD grantsDB 08 (layer_rights_template_permission 1,287; role_permission_entity 2,382)Carry as config
Auto-grant new geography to all-scope usersNew provinces auto-granted to all-province usersDB 08 (fn_trg_set_user_permissions)Carry but redesign (explicit scope rules)
Bulk user uploadExcel bulk user load with role/module mappingScreen Catalog §5.1 (BulkUserUpload)Carry as-is
Login / location historyPer-login client/server IP, browser, login/logout, sourceScreen Catalog §5.1 (user_login_history)Carry as-is
User↔report mappingWhich reports a user seesScreen Catalog §5.1 (UserReportMapping)Carry as config
FE tool/asset allocationAllocate tools (barcode/serial) to field engineersScreen Catalog §5.1 (Viewfetools)Carry as-is
OTP / 2FA (web + mobile)Configurable OTP authenticationSpec §3.5 (OTPAuthenticationSettingsController)Carry but redesign (standards-based MFA)
SSO / IdP backendsLDAP, ADFS, Azure AD, Jio ADOID/Seco, Airtel-OIDProduct Spec §6 (LoginController.ValidateLogin)Carry but redesign (OIDC; per-tenant IdP config)
Fine-grained module entitlement (90+ codes)Per-feature licensing via lstUserModule.ContainsSpec §5 (90+ module codes)Carry but redesign (feature flags / entitlements service — keep the granularity, Gaps §4)
Multi-tenancyTenant isolationDB 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 backdoorHardcoded auth bypassGaps SEC-1/SEC-2Drop / do-not-carry (security backdoor — remove now)
Reversible (AES) user passwordsPasswords stored reversibly, not hashedDB 00 §8; Gaps SEC-14Drop / do-not-carry (use Argon2/bcrypt or delegate to IdP)

16. Integrations & APIs

FeatureWhat it doesEvidenceDisposition
Mobile/web REST API (SmartInventoryServices)OAuth /token; backs the field app + webSpec §1, §6; Usage/API MapCarry but redesign (OIDC/JWT; versioned; not opaque ROPC tokens — Gaps API-1/3, SEC-9)
Integration API (IntegrationServices)OSS/BSS API, OAuth /GenerateToken, SwaggerSpec §1, §6; Gaps API-4Carry as-is (capability + Swagger); redesign auth
API consumer masterRegister 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 ERPSpec §3.3.4 (ConvergeERPService)Carry as config (pluggable connector)
HPSM (HP Service Manager) ticketingIT helpdesk ticket bridge; FTP file uploadSpec §3.3.4 (TicketManagerController); DB 07 (hpsm_ticket_master)Carry as config (connector)
NMS / EMS ticketingIntegrate NMS/EMS ticketsSpec §3.3.4 (BLNetworkTicket, BLWFMTicket)Carry as config (connector)
OSS appointment-slot / JO creationReserve/cancel/reschedule slots; create JO/TT-JO from OSSSpec §3.3.4 (IntegrationServices/TicketController, api/v1)Carry as-is
NMS topology exportExpose network topology to NMS/EMS (e.g. RailTel)Usage/API Map (NMSIntegrationController); Forks §3.4Carry as config (connector)
OSS port / FAT-port reserve-releaseAtomically reserve/release FAT/feasibility-route ports for provisioningUsage/API Map (reserveFatPort/releaseFatPort); DB 08 (fn_api_*reservefatport*, fn_api_reserve_feasibility_route)Carry as-is
OSS entity/alarm/discovery APIentityLocation, intermediateEntities, updateAlarmStatus, updateDiscoveredEntity, ontActivationStatusUpdateUsage/API Map (OSSIntegration)Carry as-is
Project-specification code integrationSave project/planning/workorder/purpose codes via APIUsage/API Map (SaveProjectCode/SavePlanningCode/…)Carry as-is
Stored-proc API surface (fn_api_*)63 DB functions backing serviceability/fault/customer/provisioning/ticketing APIsDB 08 (fn_api_*)Carry but redesign (typed service layer, not stringly-typed procs — Gaps AI-4)
Google Maps proxyGeocode/reverse/directions/distance-matrix/place-search via typed clientUsage/API Map (api/mapsapi, GoogleMapServices)Carry as-is (pluggable)
License enforcement (RSA/AES)Decode AES-encrypted license from global_settings; CLI generates licenseArch §2 (CodeIN, RSAImplementation)Carry but redesign (KMS-signed entitlements — Gaps SEC-16)
Dark-fiber feasibility APIP2P dark-fiber feasibility for OSS callersSpec §3.4 (DaFiFeasibilityController)Carry as-is
Customer distance-to-deviceCompute 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/ODFDB 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 procDB 08 (fn_api_updateapisettings, fn_api_reset_xml)Carry but redesign (audited config service, not proc-mutated state)
WhatsApp providerMarketed; stub onlySpec §7 #10 (CommunicationLibrary/WhatsAppProvider.cs)Drop / do-not-carry as-built (build properly if needed)
Twilio SMSSMS via Twilio / per-deployment gatewaysSpec §7 #10; WFMNotificationServiceCarry as config (pluggable comms)
Background servicesWFMNotificationService, ServiceabilityWinService, RoutingDataSync, UtilizationEmailScheduler, BackupDownloadUtilitySpec §1, §6Carry but redesign (event-driven jobs / k8s cron; not polling Windows services — Gaps OPS-2)
SignalR realtimeLive import/utilization progressSpec §3.7; Screen Catalog §7 #7Carry as-is (decouple from Forms auth)

17. Audit / History / Approval Workflow

FeatureWhat it doesEvidenceDisposition
Entity-change auditFull 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 audit68 audit_* tables, 300 triggersDB 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 ledgerAppend-only Planned→As-built→Dormant logDB 01 (entity_status_history 1.35M)Carry as-is (folds into event store)
Network-code change historyAudit of codification changesDB 01 (entity_network_code_history, auto_codification_logs)Carry as-is
Approval workflowCreate/approve workflow on entitiesDB 01 (vestigial — approval_flag='A' ~100%)Carry but redesign (real eventful approval; reuse the concept, not the dead columns)

18. Codification / Network-Coding

FeatureWhat it doesEvidenceDisposition
Network-code assignmentAssign formatted network_id per entity at saveDB 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 abbreviations2-char codes per layer (SC/TR/FC/PO/CH…)DB 01 (codification_layer_details)Carry as config
Network-id type / separator rulesAutomatic vs Manual id; separator (-//)Screen Catalog §5.8 (landbase Network Id Type/Network Code Separator); layer_mappingCarry as config
Child→parent layer graphCandidate parents per layer (ordered by sequence)DB 01 (layer_mapping 168 rows, parent_sequence)Carry as config

19. Wireless Overlay

FeatureWhat it doesEvidenceDisposition
Antenna CRUDAntenna assets (104 attr cols)Spec §3.9 (AntennaController); DB 07Carry as config (vertical layer; schema-driven)
Sector CRUDRF sectors (86 cols)Spec §3.9 (SectorController); DB 07Carry as config
Tower CRUDTowers with POPs/antennas (85 cols)Spec §3.9 (TowerController); DB 07Carry but redesign (fix VaultMaster overload in one render path — Spec §7 #5)
Microwave linkMicrowave hop links (114 cols)Spec §3.9 (MicrowaveLinkController); DB 07Carry as config (remove plaintext NMS passwords — DB 07)
Installation infoInstall metadataSpec §3.9 (InstallationInfo)Carry as config

20. Multi-language / Localization & White-Label

FeatureWhat it doesEvidenceDisposition
i18n / multilingual engineDB- or XML-backed resource strings, codegen typed ResourcesSpec §6 (ResourcesController, res_resources, MultilingualController)Carry as-is (capability); redesign delivery
Multilingual junk-key toolDev tool to find unused resource keysSpec §1 (MultilingualJunkKeys)Drop / do-not-carry (dev-only tool)
Multilingual audit labelsLocalized labels in audit/historySpec §3.1.10Carry as-is
White-label themingRuntime branding/theme per deploymentSpec §6 (DynamicTheme)Carry as config (per-tenant)

21. Search & Navigation

FeatureWhat it doesEvidenceDisposition
Location geocode searchSearch by location (Google)Screen Catalog §2 (performSearch('Google'))Carry as-is
Entity searchSearch network entitiesSpec §3.1.11 (GGS); layer_details search columnsCarry as-is
Landbase-layer searchSearch basemap/landbase featuresSpec §3.1.11 (LBL)Carry as-is
Get-address (reverse geocode)Click-to-addressSpec §3.1.11 (GTA)Carry as-is
Direction / ruler / measurementDistance & direction toolsSpec §3.1.11 (FND/MSD/DNR)Carry as-is
POD/Central-Office associated entitiesQuery entities associated to a POD/COSpec §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):

PrimitiveAbsorbs (fork patterns)Priority
Runtime custom-entity / attribute-schema builderNew entity types & attributes (CX/GX, HUB/SubBox, PEP, railway POP, FDC/FPOI/GP)Highest
Config-driven form builder + dependency/rules engineDynamic 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 methodsHighest
Declarative integration/connector framework + ETL pipelineOSS/BSS, EMS (ZTE/Huawei), ERP/SAP, NMS sync (Airtel ~46k lines)Highest
Per-tenant feature-flag + module registryLayer/module/menu on-off, 2FA, encrypted-query toggles (every fork)Highest
Per-tenant config + schema isolation + managed migrationsPer-circle DBs, per-region hosts (BharatNet/RailTel/Airtel)Highest
Per-tenant naming/numbering rule engineRegion-pattern codes, geometry-driven region resolution, auto-IDsHigh
Pluggable IdP/OIDC connectorAirtel-OID, Authentik, Keycloak, Azure AD, central-tokenHigh
Config-selectable storage providerGCS/NAS/FTP/Local dual-store backendsHigh
Configurable geo-hierarchy + row-level securityProvince/region/circle scopingHigh
Notification connector (provider-pluggable)FCM, SMS gatewaysHigh
Configurable upload-pipeline hooksOPSWAT MetaDefender AV/CDR scanMed
Theming + runtime terminology/i18n overrideLogo, client name, terminology (mostly already config)Med
Shared mobile module driven by the same entity/form configACT’s 9,186-line forked MobileFormControllerMed
Configurable planning/rules engine + pluggable routing strategiesOFN/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:

  1. GIS-native spatial digital twin — every asset a map feature on PostGIS (≈5,100 ST_* calls server-side). (§1, §2)
  2. The network-entity catalog — the fiber/FTTx asset taxonomy (66 layers: OSP civil/fiber, splicers, ISP/indoor, CPE, wireless, planning polygons, landbase). (§2)
  3. Schema-driven entity/attribute extensibility — the layer_details + template + dynamic-attribute idea (rebuilt as a real schema registry). (§2, §14)
  4. Fiber connectivity & splicing — port-to-port edges, strand-level fiber/tube/core, splice GUI, path/cut tracing (rebuilt as a graph). (§3)
  5. OLT/ODF/equipment-model patching — the indoor equipment hierarchy + parent/child patching rules. (§3, §14)
  6. Fiber-link / circuit inventory — end-to-end logical circuits over physical plant. (§4)
  7. Network planning & auto-design (SmartPlanner) — demand→clustering→auto-design→fine-tune→deliverables. (§6)
  8. BOM/BOQ & costing — rate-card-driven material take-off with overhead/RFS formulas. (§7)
  9. Feasibility / serviceability (SmartSQ) — single/bulk/dark-fiber feasibility + OSS runtime serviceability. (§8)
  10. Work-force management — job orders, tickets (configurable state machine), rosters, timesheets, notifications. (§9)
  11. Survey & field workflows — area/building survey + acceptance testing. (§10)
  12. Generic data ingestion / bulk upload — map→validate→execute with a column dictionary. (§11)
  13. Reporting & multi-format export — Excel/PDF/KML/DXF/SHP/SLD over spatial selections (one engine). (§12)
  14. Offline-first mobile field app — on-device create/splice/survey/photo/barcode/GPS with sync. (§13)
  15. RBAC + fine-grained entitlements + lifecycle audit — per-entity×lifecycle×CRUD rights, module entitlements, and an immutable change history. (§15, §17)
  16. 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)

  1. Hardcoded credentials & backdoors — master-password bypass, base64 admin password, single AES key, plaintext config/SQL/MapServer secrets. (Gaps SEC-1…5)
  2. Reversible (un-hashed) passwords in user_master. (DB 08; Gaps SEC-14)
  3. Branch-per-customer multi-tenancy + tenant-specific columns (iru_given_airtel, etc.) in shared schema. (Gaps MT-1, DAT-6)
  4. Trigger-based shadow-table auditing (68 audit_* tables, 300 triggers, silent column drift). (DB 03; Gaps DAT-4)
  5. GeoJSON-text read caches (60 *_geojson_master) — replace with a vector-tile pipeline. (DB 01)
  6. WKT-string geometry round-tripping + geometry/attribute split + .map-file rendering. (Gaps DAT-5, GIS-1/2)
  7. Table-per-entity sprawl (~5 tables/entity) + 114-flag layer_details God-row + dual EAV/wide-column. (Gaps DAT-1/2/3)
  8. In-memory DataTable reporting + 75 copy-paste Download* methods + 12 bespoke report tools. (Gaps PERF-1, QA-2)
  9. Opaque non-JWT tokens, ROPC, AllowInsecureHttp, wildcard CORS, in-memory refresh store, client-set token TTL. (Gaps SEC-6…9, API-3)
  10. Polling Windows-service sprawl (8-timer notifier, FTP folder-watch) + manual 348-.sql migrations + zero observability. (Gaps OPS-1/2/3)
  11. God classes & dead codeLibraryController 13.7k LOC, ReportController 12.9k, Main.js ~34k, .bak/_obsolete files, triple MainContext. (Gaps ARC-4/6, QA-3/4/5)
  12. Marketed-but-unbuilt features — OTDR .sor trace 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)
  13. In-app DB backup download + long-query killer — platform-ops concern, not product. (§14)
  14. postgres_fdw cross-customer data exposure, tbl_covid_*/temp_*_csv dead/orphan data paths, in-DB _bkp/_test function 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.