Skip to content

SmartInventory / NetworkAccess — Product Specification

Product: Lepton SmartInventory / NetworkAccess — Fiber/FTTx GIS network-lifecycle management platform. Subject of this spec: references/SmartInventory-3.0 @ branch develop (the generic mainline). Customer-specific features on develop-<customer> branches are out of scope here. Date: 2026-06-16 Method: Read-only verification against code, anchored on the prior 5-agent SmartInventory Legacy Architecture Study and the NetworkAccess Product Profile & BRD. Where marketing and code conflict, code reality wins (and is flagged in §7).

This is a what-the-product-does-today specification (modules → submodules → concrete features with code evidence). It is not a rewrite plan; for architecture/tech-debt see the Legacy Architecture Study.


1. Product overview

What it is. SmartInventory / NetworkAccess is a GIS-native system of record and lifecycle tool for fiber/FTTx (and NLD backbone) physical and logical networks — from strategic planning and design, through construction/rollout, into operations & maintenance, field workforce, and pre-sales service qualification. It maintains a spatial “digital twin”: every asset (cable, closure, splitter, ONT, pole, manhole, building, etc.) is a map feature with attributes, connectivity, and documents, rendered on a Google/OSM basemap with a self-hosted MapServer overlay.

Who it’s for. Tier-1 telcos, regional ISPs, tower companies, utilities, government broadband programs, and system integrators. Internal personas: network planner, network-operations manager, field-operations manager, commercial/sales (feasibility), and platform admins.

Deployment shape. A multi-project ASP.NET MVC 5 / .NET Framework 4.8 solution (Source/SmartInventory/SmartInventory.sln, ~23 projects) deployable on-prem or cloud-hosted, comprising:

  • Web appSmartInventory (main UI: 40 root + 29 Admin controllers; 523 .cshtml views under SmartInventory/Views, plus Admin-area views).
  • Standalone web appSmartFeasibility (the Service-Qualification tool, module code SFS), reached by redirect from the main app.
  • Mobile/web REST APISmartInventoryServices (OWIN OAuth, /token); backs the Android/iOS field app and the web app. WFM mobile lives under route wfm/mobile/v1.0 (FEController).
  • Integration APIIntegrationServices (OWIN OAuth /GenerateToken, Swagger) for third-party OSS/BSS.
  • APK distribution serviceSI.MobileOps (publishes/serves the mobile APK; HTTP Basic auth).
  • Windows services / consolesWFMNotificationService (workforce SMS/email), ServiceabilityWinService (FTP folder-watch serviceability), RoutingDataSync, UtilizationEmailScheduler, BackupDownloadUtility, RSAImplementation (license CLI), MultilingualJunkKeys (dev tool).
  • Shared librariesBusinessLogics (BL*), DataAccess (DA*/DL*), Models, Utility (logging/SignalR/SSO), DataUploader, GIS_Convertor, GoogleMapServices, CommunicationLibrary, Resources (i18n), CodeIN (licensing), ApplicationConfig.

Business logic is overwhelmingly PostgreSQL stored procedures (fn_*, bodies not in repo); C# marshals parameters. Geometry is centralized in point_master/line_master/polygon_master (PostGIS, SRID 4326); attributes live in wide att_details_* tables plus an EAV overlay. See §6 and the Legacy Architecture Study for detail.


2. Module map

NetworkAccess is marketed as four modules spanning the lifecycle; the code organizes them as follows. Marketing names “SmartSQ”/“SmartOps” do not appear in the code.

Marketing moduleCode realityWhere it livesModule code(s)
SmartInventory (SI) — asset mgmt / digital twinCore of the main web app + mobile APISmartInventory web app, SmartInventoryServicesthe bulk of the 90+ feature codes (SNG-LIBRY, CFLF, SPLIT_EXRPT, WRT, ROW, FBC, NWT, FLK, EXRPT, BMQ, …)
SmartPlanner (SP) — network planningIn-repo SmartPlannerController (3,786 LOC) + SmartPlanner.js (4,598 LOC); pulled into inventory via IntegrationController/PlanControllerSmartInventory web appSPI (gate currently commented in menu) + PTL/BPTL (plan tool / bulk plan tool)
SmartOps / SmartOperations — workforce mgmt= “WFM” internally. WorkforceController (3,256 LOC) + FEController (mobile, wfm/mobile/v1.0) + BusinessLogics/WFM + DataAccess/WFM + WFMNotificationService. (“SmartOps” appears nowhere in code; SI.MobileOps is only APK distribution.)SmartInventory web app, SmartInventoryServices, WFMNotificationServiceWFM (+ WFM-AJO, WFM-VAJO, WFM-TTAJO, WFM-TTVAJO, WFM-JOReport, WFM-TTJOReport, WFM-SR, WFM-VR)
SmartSQ / SmartServiceQualification (SSQ) — feasibility= the separate SmartFeasibility MVC app, module code SFS, reached via redirect to SmartFeasibilityURL. A distinct runtime serviceability path for OSS callers lives in IntegrationServices/ServiceController + ServiceabilityWinService + BLServiceability.SmartFeasibility web app; IntegrationServicesSFS
Admin / Platform (cross-cutting)Areas/Admin (29 controllers) — users/roles, masters, layers, dynamic forms, dynamic theme, i18n, OAuth consumers, backupsSmartInventory/Areas/Adminn/a (admin-gated)
Mobile / Field Collector (cross-cutting)Android/iOS app served by SmartInventoryServices; offline sync via OfflineController/VectorLayerController; WFM via FEControllerSmartInventoryServices, SI.MobileOpsn/a (per-feature via API)
Integration / API (cross-cutting)IntegrationServices (OSS/BSS); IntegrationController (SmartPlanner import); Converge ERP SOAP; HPSM/NMS ticketingIntegrationServices, SmartInventoryServices (Connected Services), UtilityRT-IF (route interface), consumer-gated

Relationships. SmartInventory is the spatial system of record; SmartPlanner writes designs into it (ImportDataAPIRequest); SmartOps/WFM consumes inventory entities for job orders and writes back field updates; SmartSQ/SmartFeasibility queries the same network DB for feasibility and shares the user table (SSO referrer). All share one PostgreSQL database + the layer_details metadata registry.


3. Per-module specification

Notation: each feature is descriptionevidence (controller / view / module-code / JS handler). “unverified” marks anything not directly confirmed in code.

3.1 SmartInventory (core asset management)

3.1.1 OSP asset CRUD catalog (“Library”)

  • Full FTTx OSP catalog CRUD — create/edit/delete every network entity type via partial forms — LibraryController.cs (13,752 LOC); 131 Views/Library/*.cshtml partials (one set per entity type).
  • Network-entity library (single) — single-entity create/place workflow — module code SNG-LIBRY, NE-LIBRY; si.getNeLibrary().
  • Group library / group clone — multi-entity grouped placement & cloning — module code GRP-LIBRY; si.GroupClone().
  • Library switch (OSP/ISP/wireless) — toggle which entity library is active on the map — divLibSwitch.
  • Geotagged image & document attachments — attach geo-tagged photos / multi-file / ZIP to any asset — FileUploadController, FileDownloadController, Views/FileUpload/*; mobile LibraryController.UploadAttachment.
  • Barcode / QR — generate and report barcodes for assets — ReportController (136 “barcode” references).
  • Asset cloning — single + bulk clone with dependent entities — si.GroupClone(), Library clone actions.

3.1.2 Cable / linear-asset operations

  • Cable / duct / trench / microduct split — split a linear asset at a point, preserving attributes & connectivity — Library split actions; module gates SPLIT-*.
  • Merge cables — merge adjacent cable segments — module code MRG-CABLE; si.showMergeCablesPopup() / si.MiscellaneousTools.MergeTool().
  • Fiber / tube / core editing — edit fiber counts, tube/core structure, colors — Library cable forms; CableColor/TubeColor settings.
  • Entity-along-direction / layout tools — extend/draw entities along a direction; layout helpers — module code EAD (si.entityAlongDirection), MAP-LAYOUT (MapLayoutController, Views/MapLayout).
  • Loop & slack management — model fiber loops and slack — entities Loop/Slack; uploader UploadTempLoop, UploadTempSlack (slack via Cable attrs).

3.1.3 ROW (Right-of-Way) workflow

  • ROW apply / approve / reject — submit and approve right-of-way segments — module code ROW; si.report.showReportMenu ROW report; ROW entity (DAROW.cs 703 LOC); uploader UploadTempRow.
  • ROW reports — ROW status / permit reports — dvROWReport.

3.1.4 Faults & maintenance

  • Fault create / status history — log network faults with status lifecycle — entities Fault + FaultStatusHistory.
  • Maintenance charges — record maintenance/lease charges against assets — MaintenanceCharges entity (note misspelled MaintainenceCharges in code).
  • Bulk lifecycle conversion — bulk convert assets to as-built / dormant / decommissioned over a radius — BulkUpdateController (Views/BulkUpdate), si.toggleBulkUpdate(), module code BUP.

3.1.5 Splicing

  • Drag-drop splicing GUI — visual splice editor using jsPlumb (cable ↔ ODF ↔ CPE) — SplicingController.cs (2,873 LOC); Views/Splicing/*; splicing.spliceHere(); module code MNS.
  • Bulk splicing upload — import splice connections in bulk — splicing.toggleConnectionUpload(); module code BLK-SDU.
  • Tray / closure / port management — manage splice trays, closures, and port status & history — entities SpliceTray, SpliceClosure, PortInfo; mobile ConnectionController (port management, bulk connection save).
  • Connection / single path finder — trace connectivity from a port/point — splicing.SinglePathFind(); module code CPF; CommonPathFinderController.
  • CPF → KML export — export a connection path to KML — CommonPathFinderController + Views/CommonPathFinder.
  • Optical link budget — compute per-wavelength optical power budget with splitter-loss tables — OpticalLinkBudgetController (Admin); OpticalLinkBudget entity; module code VOIL (optical link / view optical info on map).
  • OTDR fields — store OTDR distance/length metadata on assets — otdr_distance/otdr_length attributes. Metadata only — no .sor trace import (see §7).
  • Fiber-link / circuit inventory — end-to-end circuit definition, GIS-vs-cable length — FiberLinkController.cs (1,185 LOC); module code FLK; si.showFiberLinkDetails().
  • Link search — search fiber links — module code CMPF; si.openLinkSearch().
  • Customer fiber-link search — search links by associated customer — module code CFLF; si.openCustomerFiberLinkSearch().
  • Fiber-cut tracing — trace which fibers/circuits a cut affects — FiberCutTracingController; module code FBC; si.showWLTB('FiberCut'); mobile SearchController.GetFaultTrace.
  • Fiber allocation tool — allocate fibers/cores to links — FiberAllocationToolController + Views/FiberAllocationTool.
  • Path tracker / link tracker — track a path/route across the network — module code LTK; OpenPathTracker().

3.1.7 In-building / MDU design (ISP — inside plant)

  • Building → floor → shaft → room → rack → equipment hierarchy — model premises/MDU internals with X/Y/Z placement — ISPController.cs (6,061 LOC); 60 Views/ISP/*.cshtml; mobile BuildingController, ISPController.
  • In-building cabling / splitters / ONT / CPE — design indoor fiber distribution — ISP inside-plant forms; entities Splitter, ONT, PatchPanel, WallMount.
  • Visual room / rack view — d3 SVG rack & room layout with port-level detail — Views/ISP, d3 schematics.
  • Equipment model hierarchyisp_type → brand → base_model → model → port masters — EquipmentController (Admin), ISPModelInfo/ISPPort entities. OLT vendor attributes carried on EquipmentInfo (olt_vendor_id, olt_vendor_name, lstOLTVendors) — no dedicated OLT entity (see §7).
  • ODF-to-cable connection view — connect ODF ports to cables — Views/ISP/_ODFToCable.cshtml. No dedicated ODF entity (view-only; see §7).
  • ISP inventory report — tabular inside-plant inventory & export — ISP report actions.

3.1.8 Customer / commercial

  • Customer records linked to network elements — CRM-light: customer ↔ ONT/port/circuit — Customer, WirelineCustomer, WirelessCustomer, SiteCustomer, TrenchCustomerDetails entities; module code WRT (si.showWLTB('WireLine')), GTI-W (geo-tagged wireline).
  • Customer distance to device — compute customer-to-device distance — IntegrationServices/DistanceController (Google Geocode); CustomCustomerDistance entity.

3.1.9 Reports & export

  • Excel / CSV exports — entity & report exports via NPOI — ReportController.cs (12,860 LOC); 119 NPOI / 44 .csv / 33 .xlsx references.
  • PDF reports — printable PDFs — 8 .pdf references; iTextSharp.
  • KML / GIS exports — KML export of entities — 31 .kml references.
  • DXF (CAD) export — export network to CAD DXF — 9 .dxf references.
  • Shapefile export — export to ESRI Shapefile — 92 “shapefile” references.
  • Barcode reports — barcode label sheets — 136 “barcode” references.
  • SLD (Single Line Diagram) & Butterfly diagrams — schematic diagrams of splice/topology — ReportController SLD/butterfly generation.
  • End-to-end schematic — d3 tree schematic from POP to premises — LogicalDiagramController (mobile); d3.
  • BOM / BOQ & construction BOM — bill of materials/quantities with overhead-formula engine — BOMBOQController.cs (2,253 LOC); Views/BOMBOQ; module codes BMQ, BMQ-RPRT, CON-BOM, BMQ-POLY/RECT/CIR/FUD; si.BOMBOQReport.*.
  • Export by selection shape — export over polygon/rectangle/circle/log selections — module codes EXRPT, EXRPT-POLY/RECT/CIR, EXPRT-LOG; si.MenuReport.showMenu.
  • Export-assets report / association report — bulk asset exports — module code EXASSRPT; dvAssReport.
  • Split / audit / export selection variants — split-report and audit-history export by selection geometry — module codes SPLIT_EXRPT, SPLIT-LOG/POLY/RECT/CIR, AUDIT_HISTORY_EXRPT, AUDIT-HISTORY-LOG/POLY/RECT/CIR.
  • Utilization reports — capacity/utilization reporting + scheduled email — module code UTL; si.UtilizationReport.showMenu; UtilizationEmailScheduler console.
  • LMC (last-mile) report — last-mile connectivity report — module code LMC (gated by IsLMCReportEnabled); si.LMCReport.showReportMenu.
  • VSAT report — VSAT site report — module code VSAT; si.VSATReport.showReportMenu.
  • Geo-tagged image report — report of geotagged photos — module code GTI-W; si.GeoTaggedImage.showReportMenu.
  • XML builder dashboard — build/export XML deliverables — module code P-XML; si.xmlbuilderdashboard.
  • FSA unlock dashboard — feasibility/FSA unlock — module code BMQ-FUD; si.BOMBOQReport.FSAUnlockDashboard.
  • Async export to FTP — large exports delivered to FTP — ReportController async/FTP path; ExportReportLog entity.

3.1.10 Audit trail

  • Entity-change audit with multilingual labels + export — full change history per entity — AuditController, Views/Audit; module code AUDIT_HISTORY_EXRPT; audit_att_details_* shadow tables; module code RT-IF (real-time interface) appears alongside audit/export menus.

3.1.11 Search & navigation

  • Entity search — search network entities — module code GGS; si.performSearch('Entity'); mobile MainController search.
  • Landbase-layer search — search basemap/landbase features — module code LBL; si.performSearch('LandBaselayer').
  • Get-address (reverse geocode) — click-to-address — module code GTA; isGetAddressActive.
  • Direction / ruler / measurement — distance & direction tools on map — module codes FND (calculateDirection), MSD (toggleRuler), DNR (directions & ruler toolbar), BLO (project-specification toolbar).
  • External data view — view external/uploaded data layers — module code EDV (si.ViewExternalData), EDV-UPLD.

3.2 SmartPlanner (network planning) — in-repo

  • Demand-point upload — upload demand points (lat-long / count of homepasses) — SmartPlannerController.cs (3,786 LOC); SmartPlanner.js; Views/SmartPlanner.
  • Design-rules engine — primary/secondary splitter ratios, max distances, network type (UG/aerial), manhole distance, topology (ring/linear) — SmartPlanner settings panel (matches BRD SP-F02).
  • Clustering — auto & manual clustering of demand points into service areas — SmartPlanner clustering (BRD SP-F03/F04).
  • Auto network design — auto-place splitters/cables/equipment — SmartPlanner auto-plan.
  • Route optimization — Google Directions + proprietary “LeptonRouteAPI” routing; restricted-area avoidance; trench-length-by-landbase — GoogleMapServices, external routingAPIUrl; UploadTempRestrictedArea.
  • Interactive fine-tuning — drag splitter location / cable path; change feeder & secondary ratios on map — SmartPlanner fine-tune (BRD SP-F06).
  • Plan clone / version — clone and version plans — SmartPlanner plan management.
  • Plan → BOM/BOQ, KML, SLD, splice plan, building/tower BOM, PDF — design deliverables — SmartPlanner outputs (BRD SP-F07–F12).
  • MDU in-building plan — in-building distribution plan for MDUs — SmartPlanner MDU (BRD SP-F13).
  • Plan tool / bulk plan tool — open planner UI / bulk planning — module codes PTL (si.ViewPlanTool), BPTL (si.showBulkPlanTool); PlanController, Views/Plan.
  • Planner ↔ inventory integration — import planner designs into inventory — IntegrationController; module code SPI (menu gate currently commented); si.showPlannerIntegration(); dvPlannerIntegration.

3.3 SmartOps / WFM (field workforce) — in-repo

3.3.1 Work management

  • Assign job order — create/assign job orders to field engineers — module code WFM-AJO; WorkforceController.cs (3,256 LOC); Views/Workforce; WorkForceManagement.showMenu.
  • View assigned job orders — view/track assigned JOs — module code WFM-VAJO.
  • Trouble-ticket assign / view JO — trouble-ticket-sourced job orders — module codes WFM-TTAJO, WFM-TTVAJO.
  • Job packs — bundle job orders into packs with stage tracking — JobPackController + Views/JobPack; mobile JobPackController; module-area JOB-PACK.
  • Ticket open/close — open/close tickets from sources ONT_HOBS / OUTAGE / Trouble-Ticket — NetworkTicketController.cs (1,003 LOC), TicketManagerController; NetworkTicket, WFMTicket entities; module code NWT (+ NWT-DSHBRD, NWT-ADD, NWT-DRARA), TKM (si.showTicketManager).
  • 3-tier route-issue approval — multi-level approval workflow for route issues — WorkforceController approval twins.

3.3.2 Roster, timesheet, survey

  • Roster management — crew/shift roster — RosterManagementController + Views/RosterManagement.
  • Timesheet / attendance — user timesheets, check-in/out — UserTimeSheet entity; mobile WFM.
  • Field survey — survey assignment & capture (single/bulk) — SurveyAreaController.cs (738 LOC); Views/SurveyArea; module codes SVM, SVA, SVB, UPB; si.showWLTB('Survey'); mobile SurveyController.
  • Survey/asset acceptance testing — AT acceptance records — ATAcceptance entity.

3.3.3 Reporting & dashboards

  • JO / trouble-ticket reports — job-order & TT reports — module codes WFM-JOReport, WFM-TTJOReport.
  • Survey & visit reports — survey reports / visit reports — module codes WFM-SR, WFM-VR.
  • WFM dashboard — SLA / utilization charts — module code WDBRD; window.open('/Dashboard/Index'); DashboardController.

3.3.4 Mobile WFM & notifications

  • WFM mobile API — job list → status update → attachment upload → completion — FEController (wfm/mobile/v1.0) in SmartInventoryServices.
  • Appointment slots / job-order creation (OSS) — reserve appointment slots; create JO from OSS — IntegrationServices/TicketController (manager/FE availability, roster check).
  • CPE inventory issue/return (Converge ERP) — issue/return CPE inventory to ERP — Converge ERP SOAP Connected Service in SmartInventoryServices (Connected Services/ConvergeERPService), used by FEController (CreateInvIssue/CreateInvReturn).
  • HPSM + NMS ticketing — integrate HP Service Manager & NMS tickets — BLTicketManager, BLNetworkTicket, BLWFMTicket, DATicketMaster, DLWFMTicket; HPSM file upload to FTP via TicketManagerController (mobile) + Settings/ApplicationSettings.
  • Job-order lifecycle SMS + email — 8-timer notification service (unassigned/acknowledge/delayed/no-task/customer reminder) + 2 daily report emails — WFMNotificationService (Windows service); reads vw_wfm_*, writes wfm_notification/wfm_email_sms_log.

3.4 SmartSQ / SmartFeasibility (service qualification) — separate app

Module code SFS; gated by isFeasibilityEnabled; reached by redirect to ApplicationSettings.SmartFeasibilityURL; shares the user DB (SSO referrer check from main app via SIReferrer).

  • Single-address feasibility — point-to-point feasibility for one address (lat/lng), capture cable path segments (inside/outside/LMC) — FeasibilityDetailsController (SavefeasibilityDetails, ViewFeasibilityForm, PastFeasibilityView).
  • Bulk feasibility (Excel) — upload many addresses (ExcelDataReader) for batch feasibility — BulkFeasibilityController (Index, Ftth, Upload).
  • FTTH / ONT reachability — splitter-to-customer last-mile routing, core availability per cable — MainController.getRoutes()BLFeasibilityRouting.getRoutingDirections(); BLCable.GetAvailableCores().
  • Route / core availability & network status — planned vs as-built status, P2P multi-core routing — MainController.GetNetworkStatuses, getRoutes.
  • External routing engine — walking-mode directions via external RoutingAPIUrl (api/roadnetwork/roaddirections, JWT) — SmartFeasibility/Helper/RouteAPIHelper.cs.
  • Exports: KML / KMZ / PDF / Excel / BOM — color-coded KML (inside_A/inside_P/outside/LMC), iTextSharp PDF, NPOI Excel, BOM export/history — SmartFeasibility/ReportController (DownloadFeasibilityKML/PDF, ExportMergedKML, ExportKMZReportFTTH), MainController.ExportBomRecord/History.
  • Dark-fiber feasibility (P2P) — existing-vs-new-build dark-fiber routing, core availability, route geometry as GeoJSON — IntegrationServices/DaFiFeasibilityController.getDarkFiberFeasibility; DarkFiberFeasibility entity.
  • Runtime serviceability for OSS — splitter/GPON reachability by lat/lng for OSS callers; RFS / design-ID status; XML config state — IntegrationServices/ServiceController (GetServiceability, UpdateRfsStatus, etc.); ServiceabilityWinService (FTP folder-watch, 5s timer); BLServiceability.
  • P2MP / FWA / 3D / LOSmarketed but unverified in code; segment type_id model exists but no explicit FWA/P2MP/3D-LOS handlers found (see §7).

3.5 Admin / Platform

Areas/Admin — 29 controllers; admin-role gated.

  • Users & RBAC-per-layer — users, roles, per-layer permissions, login/location history — UserController, RolesController; per-layer permission model.
  • OTP / 2FA configuration — configure OTP for web/mobile — OTPAuthenticationSettingsController; BLOtpAuthentication; mobile OTPController.
  • Bulk user upload — import users with role/module mapping — mobile BulkUserUploadController.
  • Vendor / spec / accessory masters — vendors, vendor specifications, accessories — VendorController, VendorSepcificationController (sic), AccessoriesController.
  • Equipment / item-template masters — equipment models, item templates — EquipmentController, TemplateController, ItemTemplateController, BulkUpdateTemplateController.
  • Layer / GIS config — layer settings, OSP settings, landbase settings, business layers, ortho-image layers — LayerSettingsController, OSPSettingsController, LandbaseSettingsController, BusinessLayerController, OrthoImageLayerController; module codes BLLYR (business layer), VOIL.
  • Project / region masters — projects, project areas, regions/provinces — ProjectController, ProjectManagementController (module PMGM, si.projectMgmt), RegionProvinceController, RegionProvince (DL).
  • KPI master — define KPIs — KPIMasterController; Views/KPI; KPIMaster entity.
  • Optical link budget master — wavelength/splitter-loss tables — OpticalLinkBudgetController.
  • DynamicForm (low-code) — define custom fields/forms per entity (EAV) — DynamicFormController (10 actions); Views/DynamicForm; dynamic_controls/entity_additional_attributes.
  • DynamicTheme (white-label) — runtime theming/branding — DynamicThemeController; Views/DynamicTheme; DynamicTheme.cshtml.
  • Multilingual / i18n management — manage resource strings/languages — ResourcesController, MultilingualController; Resources lib (DB res_resources or XML, codegen).
  • OAuth API-consumer management — manage API consumers — APIConsumerMasterController; APIConsumerMaster entity.
  • Settings family — global / configuration / advanced / email settings — ConfigurationSettingsController, AdvancedSettingsController, EmailSettingsController; global_settings key/value/type.
  • DB backup & long-query killer — download DB backups; kill long-running queries — DownloadbckfileController, LongRunningQueriesController; BackupDownloadUtility console.
  • Misc / FE tools — miscellaneous admin & field-engineer tools — MiscellaneousController, FeToolsController, HomeController.

3.6 GIS / Mapping (cross-cutting, in SmartInventory web)

  • Dual rendering — Google Maps or OpenStreetMap basemap + self-hosted MapServer entity overlay — selected via MapAuthType=KEY|CLIENT, mapServerURL, mapDirPath; GoogleMapController, Views/GoogleMap, GoogleMapServices lib.
  • deck.gl WebGL overlays — high-volume vector overlays — deck.gl@8.9.19 and @9.0.35 bundled (Content/js/Deckgl/); turf.js 6.5.0.
  • Client-side topology / splicing / schematics — jsts (topology), jsPlumb (splicing), d3 (v3/v5, schematics) — BundleConfig.cs (d3.v3/v5, custom).
  • Vector layers & delta sync — fetch vector data full/geom-filtered, delta sync, styling — VectorLayerController (web); mobile VectorLayerController; module entities VectorLayers.
  • Landbase / ortho / business layers — toggle basemap landbase, raster ortho imagery, business overlays — LandBaseLayerController, Views/LandBaseLayer; divLandBaseLayers, divOrthoImageLayers, divBusinessLayers.
  • Redline — markup/redline annotations on the map — RedlineController (244 LOC); Views/Redline; module code RDL; si.Redline.showRedlineMenu.
  • Workspaces — saved map workspaces — WorkSpaceController (91 LOC).
  • Map print / print manager — print map to PDF with templates — PrintController (873 LOC), MapLayoutController; Views/Print; module code PMP (si.PrintMapMenu.showMenu), MAP-LAYOUT; PrintLog/PrintSavedTemplate entities.
  • Print/map menu by selection — print/map menu over polygon/rect/circle/square selections — module codes PMM-EXLOG, PMM-DRPOLY, PMM-SQR, PMM-RECT, PMM-CIR.
  • 18 .map files & symbologyNetworkEntities* (~58 layers) + LandBaseEntities*; per-status symbology (P/A/D) → PNG icons + symbols.symSource/MapFiles/; datashare.inc (PostGIS connection, per-user user_permission_area filtering). SRID 4326 throughout.

3.7 Data import (cross-cutting)

  • Bulk import — Excel/KML — primary uploader: Excel (.xls/.xlsx, NPOI) and KML into temp_du_* staging → main tables — DataUploaderController.cs (2,791 LOC); DataUploader lib (UploadExcelOrKML.cs, KMLUploader.cs); Views/DataUploader; module codes DUP (si.toggleUpload), UPB.
  • ~46 entity uploaders — per-entity staging objects — DataUploader/TempUploadObjects/UploadTemp*.cs (Cable, Pole, Trench, Manhole, Handhole, Duct, Microduct, Vault, Splitter, SpliceClosure, ONT, DLC, POD, MPOD, FMS, FDB, PatchPanel, Building, WallMount, Cabinet, Antenna, Tower, BTSLayer, Coupler, Loop, Reinstatement, Rebar, Gipipe, Row, Structure, Tree, POI, RestrictedArea, CustomerWireline, CustomerWireless, LandBase, CDBAttributes, ADB, Poe, OpticalRepeater, HTB, …).
  • Spatial format conversion — Shapefile / MapInfo TAB / DXF / GeoJSON conversion via bundled ogr2ogr.exe/GDAL + SharpKml — GIS_Convertor (Convertor.cs); KML in-process.
  • Progress reporting — live import progress over SignalR — Utility/SmartInventoryHub.cs (SmartInventoryHub).

3.8 Mobile / Field Collector (cross-cutting)

Served by SmartInventoryServices (29 controllers); native Android + iOS (per BRD). APK published/served by SI.MobileOps.

  • Create field entities — ONU/ONT, Splitter, Cable, Manhole, Handhole, SEB, Splice Closure, Customer, Pole, Tree, Wall-mount, POD/DLC/MPOD — mobile LibraryController, BuildingController, ISPController, ItemTemplateController.
  • Offline-first data & sync — offline reference data (legends, layer settings, item templates, vendors, dropdowns) + vector delta sync — OfflineController, VectorLayerController.
  • Geo-tagged document/photo upload — attach photos/PDFs with geotag — mobile LibraryController.UploadAttachment.
  • Customer allocation to ONU — provision a customer to an ONT in the field — mobile MainController / CRM.
  • Connection path finder — trace connectivity from a point — mobile ConnectionController, MainController.
  • Layer management — toggle map layers — mobile LegendDetailsController, LandBaseController.
  • Splicing (mobile) — map-based splicing with image capture — mobile SplicingController, ConnectionController.
  • Network tickets / surveys (mobile) — fault tickets & survey-area status — mobile NetworkTicketController, SurveyController.
  • 2FA / login — OTP generate/verify, signup, location tracking — mobile OTPController, SignInController, UserController.
  • CRM tickets / static help — query CRM tickets, static help content — mobile CRMController.
  • Voice-based network creation — marketed (BRD SI-M02); client-side feature, unverified server-side.

3.9 Wireless overlay (cross-cutting)

  • Antenna — antenna asset CRUD — Wireless/AntennaController; Views/Antenna; BLAntenna/DAAntenna.
  • Microwave link — microwave hop links — Wireless/MicrowaveLinkController; Views/Microwavelink.
  • Sector — RF sectors — Wireless/SectorController; Views/Sector.
  • Tower — towers with associated POPs and antennas — Wireless/TowerController; Views/Tower; BLTower/DATower (TowerMaster). Note: one render path in TowerController instantiates VaultMaster (see §7).
  • Installation info — install metadata — InstallationInfo entity.

4. Data scope (network entity catalog)

Entities the product manages, grouped (from BL*/DA* pairs + *Master models; ~151 BL classes / ~155 data-layer classes / ~103 model classes).

  • Physical / OSP assets: Cable, Pole, Trench, Manhole, Handhole, Duct, Microduct, Conduit, Vault, Loop, Slack, ROW (right-of-way), GIpipe, Rebar, Reinstatement, Structure/Chamber, Tree, Building, WallMount.
  • Logical / connectivity: FiberLink, OSPSplicing, SpliceTray, PortInfo, FiberCutTracing, PatchCord, FATConnection, Coupler.
  • Inside-plant / equipment (FTTx active + passive): Splitter, SpliceClosure (SC), ONT/ONU, DLC, DP, POD, MPOD, FMS, PatchPanel, Rack, Cabinet, JunctionBox (BL only — see §7). OLT = attributes on EquipmentInfo; ODF = view only (§7).
  • Wireless overlay: Antenna, Microwave, Sector, Tower, InstallationInfo.
  • Customer / commercial: Customer, WirelineCustomer, WirelessCustomer, SiteCustomer, TrenchCustomerDetails, SiteInfo, Serviceability, Feasibility, DarkFiberFeasibility, Competitor, MaintenanceCharges, Lmc (last-mile), CustomCustomerDistance.
  • Workforce / ops: JobOrder, JobPack, WFMTicket, NetworkTicket, Fault + FaultStatusHistory, SurveyAssignment, ATAcceptance, UserTimeSheet, Process/Execution, TicketManager.
  • Admin / master-data: User, Roles, Layer / LayerMaster / LayerConfiguration / LayerGroup, ItemTemplate / Template, Vendor / VendorSpecification, Accessories, Project / ProjectArea / Area / RegionProvince / ProvinceBoundary, ISP / ISPModelInfo / ISPPort / IspEntityMapping, KPIMaster, OpticalLinkBudget, BOM, APIConsumerMaster, AdditionalAttributes / DynamicAttributes, DynamicTheme, DynamicForm, OtpAuthentication, and the *Setting family (Global/Configuration/Advanced/Info/Label/Search/LandBase/CableColor/TubeColor/DynamicTheme).
  • Reporting / cross-cutting: Dashboard, ExportData / ExportReportLog / ExportUtility, MapReport / MapPrintManager / PrintLog / PrintSavedTemplate, Search / DeviceSearch, VectorLayers, Redline, LandBaseLayer, OrthoImageLayer, SmartPlanner, Geom, LocationDelta, Attachment / FileUploader, BulkUpdate, UploadSummary, logging (Error / WebRequest / API / Print logs), Help, Reference, Workspace, and the catch-all Misc.

5. Feature / licensing matrix (module codes)

The licensing scheme is finer-grained than the 4 marketed modules: 90+ feature codes are gated by Model.lstUserModule.Contains("...") in Views/Main/Index.cshtml (the prior study said “~45”; the actual gate count incl. sub-feature codes is higher — both top-level and selection-shape variants). Best-effort mapping of the principal codes:

CodeGates (feature)Evidence
SNG-LIBRY / GRP-LIBRY / NE-LIBRYSingle library / group library / network-entity library (asset create)si.getNeLibrary, si.GroupClone
WRTWireline customer modulesi.showWLTB('WireLine')
GTI-WGeo-tagged wireline / image reportsi.GeoTaggedImage
VSATVSAT reportsi.VSATReport
LMCLast-mile connectivity reportsi.LMCReport (+ IsLMCReportEnabled)
MSC_ToolsMiscellaneous tools menusi.MiscellaneousTools.showMenu
MRG-CABLEMerge cablessi.showMergeCablesPopup
MAP-LAYOUTMap layout toolMapLayoutController
EADEntity-along-direction / draw toolssi.entityAlongDirection
WFMWorkforce management (parent)si.WorkForceManagement.showMenu
WFM-AJO / WFM-VAJOAssign / view assigned job ordersmenu
WFM-TTAJO / WFM-TTVAJOTrouble-ticket assign / view JOmenu
WFM-JOReport / WFM-TTJOReportJO / TT-JO reportsmenu
WFM-SR / WFM-VRSurvey report / visit reportmenu
WDBRDWFM dashboard/Dashboard/Index
RDLRedline markupsi.Redline.showRedlineMenu
FBCFiber-cut tracingsi.showWLTB('FiberCut')
NWT (+ NWT-DSHBRD/NWT-ADD/NWT-DRARA)Network ticketing (dashboard/add/draw-area)si.Networkticket.showMenu
FLKFiber links / circuitssi.showFiberLinkDetails
LTKPath / link trackerOpenPathTracker
PMP (+ PMM-*)Print/map menu (+ by selection shape)si.PrintMapMenu.showMenu
PTL / BPTLPlan tool / bulk plan tool (SmartPlanner)si.ViewPlanTool / si.showBulkPlanTool
SPISmartPlanner integration (gate commented)si.showPlannerIntegration
SFSSmartSQ / SmartFeasibility appredirect (+ isFeasibilityEnabled)
TKMTicket manager (HPSM)si.showTicketManager
ROWRight-of-way workflow & reportROW report menu
PMGMProject managementsi.projectMgmt
BMQ (+ BMQ-RPRT/BMQ-POLY/RECT/CIR/CON-BOM/BMQ-FUD)BOM/BOQ (+ report/selection/construction-BOM/FSA-unlock)si.BOMBOQReport.*
EDV / EDV-UPLDExternal-data view / uploadsi.ViewExternalData
DUP / UPBData upload / upload bulksi.toggleUpload
SVM / SVA / SVBSurvey (module / area / building)si.showWLTB('Survey')
UTLUtilization reportssi.UtilizationReport.showMenu
EXRPT (+ EXRPT-POLY/RECT/CIR, EXPRT-LOG)Export report (+ by selection shape)si.MenuReport.showMenu
EXASSRPTExport-assets reportdvAssReport
SPLIT_EXRPT (+ SPLIT-LOG/POLY/RECT/CIR)Split report (+ selection)si.MenuReport.showMenu
AUDIT_HISTORY_EXRPT (+ AUDIT-HISTORY-*)Audit-history export (+ selection)audit menu
RT-IFReal-time interface (audit/export/split menus)menus
BUPBulk updatesi.toggleBulkUpdate
MNS / BLK-SDU / CPFSplice-here / bulk splicing / connection path findersplicing.*
CMPF / CFLFLink search / customer-fiber-link searchsi.openLinkSearch / si.openCustomerFiberLinkSearch
GGS / LBL / GTAEntity search / landbase-layer search / get-addresssi.performSearch / isGetAddressActive
FND / MSD / DNR / BLODirection calc / ruler / directions-&-ruler toolbar / project-spec toolbarmap tools
BLLYR / VOILBusiness layer / optical-info-on-layerlayer panels
COAEPOD-associated-entities querysi.GetPODAssociatedEntities
P-XMLXML builder dashboardsi.xmlbuilderdashboard
UNTUtil-notification / planner-integration paneldvUtilNotification

(Selection-shape suffix codes — -POLY/-RECT/-CIR/-SQR/-LOG/-DRPOLY/-EXLOG — gate the same feature restricted to a draw-area selection mode.)


6. Platform & non-functional

  • Auth modes (web). Forms login + multiple SSO/IdP backends switched in LoginController.ValidateLogin: LDAP (LDAP_IP), ADFS (ADFSEndPoint/relying-party), Jio ADOID/Seco (isADOIDEnabled, Utility/ADOIDSecoAuth.cs), Azure AD (isAADEnabled), plus OTP/2FA (BLOtpAuthentication, WEB/mobile) and a master-password bypass. (Airtel-OID SOAP per study.)
  • Auth modes (APIs). SmartInventoryServices = OWIN OAuth ROPC at /token, opaque MachineKey bearer tokens (not JWT), with per-request source validation against APIConsumerMaster, SSO branching (Azure/ADFS/ADOID/LDAP), 2FA marker, force-login & MAC-based single-session, and mobile license check. IntegrationServices = OWIN OAuth at /GenerateToken, validates (user[Base64], pass, source) against APIConsumerMaster, optional client-IP allowlist (Is_Clientip_Required), Swagger UI, 24h default token. SI.MobileOps = HTTP Basic auth.
  • RBAC per layer. Roles + per-layer permissions; map rendering filters rows per user via user_permission_area (MapServer %Filter% placeholders). Admin role (role_id=1) bypasses some checks.
  • Offline / mobile sync. Offline reference data (OfflineController) + vector delta sync (VectorLayerController); SignalR (SmartInventoryHub) for import progress; mobile force-login/single-session.
  • Multilingual / i18n. DB-backed (res_resources) or XML resources, codegen’d into a typed Resources class (Resources project; ResourcesController/MultilingualController); MultilingualJunkKeys dev tool finds unused keys.
  • White-label / theming. Runtime DynamicTheme (logo/colors/branding) — DynamicThemeController, DynamicTheme.cshtml.
  • Metadata-driven extensibility (“Equipment Model Builder”). A layer_details registry (1 row/entity type, ~110 boolean flags) declares each entity’s tables/views/flags; per-entity specs via item_template_* / item_template_master; in-building equipment via isp_type→brand→base_model→model→port; custom fields via the dynamic_controls/entity_additional_attributes EAV (low-code DynamicForm). Adding an entity/field is config, not a migration (within limits — see study §11).
  • Deployment. On-prem or cloud-hosted single-DB PostgreSQL+PostGIS; MapServer + Google/OSM basemap; FTP/SMB for attachments & backups; secrets currently in plaintext config (study finding, externalize).
  • Background processing. WFMNotificationService, ServiceabilityWinService, RoutingDataSync, UtilizationEmailScheduler, BackupDownloadUtility (see §1).
  • Performance posture (today). In-memory DataTable report generation; synchronous bulk upload via web app with SignalR progress; ~5 parallel tables per entity type. (Targets in BRD are aspirational, not measured here.)

7. Known code-vs-marketing reconciliations

  1. “SmartSQ” is a separate application. SmartSQ/SSQ = the standalone SmartFeasibility MVC app (module SFS), not a module inside the main app. It’s reached by redirect (SmartFeasibilityURL) and shares the user DB via an SSO-referrer check. A distinct runtime serviceability surface for OSS callers exists separately (IntegrationServices/ServiceController + ServiceabilityWinService).
  2. “SmartOps” is just WFM. The strings “SmartOps”/“SmartOperations” appear nowhere in code; the field-ops module is internally “WFM” (WorkforceController, FEController, BusinessLogics/WFM, WFMNotificationService). SI.MobileOps is only an APK-distribution service, not the ops module.
  3. OTDR is metadata-only, not .sor import. The product stores otdr_distance/otdr_length attribute fields; there is no .sor trace import or trace analysis despite the BRD’s “OTDR Trace Analysis” claim. Mark BRD SI-F17 as overstated.
  4. No dedicated OLT or ODF entity. OLT exists only as vendor attributes on EquipmentInfo (Models/Rack.cs: olt_vendor_id, olt_vendor_name, lstOLTVendors); ODF appears only as a view (Views/ISP/_ODFToCable.cshtml). Neither has a BL/DA/model entity class. The BRD’s “OLT to ODF patching” is realized via the generic equipment/splicing model, not first-class OLT/ODF objects.
  5. Tower persistence is mixed (prior-study claim partially refuted). Tower has its own TowerMaster + BLTower + DATower for the primary save path. However, one render path in Wireless/TowerController.cs (line ~30) instantiates VaultMaster — so “towers persist as VaultMaster” is true only for that specific code path, not the main Save. Treat as entity-overloading in one path, not the whole entity.
  6. BLJunctionBox has no DA class (likely dead/embedded). BusinessLogics/BLJunctionBox.cs references DAJunctionBox.Instance but no DataAccess/DAJunctionBox.cs file exists. Likely dead or DA folded elsewhere — unverified.
  7. Marketed FWA / P2P / P2MP / 4G / 3D-LOS feasibility is largely unverified in code. SmartFeasibility’s verified surface is single-address, bulk-Excel, FTTH/route/core feasibility plus dark-fiber (P2P) routing. Explicit FWA/P2MP/4G/3D-line-of-sight handlers were not found on develop; these may be customer-specific or front-end only.
  8. Converge ERP integration is via a SOAP Connected Service in SmartInventoryServices (not IntegrationServices). Connected Services/ConvergeERPService (CreateInvIssue/CreateInvReturn) is consumed by the WFM mobile FEController for CPE inventory issue/return — refining the study’s placement.
  9. Module-code count. The prior study cited “~45 module codes”; the actual lstUserModule.Contains gate set in Index.cshtml is 90+ including sub-feature and selection-shape variants. Both are correct depending on whether sub-codes are counted.
  10. “4 modules” vs code. All four marketed modules are present, but only SmartInventory and SmartPlanner live inside the main web app; SmartSQ is a separate app and SmartOps is WFM. WhatsApp integration (BRD SO-I06) is a stub (CommunicationLibrary/WhatsAppProvider.cs); only Twilio SMS is implemented and the new CommunicationLibrary is not yet wired in (live SMS is via per-deployment gateways through WFMNotificationService).

Compiled 2026-06-16 from a read-only verification of references/SmartInventory-3.0@develop, anchored on the SmartInventory Legacy Architecture Study and the NetworkAccess Product Profile & BRD. Describes the generic product on develop; customer-specific features are out of scope.