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 app —
SmartInventory(main UI: 40 root + 29 Admin controllers; 523.cshtmlviews underSmartInventory/Views, plus Admin-area views). - Standalone web app —
SmartFeasibility(the Service-Qualification tool, module codeSFS), reached by redirect from the main app. - Mobile/web REST API —
SmartInventoryServices(OWIN OAuth,/token); backs the Android/iOS field app and the web app. WFM mobile lives under routewfm/mobile/v1.0(FEController). - Integration API —
IntegrationServices(OWIN OAuth/GenerateToken, Swagger) for third-party OSS/BSS. - APK distribution service —
SI.MobileOps(publishes/serves the mobile APK; HTTP Basic auth). - Windows services / consoles —
WFMNotificationService(workforce SMS/email),ServiceabilityWinService(FTP folder-watch serviceability),RoutingDataSync,UtilizationEmailScheduler,BackupDownloadUtility,RSAImplementation(license CLI),MultilingualJunkKeys(dev tool). - Shared libraries —
BusinessLogics(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 module | Code reality | Where it lives | Module code(s) |
|---|---|---|---|
| SmartInventory (SI) — asset mgmt / digital twin | Core of the main web app + mobile API | SmartInventory web app, SmartInventoryServices | the bulk of the 90+ feature codes (SNG-LIBRY, CFLF, SPLIT_EXRPT, WRT, ROW, FBC, NWT, FLK, EXRPT, BMQ, …) |
| SmartPlanner (SP) — network planning | In-repo SmartPlannerController (3,786 LOC) + SmartPlanner.js (4,598 LOC); pulled into inventory via IntegrationController/PlanController | SmartInventory web app | SPI (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, WFMNotificationService | WFM (+ 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; IntegrationServices | SFS |
| Admin / Platform (cross-cutting) | Areas/Admin (29 controllers) — users/roles, masters, layers, dynamic forms, dynamic theme, i18n, OAuth consumers, backups | SmartInventory/Areas/Admin | n/a (admin-gated) |
| Mobile / Field Collector (cross-cutting) | Android/iOS app served by SmartInventoryServices; offline sync via OfflineController/VectorLayerController; WFM via FEController | SmartInventoryServices, SI.MobileOps | n/a (per-feature via API) |
| Integration / API (cross-cutting) | IntegrationServices (OSS/BSS); IntegrationController (SmartPlanner import); Converge ERP SOAP; HPSM/NMS ticketing | IntegrationServices, SmartInventoryServices (Connected Services), Utility | RT-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 description — evidence (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); 131Views/Library/*.cshtmlpartials (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/*; mobileLibraryController.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/TubeColorsettings. - 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.showReportMenuROW report; ROW entity (DAROW.cs703 LOC); uploaderUploadTempRow. - 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 —
MaintenanceChargesentity (note misspelledMaintainenceChargesin code). - Bulk lifecycle conversion — bulk convert assets to as-built / dormant / decommissioned over a radius —
BulkUpdateController(Views/BulkUpdate),si.toggleBulkUpdate(), module codeBUP.
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 codeMNS. - Bulk splicing upload — import splice connections in bulk —
splicing.toggleConnectionUpload(); module codeBLK-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 codeCPF;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 codeVOIL(optical link / view optical info on map). - OTDR fields — store OTDR distance/length metadata on assets —
otdr_distance/otdr_lengthattributes. Metadata only — no.sortrace import (see §7).
3.1.6 Fiber links / circuits
- Fiber-link / circuit inventory — end-to-end circuit definition, GIS-vs-cable length —
FiberLinkController.cs(1,185 LOC); module codeFLK;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 codeFBC;si.showWLTB('FiberCut'); mobileSearchController.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); 60Views/ISP/*.cshtml; mobileBuildingController,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 hierarchy —
isp_type → brand → base_model → model → portmasters —EquipmentController(Admin),ISPModelInfo/ISPPortentities. OLT vendor attributes carried onEquipmentInfo(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);CustomCustomerDistanceentity.
3.1.9 Reports & export
- Excel / CSV exports — entity & report exports via NPOI —
ReportController.cs(12,860 LOC); 119 NPOI / 44.csv/ 33.xlsxreferences. - PDF reports — printable PDFs — 8
.pdfreferences; iTextSharp. - KML / GIS exports — KML export of entities — 31
.kmlreferences. - DXF (CAD) export — export network to CAD DXF — 9
.dxfreferences. - 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 —
ReportControllerSLD/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 codesBMQ,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;UtilizationEmailSchedulerconsole. - LMC (last-mile) report — last-mile connectivity report — module code
LMC(gated byIsLMCReportEnabled);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 —
ReportControllerasync/FTP path;ExportReportLogentity.
3.1.10 Audit trail
- Entity-change audit with multilingual labels + export — full change history per entity —
AuditController,Views/Audit; module codeAUDIT_HISTORY_EXRPT;audit_att_details_*shadow tables; module codeRT-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'); mobileMainControllersearch. - 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, externalroutingAPIUrl;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 codeSPI(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; mobileJobPackController; module-areaJOB-PACK. - Ticket open/close — open/close tickets from sources ONT_HOBS / OUTAGE / Trouble-Ticket —
NetworkTicketController.cs(1,003 LOC),TicketManagerController;NetworkTicket,WFMTicketentities; module codeNWT(+NWT-DSHBRD,NWT-ADD,NWT-DRARA),TKM(si.showTicketManager). - 3-tier route-issue approval — multi-level approval workflow for route issues —
WorkforceControllerapproval twins.
3.3.2 Roster, timesheet, survey
- Roster management — crew/shift roster —
RosterManagementController+Views/RosterManagement. - Timesheet / attendance — user timesheets, check-in/out —
UserTimeSheetentity; mobile WFM. - Field survey — survey assignment & capture (single/bulk) —
SurveyAreaController.cs(738 LOC);Views/SurveyArea; module codesSVM,SVA,SVB,UPB;si.showWLTB('Survey'); mobileSurveyController. - Survey/asset acceptance testing — AT acceptance records —
ATAcceptanceentity.
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) inSmartInventoryServices. - 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 byFEController(CreateInvIssue/CreateInvReturn). - HPSM + NMS ticketing — integrate HP Service Manager & NMS tickets —
BLTicketManager,BLNetworkTicket,BLWFMTicket,DATicketMaster,DLWFMTicket; HPSM file upload to FTP viaTicketManagerController(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); readsvw_wfm_*, writeswfm_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;DarkFiberFeasibilityentity. - 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 / LOS — marketed but unverified in code; segment
type_idmodel 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; mobileOTPController. - 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 codesBLLYR(business layer),VOIL. - Project / region masters — projects, project areas, regions/provinces —
ProjectController,ProjectManagementController(modulePMGM,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;Resourceslib (DBres_resourcesor XML, codegen). - OAuth API-consumer management — manage API consumers —
APIConsumerMasterController;APIConsumerMasterentity. - Settings family — global / configuration / advanced / email settings —
ConfigurationSettingsController,AdvancedSettingsController,EmailSettingsController;global_settingskey/value/type. - DB backup & long-query killer — download DB backups; kill long-running queries —
DownloadbckfileController,LongRunningQueriesController;BackupDownloadUtilityconsole. - 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,GoogleMapServiceslib. - deck.gl WebGL overlays — high-volume vector overlays —
deck.gl@8.9.19and@9.0.35bundled (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); mobileVectorLayerController; 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 codeRDL;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 codePMP(si.PrintMapMenu.showMenu),MAP-LAYOUT;PrintLog/PrintSavedTemplateentities. - 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
.mapfiles & symbology —NetworkEntities*(~58 layers) +LandBaseEntities*; per-status symbology (P/A/D) → PNG icons +symbols.sym—Source/MapFiles/;datashare.inc(PostGIS connection, per-useruser_permission_areafiltering). 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);DataUploaderlib (UploadExcelOrKML.cs,KMLUploader.cs);Views/DataUploader; module codesDUP(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 inTowerControllerinstantiatesVaultMaster(see §7). - Installation info — install metadata —
InstallationInfoentity.
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
*Settingfamily (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:
| Code | Gates (feature) | Evidence |
|---|---|---|
SNG-LIBRY / GRP-LIBRY / NE-LIBRY | Single library / group library / network-entity library (asset create) | si.getNeLibrary, si.GroupClone |
WRT | Wireline customer module | si.showWLTB('WireLine') |
GTI-W | Geo-tagged wireline / image report | si.GeoTaggedImage |
VSAT | VSAT report | si.VSATReport |
LMC | Last-mile connectivity report | si.LMCReport (+ IsLMCReportEnabled) |
MSC_Tools | Miscellaneous tools menu | si.MiscellaneousTools.showMenu |
MRG-CABLE | Merge cables | si.showMergeCablesPopup |
MAP-LAYOUT | Map layout tool | MapLayoutController |
EAD | Entity-along-direction / draw tools | si.entityAlongDirection |
WFM | Workforce management (parent) | si.WorkForceManagement.showMenu |
WFM-AJO / WFM-VAJO | Assign / view assigned job orders | menu |
WFM-TTAJO / WFM-TTVAJO | Trouble-ticket assign / view JO | menu |
WFM-JOReport / WFM-TTJOReport | JO / TT-JO reports | menu |
WFM-SR / WFM-VR | Survey report / visit report | menu |
WDBRD | WFM dashboard | /Dashboard/Index |
RDL | Redline markup | si.Redline.showRedlineMenu |
FBC | Fiber-cut tracing | si.showWLTB('FiberCut') |
NWT (+ NWT-DSHBRD/NWT-ADD/NWT-DRARA) | Network ticketing (dashboard/add/draw-area) | si.Networkticket.showMenu |
FLK | Fiber links / circuits | si.showFiberLinkDetails |
LTK | Path / link tracker | OpenPathTracker |
PMP (+ PMM-*) | Print/map menu (+ by selection shape) | si.PrintMapMenu.showMenu |
PTL / BPTL | Plan tool / bulk plan tool (SmartPlanner) | si.ViewPlanTool / si.showBulkPlanTool |
SPI | SmartPlanner integration (gate commented) | si.showPlannerIntegration |
SFS | SmartSQ / SmartFeasibility app | redirect (+ isFeasibilityEnabled) |
TKM | Ticket manager (HPSM) | si.showTicketManager |
ROW | Right-of-way workflow & report | ROW report menu |
PMGM | Project management | si.projectMgmt |
BMQ (+ BMQ-RPRT/BMQ-POLY/RECT/CIR/CON-BOM/BMQ-FUD) | BOM/BOQ (+ report/selection/construction-BOM/FSA-unlock) | si.BOMBOQReport.* |
EDV / EDV-UPLD | External-data view / upload | si.ViewExternalData |
DUP / UPB | Data upload / upload bulk | si.toggleUpload |
SVM / SVA / SVB | Survey (module / area / building) | si.showWLTB('Survey') |
UTL | Utilization reports | si.UtilizationReport.showMenu |
EXRPT (+ EXRPT-POLY/RECT/CIR, EXPRT-LOG) | Export report (+ by selection shape) | si.MenuReport.showMenu |
EXASSRPT | Export-assets report | dvAssReport |
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-IF | Real-time interface (audit/export/split menus) | menus |
BUP | Bulk update | si.toggleBulkUpdate |
MNS / BLK-SDU / CPF | Splice-here / bulk splicing / connection path finder | splicing.* |
CMPF / CFLF | Link search / customer-fiber-link search | si.openLinkSearch / si.openCustomerFiberLinkSearch |
GGS / LBL / GTA | Entity search / landbase-layer search / get-address | si.performSearch / isGetAddressActive |
FND / MSD / DNR / BLO | Direction calc / ruler / directions-&-ruler toolbar / project-spec toolbar | map tools |
BLLYR / VOIL | Business layer / optical-info-on-layer | layer panels |
COAE | POD-associated-entities query | si.GetPODAssociatedEntities |
P-XML | XML builder dashboard | si.xmlbuilderdashboard |
UNT | Util-notification / planner-integration panel | dvUtilNotification |
(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-requestsourcevalidation againstAPIConsumerMaster, 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)againstAPIConsumerMaster, 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 typedResourcesclass (Resourcesproject;ResourcesController/MultilingualController);MultilingualJunkKeysdev tool finds unused keys. - White-label / theming. Runtime
DynamicTheme(logo/colors/branding) —DynamicThemeController,DynamicTheme.cshtml. - Metadata-driven extensibility (“Equipment Model Builder”). A
layer_detailsregistry (1 row/entity type, ~110 boolean flags) declares each entity’s tables/views/flags; per-entity specs viaitem_template_*/item_template_master; in-building equipment viaisp_type→brand→base_model→model→port; custom fields via thedynamic_controls/entity_additional_attributesEAV (low-codeDynamicForm). 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
DataTablereport 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
- “SmartSQ” is a separate application. SmartSQ/SSQ = the standalone
SmartFeasibilityMVC app (moduleSFS), 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). - “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.MobileOpsis only an APK-distribution service, not the ops module. - OTDR is metadata-only, not
.sorimport. The product storesotdr_distance/otdr_lengthattribute fields; there is no.sortrace import or trace analysis despite the BRD’s “OTDR Trace Analysis” claim. Mark BRD SI-F17 as overstated. - 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. - Tower persistence is mixed (prior-study claim partially refuted). Tower has its own
TowerMaster+BLTower+DATowerfor the primary save path. However, one render path inWireless/TowerController.cs(line ~30) instantiatesVaultMaster— 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. BLJunctionBoxhas no DA class (likely dead/embedded).BusinessLogics/BLJunctionBox.csreferencesDAJunctionBox.Instancebut noDataAccess/DAJunctionBox.csfile exists. Likely dead or DA folded elsewhere — unverified.- 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. - Converge ERP integration is via a SOAP Connected Service in
SmartInventoryServices(notIntegrationServices).Connected Services/ConvergeERPService(CreateInvIssue/CreateInvReturn) is consumed by the WFM mobileFEControllerfor CPE inventory issue/return — refining the study’s placement. - Module-code count. The prior study cited “~45 module codes”; the actual
lstUserModule.Containsgate set inIndex.cshtmlis 90+ including sub-feature and selection-shape variants. Both are correct depending on whether sub-codes are counted. - “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 newCommunicationLibraryis not yet wired in (live SMS is via per-deployment gateways throughWFMNotificationService).
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.