Skip to content

SmartInventory Web Portal — Screen-by-Screen UI Catalog

A thorough, screen-by-screen catalog of the SmartInventory web portal (FTTx/fiber GIS inventory), built from a live read-only capture of the demo instance. Its purpose is to ground the rewrite’s data model in how the UI actually works: which behaviours are config-as-data vs hardcoded, and which DB tables/fn_* each screen administers. It complements docs/SmartInventory_WebUI_Usage_and_API_Map.md (API/controller map) and docs/database/0008 (data model).


1. Overview & method

  • What was captured. A live demo deployment — http://networkaccess.st.leptonsoftware.com, product v8.16.4.0, admin login — captured read-only via Playwright on 2026-06-16 (no browser/DB touched for this doc). Captured: the map workspace, the full command toolbar, the NE Library palette, 17 operational dialogs, and 50 admin/configuration screens (every left-nav admin action).
  • Artifacts (all under references/ui-exploration/):
    • Screenshots (shots/): W-main.png, W-toolbar.png, 02-dashboard.png, 03-layers-on.png, the F-*.png admin forms; shots/detail/: adm-00..49-*.png (admin screens) and dlg-00..16-*.png (operational dialogs).
    • Structured dumps: DETAIL_ADMIN.txt (per-admin-page FIELDS / GRID columns / SELECT options — authoritative for form contents), TOOL_INVENTORY.txt (the full si.* client-action namespace), LIVE_FINDINGS.md (shell/auth/SignalR/toolbar summary).
  • Caveat. This demo is a smaller, different deployment than the smartinventory_qa DB analyzed in docs/database/; its layers/data differ. Use it to ground usage and configurability, not specific data values. The DB table names cited below are the authoritative ones from docs/database/.
  • Headline finding. The web client is a server-rendered ASP.NET MVC 5 / jQuery monolith — every action lives in one global JS object, si.*. Almost all UI behaviour is config in a DB table or logic in a stored function (fn_*). The admin area is ~20 disjoint config screens, nearly all sharing one grid pattern; and it exposes only a sliver of the underlying layer_details entity registry (5 of ~80 flags). See §6.

2. Map workspace (/Products/main)

The default landing surface (shots/W-main.png, 02-dashboard.png, 03-layers-on.png). Layout = a top blue header bar, a left “NETWORK LAYERS” tree, the Google Maps canvas, and a bottom status bar.

Top blue header bar

  • SMARTINVENTORY wordmark logo (left).
  • Centered geocoder: an “Enter a location” search box with a Google-search icon, an arrow (search) button, and an entity/landbase search-mode toggle. The search dropdown switches between Location (si.performSearch('Google')), Entity (si.performSearch('Entity')), and LandBase (si.performSearch('LandBaselayer')).
  • A dense ~30-icon command toolbar (see §3) spanning the bar.
  • Right side: a notification bell with a live SignalR count badge (si.notification('A')), a workspace/user icon, and an Admin ▾ dropdown (si.getWorkSpaces, si.getChangePassword, si.uploadProfileImage, si.SignOut).

Left “NETWORK LAYERS” panel

  • A collapsible “LAYERS” header (with a minimize and a refresh icon), then “Select All” and an “Advanced Filters” link (si.GetProjecSpeciFilter / si.ClearProjectSpeciFilter) for project-specification filtering, plus per-layer Zoom-level / Planned / As-Built / Dormant / Show-Label sub-toggles (si.handlePrClick, si.handleChClick).
  • Below that, a grouped layer tree. Observed groups and members: Transmedia → Cable; Structure1 → Pole; Structure → Wall Mount / Manhole / Central_Office / Building / Tree / CDB / Handhole; SPAN → Trench / Duct; Equipment → Splitter / CPE / FDP / Cabinet / ATB; plus loose layers FDC / CSA_Boundary / SurveyArea / Fault / Customer / Patch Panel / (and per LIVE_FINDINGS: Sector / DSA_Boundary / FAT / SpliceClosure / ROW / CX / Area / Coupler / Tower).
  • Each layer row exposes toggle columns (visibility / select / edit / label — small checkbox/icon columns) and a live feature count at the right. This panel is the rendered front-end of the layer_details registry + layer_group_master / layer_group_mapping (docs/database/01); group/order from ViewLayerGroupsMapping (§5).

Map canvas

  • Google Maps JS basemap; network feature layers are MapServer WMS image overlays (no GeoJSON XHR at country zoom — tiles load only over data extents). Basemap controls: Toggle Base Map (si.toggleBaseMap), No Map / white (toggleWhiteMap), Layer Manager (showLayerManager). A fullscreen control sits at the top-right of the canvas.

Bottom status bar

  • Coordinates · Version: 8.16.4.0 · Zoom: · Legend toggle (si.OpenLegend / si.ClosedLegend).

3. Command toolbar — tool-by-tool

From shots/W-toolbar.png + TOOL_INVENTORY.txt. All handlers are methods on the global si.* object (splicing is a sibling global splicing.*). The toolbar is a flat row of ~30 icon buttons, each opening a fly-out menu or a modal. Grouped by function:

3.1 Entity create / clone — the NE Library palette

  • NE Library (si.getNeLibrary) — opens the entity creation palette (dlg-00-nelibrary.png; see §4): a single-vs-group library of every placeable entity type. Members observed: Wall Mount, Pole, PDP, Manhole, Central_Office, Building, Tree, CDB, Handhole, Cable, Trench, Duct, CPE, FDP, Cabinet, ATB, Tower, FDC, CSA_Boundary, SurveyArea, Fault, Customer, FAT, Splice Closure, ROW, CX, Area, Coupler, GX, Loop, Patch Cord, GI Pipe, SubArea. (Each maps to a layer_details row + its att_details_<entity> table.)
  • Single / Group clone modes; Group Clone (si.GroupClone).
  • Entity Along The Direction (si.entityAlongDirection) — place entities along a drawn direction.
  • Layout auto-draw (si.toggleLayout with Polygon / Square / Rectangle) — auto-generate entities within a drawn area.
  • Merge Tool for cables (si.showMergeCablesPopup + si.MiscellaneousTools.MergeTool).
  • Point buffer (si.EnablePointBufferRadius, “Edit Buffer Value”) — radius buffer around a point.
  • Delete Element (si.closeLibTools + si.clearTempNewEntity + LandBase.clearTempNewEntity); Hide ToolBar (si.closeLibTools).

3.2 Connectivity / splicing (global splicing.*)

  • Wireline Tools (si.showWLTB('WireLine', this)) — opens the wireline splicing toolbench.
  • Manual Splicing (splicing.spliceHere) — port-to-port splice at a point.
  • Bulk Splicing (splicing.toggleConnectionUpload) — upload-driven splice (dlg-13; see §4).
  • Connection Path Finder (splicing.SinglePathFind) — live fiber trace over connection_info.
  • Common Path Finder (si.openLinkSearch); Customer FiberLink Finder (si.openCustomerFiberLinkSearch); Fiber Links (si.showFiberLinkDetails).
  • Fiber Cut Tracing (si.showWLTB('FiberCut', this)). Writes/reads connection_info, isp_port_info, att_details_cable_info (docs/database/04).

3.3 Workforce Management (SmartOps) — si.WorkForceManagement.*

  • WFM menu (si.WorkForceManagement.showMenu); Assign Job Order (toggleAssignJobOrder, dlg-02); View Assigned / View Unassigned Job Order (+ reporting-manager “RM” variants: toggleViewAssignJobOrder, toggleAssignJobOrderRM, toggleViewAssignJobOrderRM); Save/View Roster (si.SaveRoster/si.ViewRoster); WFM Dashboard (+ RM variant: si.viewWfmDashboard/viewWfmDashboardRM, dlg-01); View User Permission Area (toggleViewUserPermissionArea).

3.4 Tickets — si.Networkticket.*

  • Network Ticket menu (showMenu); Ticket Dashboard (NetworkTicketList, dlg-03); Add Network Ticket (AddNetworkTicket, dlg-04); Draw Ticket Area (initiateDrawingsNetworkTicket('Polygon')). Also Customer Tickets (si.showTicketManager). Writes att_details_networktickets / ticket_master (docs/database/07).

3.5 Redline / markup — si.Redline.*

  • Redline menu (showRedlineMenu); Dashboard (RedlineList, dlg-05); draw Point / PolyLine / Polygon (initiateDrawingsRedline).

3.6 Reports — the ~12 report tools (all “draw area → filter → export + poll log”)

Each report follows one pattern: a showMenu/showReportMenu fly-out → either a manual modal (Filter Data / Summary tabs, see §4) or a draw-area mode (Polygon / Rectangle / Circle, initiateDrawings*) → an export call (*ExportReport) plus an async export-log companion (*ExportReportLog).

  • BOM/BOQ Reportsi.BOMBOQReport.showMenu / BOMBOQShowModel; “FSA-wise overhead logics” (BOMBOQShowModelforBOMDetail); FSA Unlock dashboard (FSAUnlockDashboard). (dlg-07.) Feeds BOM costing from item_template_master × layer_details × rates (docs/database/05).
  • Utilization Reportsi.UtilizationReport.showMenu / UtilizationExportReport / initiateDrawingsUtilizationReport (dlg-08); utilization notifications (si.openUtilizationNotification).
  • Audit Log Reportsi.AuditLogReport.AuditLogExportReport / ...Log (dlg-09).
  • Export (Entity) Reportsi.Entityreport.EntityExportReport / ...Log / initiateDrawingsExportReport (dlg-10).
  • Association Reportsi.EntityAssreport.EntityAssociationReport / ...Log (dlg-11).
  • LMC (Last-Mile Connectivity) Reportsi.LMCReport.showReportMenu / LmcSiteReport (dlg-12).
  • Split Reportsi.splitReport.SplitExportReport / ...Log.
  • ROW Reportsi.report.showReportMenu / ROWReport.
  • VSAT Reportsi.VSATReport.showReportMenu / VSATSiteReport.
  • GeoTagged Images Reportsi.GeoTaggedImage.showReportMenu / showGeoTaggingImagesDetails / showAllGeoTaggedImagesOnMap (dlg-06).
  • Potential / homepassinitiateDrawingsPotential (ComputeHomePass backend).
  • Menu Report (si.MenuReport.showMenu) is the shared report-fly-out host.

3.7 Survey & data ingestion

  • Building Survey (si.showWLTB('Survey')); Survey Assignment (Opensurveyassignment); Survey Building (OpenSurveyBuilding); Upload Buildings (si.toggleBuildingUpload).
  • Upload Data (si.toggleUpload, dlg-14); Bulk Update (si.toggleBulkUpdate, dlg-15); External Data View (si.ViewExternalData).
  • XML Dashboard / Builder (si.xmlbuilderdashboard.xmlbuilderdashboardList, dlg-16).

3.8 Planning / project / print / misc

  • Network Planning (si.ViewPlanTool); Sprout / Bulk Plan Tool (si.showBulkPlanTool); Project Management (si.projectMgmt); PM Tool (opens an external app on port 4019); Dashboard (opens /Dashboard/Index).
  • Print Map (si.PrintMapMenu.showMenu; draw-area si.togglePrint; Print Export Log si.printExportLog).
  • Miscellaneous Tools (si.MiscellaneousTools.showMenu); Central Office Associated Entities (si.GetPODAssociatedEntities); Location Tracker (OpenPathTracker); Help & FAQ’s (si.HelpPage).
  • Directions and Ruler (si.showWFooterShapeTB('DirectionsAndRuler')); Bulk Operation (si.showWFooterShapeTB('ProjectSpecification')).

3.9 Region navigator

A full India state → district tree (~2,544 entries of si.EditRegionProvinceDetails(...,'SHOWONMAP'|'DETAIL'|'BOUNDARY'|'DELETE','PROVINCE',<name>)) used to zoom/scope the map by administrative area (the “circle”/region scoping dimension) and to show/edit/delete province boundaries. si.loadLayerOnEntity (“Refresh Layers”) reloads layers for the chosen scope.


4. Operational dialogs (dlg-*)

All are jQuery-UI modal overlays floating over the map. Several share the report pattern: a blue title bar, Filter Data and Summary tabs, a vertical list of attribute filters, and Reset / Apply (or Submit / Export Log) buttons; the manual variant filters by attributes, the toolbar variant filters by a drawn area, then exports and polls an async log.

#Dialog (screenshot)Title / tabsKey controls & workflow
00dlg-00-nelibraryNE Library paletteEntity-creation library reached via si.getNeLibrary — Single vs Group/Group-Clone, the full placeable-entity list (§3.1), Advanced Filters, Expand/Shrink. (Rendered as the workspace with the palette docked.)
01dlg-01-wfm-dashboardWorkforce Management DashboardWFM KPI/job dashboard (si.viewWfmDashboard).
02dlg-02-wfm-assignjobAssign Job OrderFilters: Status (Unassigned…), Custom date range (From / To), Order Type, Service Type, Jo Category, Search By / Search Text, Auto Refresh checkbox, Search button → job-order grid (“No data found” in demo). Drives Workforce/AssignJobOrder.
03dlg-03-ticket-listNetwork Tickets (Ticket List)Status filter chips (Assigned / In Progress / Completed / Approved / On Hold), Ticket-status dropdown, Search, Advanced Filters, Export. Grid cols: Assigned, Ticket Status, Ticket No., Ticket Type (Audit/Construction…), Region, City, Assigned To, Module (Middleware), Created On. Paged. → att_details_networktickets.
04dlg-04-ticket-addAdd Network TicketSections: Ticket Details (Ticket Type, Reference Type, Reference Remarks, Remarks), Network Ticket Details (Region, City, Network Ticket #, Assign To, For Network Type, Target Date), Project Specification (Project Code/Name, Planning Code/Name, Workorder Code/Name, Purpose Code/Name). → fn_nwt_insert_update_ticket.
05dlg-05-redline-listRedline (Dashboard)Grid: Action, Task Name, Task Type (txt/lin/lne…), Task Remarks, Task Action (ADD/EDIT/DELETE), Assigned By, Created On, Assigned To. Search, Export, Advanced Filters, paged. Markup/redline tasks.
06dlg-06-geotaggedGeoTagged ImagesField-captured image gallery/report (“No Records Found” in demo); si.GeoTaggedImage.*, with “Show All GeoTaggedImage On Map”.
07dlg-07-report-bomboqBOM/BOQ ReportFilter Data / Summary tabs; long attribute-filter list; Reset / Apply. The toolbar “draw area → export + poll log” report (+ FSA overhead logics, FSA unlock). → BOM/BOQ over item_template_master.
08dlg-08-report-utilizationUtilization ReportFilter Data / Summary tabs. Filters: Region, City, Network Status, Entity Type, Project Code, Planning Code, Workorder Code, Purpose Code; Reset / Apply. → entity_utilization_settings thresholds.
09dlg-09-report-auditlogAudit Log ReportFilter Data / Summary. Filters: Entity Type, Network Id, Region, City, Network Status, Parent User, User, Ownership Type, Owner, Project Code, Planning Code; Reset / Apply. → audit_* shadow tables.
10dlg-10-report-entityExport Report (Entity)Same filter set as audit (Entity Type, Region, City, Network Status, Parent User, User, Ownership Type, Owner, Project/Planning Code); Reset / Apply. Generic entity export.
11dlg-11-report-associationAssociation ReportFilters: Entity Type, Network Id, Region, City, Network Status, Parent User, User, Ownership Type, Owner, Project/Planning Code; Reset / Export Log. → parent/child entity associations (association_mapping).
12dlg-12-report-lmcLMC ReportFilters: Region (multi-select list), City, Entity Type, LMC Type, Duration Based on / Duration / From / To (time-window), Search Text; Submit / Export Log / Close. Last-mile connectivity report.
13dlg-13-splicing-bulkBulk SplicingFile (Choose File) + Splicing Type dropdown; Upload + Download Template. Upload-driven bulk splice → connection_info.
14dlg-14-data-uploadUpload DataTwo tabs: Xls Report Import (User Type, Plan Name → Upload) and Pre Upload Utility (multi-step: Upload Files → Column Mapping → Data Validation → Data Execution, with an Entity Type select) + an Upload logs tab. → temp_du_* staging → fn_uploader_*; data_uploader_template column map; SignalR progress.
15dlg-15-bulk-updateBulk UpdatePre Upload Utility tab (Entity Type select) + Upload logs tab. Bulk attribute update via uploaded file.
16dlg-16-xmlbuilderXML Builder DashboardXML build job list (si.xmlbuilderdashboard). (Rendered as workspace in capture.)

5. Admin / configuration surface — screen-by-screen

Layout (all admin screens, F-*.png / adm-*.png). A blue header (logo + “admin” user menu), a fixed left nav with a Search… box and ~18 collapsible module groups, and a content pane. The left-nav groups: OLT Patching · Users · Dashboard · Layer Settings · Vendor Specification · Rights Management · Equipment Builder · Miscellaneous Feature · OSP Settings · Vendor · LandBase Layer Settings · Advanced Settings · API Consumer Master · Accessories · Help & FAQ’s · Project · Link Budget Settings.

Two recurring screen archetypes:

  • List/grid — a filter row (Search By dropdown + Search Text + Search / Export / Reset / Add New buttons), a “Total Records: N” count, and a sortable grid whose first column is Action (pencil-edit / trash-delete icons) and last columns are the audit envelope (Created By / Created On / Modified By / Modified On). Add/Edit opens a form (often the same page).
  • Entity-selector form — pick an Entity Type (or Layer / Type) from a dropdown, which lazy-loads that entity’s config (e.g. Search/Info/Label/Report/History column pickers, Dynamic Form, Tube/Core color). Until selected, the pane is empty.

5.1 Users & Field-Engineer (FE) Tools

Screen (adm-)PurposeKey fields / gridDB structure
00 User/AddUser (F-adduser.png)Create user — a 3-step wizard (1 User Details · 2 Module Rights · 3 Work Area Details).Step 1: User Name, Full Name, Email, Password (rules: 1 upper/1 lower/1 number/1 special, min 8), Mobile, Role (admin/Qa3/test2/Mobile User/Role-1) + View, Reporting Manager (multi-manager), Application Access (Web/Mobile/Both), User Type (Own/Partner/Vendor), PAN, Vendor Id, Is Admin Rights, Is Active. Step 3: Country (Kenya/India/Sri Lanka/Mauritius) → Region → State/Province scoping.user_master, user_permission_area (geo scope), role_module_mapping.
01 User/ViewUsersList/manage users.Grid: User Name, Name, Email, Role, Reporting Manager, Mobile, App Access, User Type, Status + audit. Filters by Active/App Access/searchBy. Per-row Edit + Logout checkboxes; Logout All Users, Export.user_master.
02 User/ViewUsersLoginHistoryLogin audit.Grid: User Name, Email, Role, Mobile, Client IP / Server IP, App Access, Source, Browser Name/Version, Login/Logout Time, Status. Date range filter + Export.user_login_history.
03 User/BulkUserUploadExcel bulk user load.File picker + Upload; results grid: File Name, Total / Success / Failed, Status Message, Error Description, Download Logs.bulk_user_*, fn_bulk_user_upload_process.
18 User/UserReportMappingMap which reports a user sees.Pick User (Nicodemus.KW, Brian.TM, Safaricom…) + “is all users mapped”.user↔report mapping.
04 FETools/Viewfetools (“User Tools”)Field-engineer tool/asset allocation.Grid: User Name, Tool Name, Barcode, Serial Number, Date, Is Accepted; Add New + Export.FE tool allocation.

5.2 Roles / Templates / Rights (permission matrix + geography scoping)

ScreenPurposeKey fields / gridDB structure
13 Roles/AddRoleCreate role.Copy from Template (12.1/a1/CP sing/Edit R/t1/T-1/T12/View R…), Reporting Role (multi: super admin/View User/JC NPE/admin/WFM Contractor…), Role Name, Remarks, Is Active.role_master.
14 Roles/ViewRolesList roles.Grid: Role Name, Role Description, Status + audit. (Roles seen: admin, Qa3, test2, Mobile User, Role-1.)role_master.
15 Template/AddTemplate (adm-15)Author a per-entity CRUD permission template.Copy Template + Template Name; then a permission matrix: rows = every Entity (All, Antenna, Area, ATB, Building, Cabinet, Cable, CDB, Central_Office…), columns grouped under Planned / As-Built / Dormant, each with Add / Edit / Delete / View checkboxes (+ “check-all” per column and per row). Entity search box.item_template_* + layer_rights_template_permission / role_permission_entity (per-layer × lifecycle CRUD).
16 Template/ViewTemplatesList templates.Grid: Template Name + audit.template library.
17 Roles/UpdateRoleModule (“Role Module Mapping”, adm-17)Gate which modules/layers a role can use.Role dropdown (“Please select a role to map with modules”); on select, an AllLayers + module/layer grid.role_module_mapping.
19 BulkUpdateTemplate (“Configure Bulk Update Template”)Pick which columns a bulk-update template carries.Template dropdown (Cable/Duct/Trench/PDP/FDC/Building/Cabinet/FAT/FDP) → column config.data_uploader_template.

5.3 Layer Settings & Groups

ScreenPurposeKey fields / gridDB structure
06 LayerSettings/ViewGroupsLayer-group master.Grid: Group Name, Group Description, Status + audit; Add New + Export.layer_group_master.
07 LayerSettings/ViewLayerGroupsMappingMap layers → groups + order.Editable grid: Layer Name, Group Name, Group Description (+ hidden layer_seq ordering, mapping_id); Export + Save. Drives the left layer-tree grouping/order.layer_group_mapping.
08 LayerSettings/LayerConfigurationSettings (“Layer Configuration”, F-layerconfig.png)Edit a layer’s config — but only 5 fields.Layer Name (entity-type select: Area/ATB/Building/Cabinet/Cable/CDB/Central_Office/Coupler/CPE…), Minimum Zoom Level (5–14), Is Mobile Layer, Is Visible In Mobile Library, Is Visible On Mobile Map; Reset / Update.layer_details (fn_save_layer_settings_details) — exposes only 5 of ~80 columns (see §6).

5.4 Vendor / Spec / Equipment Builder (Equipment→Chassis→Slot→Card→Port→Tray + BOQ catalog)

ScreenPurposeKey fields / gridDB structure
43 Vendor/CreateVendorVendor master.Name, Abbr, Type (Own / Third Party), Address, Contact, Email, Remarks, Is Active.vendor_master.
44 Vendor/ViewVendorList vendors.Grid: Name, Type, Address, Contact, Email, Remarks, Status + audit; Export.vendor_master.
09 VendorSepcification/AddVendorSpecification (F-addvendor.png)Author a BOQ/costing catalog item.Category (=entity type: ATB/Cabinet/Cable/CDB/Central_Office/Coupler/CPE/CX/Demand Point…), Specification, Vendor, Item Code, Item Type (Others/WCR), Unit Measurement (meter/No./Others), Cost Per Unit/meter(Rs), Service Cost Per Unit/meter(Rs), Sub Category 1–3, Is Master, Item Master Code, Extra Percentage, is A-RFS / B-RFS / C-RFS item, Is Active.item_template_master (cost/RFS catalog) + item_template_<entity> (docs/database/02/05).
10 VendorSepcification/ViewVendorSpecificationList spec catalog.Grid: Entity Type, Specification, Vendor, Item Code, Cost Per Unit/meter, Service Cost, Port/Fiber Info, Sub Category 1–3, Item Type, Unit, is A/B/C-RFS item + audit; Export.item_template_master.
11 VendorSepcification/UploadVendorSpecificationBulk spec upload.File picker.catalog bulk load.
12 VendorSepcification/ViewSpecificationServicesPer-spec service costs.Grid: Entity Type, Specification, Item Code, Service Name, Service Cost Per Unit/meter, Status.spec-service rows.
20 Equipment/CreateModel (“Create Model”, F-createmodel.png, adm-20)CAD-style visual Equipment Builder.A Model Workspace grid canvas (“Scale: 1M(Grid Module) = 50 mm”), a Grid Color palette, Model + Type dropdowns, Create / Reset / Save Model. Underlying form: model dims (height/width/depth/border/unit_size), is_multi_connection, specification (16 Port / 22 Port OLT / 96 Port ODF / Generic), vendor, item_code, status (Active/Inactive/Pending Design), label color/weight. The Model dropdown = Equipment / Chassis / Slot / Card / Port / Tray.isp_model_info (docs/database/04).
21 Equipment/ViewModels (“View Model”, adm-21)Manage models + parent/child placement rules.Left rail = Model Category (Equipment, OLT, ACT FRB, FDP, Nokia OLT, Chassis, Slot, Card, Port, Tray); status filter chips (Active / InActive / Pending Design); grid: Name, Type, Manufacturer + audit. Edit panel: dims, no_of_port, specification, vendor, item_template_id, and a Rule builder (parent_model + child_model from Equipment/Chassis/Slot/Card/Port/Tray) → Save Rule. “Create New Model” / “Tips & Rules” buttons.isp_model_info, isp_model_mapping, isp_model_rules, isp_model_type_master.
22 Equipment/ViewModelsImageModel SVG/image library.Grid: Model Name, Image, Is Active + audit; Add New.model image assets.

5.5 Miscellaneous Feature

ScreenPurposeKey fields / gridDB structure
25 Miscellaneous/ViewPortStatus (“Core/Port Status Settings”, F-portstatus.png)The core/port status enum that governs splicing.Grid (4 rows in demo: Vacant/Reserved/Faulty/Connected): Status, Color Code (hex swatch), Is Active, Is Manual, Is Splicing Allowed + audit; Add New / Export.port_status vocab (docs/database/04); governs att_details_cable_info core-status codes + splicing eligibility.
26 Miscellaneous/ChangeNetworkCode (“Change Network Code”, adm-26)Re-codification of an entity’s network id.Layer Name (PDP/Area/Building/Cabinet/Cable/CDB/Coupler/CSA_Boundary/Customer…), Old Network Id, Remarks → recompute.fn_get_new_networkcode / fn_save_change_network_codeentity_network_code_history.
27 Miscellaneous/ViewTemplateColumn (“Data Uploader column Settings”)The per-entity column data dictionary.Grid: Entity Name, Display Column Name / Data Type, Db Column Name / Data Type, Example Value, Max Length, Is Mandatory, Is Null Allowed, Is Dropdown Base, Description, is Kml Attribute, Is Excel Attribute + audit; Add New.data_uploader_template / per-entity column dictionary.
28 Miscellaneous/ViewTerminationPoint (“Termination Point Settings”)Which entities act as TPs.Grid: Entity Name, TP Entity Name, Is ISP TP, Is OSP TP, Status + audit; Add New.termination-point config.
29 Miscellaneous/ViewUtilizationSetting (“Entity Utilization Settings”, adm-29)Per-entity/region utilization thresholds.Region / Province / Entity Type filters; grid: Entity Type, Network Status, Region, Province, Low(%) / Moderate(%) / High(%) / Over(%), Entity For Utilization Report, Utilization(%) + audit; Add New / Export.entity_utilization_settings.
30 Miscellaneous/DropDownMaster (“Dropdown Master”, adm-30)The controlled-vocabulary / EAV dropdown master (791 rows in demo).Filters: Layer/Entity (PDP/Area/FDC/Building/Cabinet/Cable/CDB/Coupler/CSA_Boundary…), Dropdown Type, Value; grid: Entity Name, Dropdown Type, Value, Status + audit; Add New / Export.dropdown_master.
31 Miscellaneous/AssociationMapping (“Association Mapping”, adm-31)Allowed entity-to-entity associations.Grid: Entity Name, Associate Entity Name, Layer Subtype, Status + audit; Add New.association_mapping.
32 Miscellaneous/ViewTicketType (“Ticket Type Master”)Ticket-type vocab.Grid: Ticket Type, Description, Color Code, Module + audit; Add New.ticket_type_master.
33 Miscellaneous/LayerIconMapping (“Layer Icon Setting”, adm-33)Per-layer/status icon mapping (196 rows in demo).Grid: Layer Name, Category, Sub Category, Icon Name (e.g. event.png, splicechamber.png), Network Status (Planned/As-built/Dormant), Is Active + audit; Add New.layer-icon mapping (feeds map symbology).
23 orthoImageLayer/ViewOrthoImage (“Ortho Image Settings”)Raster ortho-image overlays.Grid: Display Name, Image Name, Image Ext + audit + Status; Add New / Export.ortho-image raster registry.
24 Miscellaneous/ViewUserActivityLogSettings (“User Activity Log Settings”)Which controller actions are audited.Grid: Controller Name, Action Name, Display Action Name, Description, Source, Project Name, Status + audit; per-row Edit checkbox.activity-log action registry.

5.6 Dynamic Form / Dynamic Theme

ScreenPurposeKey fieldsDB structure
34 DynamicForm (“Dynamic Form”, adm-34)Per-entity dynamic-attribute form builder.Select Entity (PDP/FDC/Cable/CDB/Coupler/Customer/CX/Demand Point/Duct…) → tabbed builder with Create TextBox / Create Dropdown / Save + delete-control. Adds custom attributes to an entity’s form.dynamic_controls (EAV overlay, docs/database/02).
35 DynamicTheme (“Dynamic Theme”, adm-35)Pick the app color theme.Radio cards: Dawn / Orchid / Ocean / Olive themes; Cancel / Apply.theme setting.

5.7 OSP Settings (search / info / label / tube-core-color / cable-map-color + report/history columns)

All are entity-selector screens (pick “Entity Type” → load that layer’s column/setting list). Group also contains the two Advanced-Settings column pickers.

ScreenPurposeDB structure
36 OSPSettings/SearchSettings (“Search Settings”, adm-36)Which columns are searchable per entity.layer_details search columns.
38 OSPSettings/InfoSettings (“Info Settings”)Which columns show in the map info/identify panel.layer_details info columns.
39 OSPSettings/labelSettings (“Label Settings”)Which column labels each layer on the map.Entity + Label Columns select → Save. layer_details / layer_style_master label expression.
41 OSPSettings/TubeCoreColorSettings (“Tube/Core Color Settings”, adm-41)Fiber tube/core color sequence.Type (Tube / Core) + Add; grid: Number, Color Character, Color, Action. → cable styling.
42 OSPSettings/ViewCableMapColorSettings (“Cable Map Color Settings”)Cable map color by type/category/fiber-count.Filters: Cable Type (Underground / Aerial-Structured / Aerial-Unstructured / Overhead), Cable Category (TK/AC/BB/LM/FTTH…), Fiber Count (2/6/12/24/48/96/144/192/288); grid: Cable Type, Category, Fiber Count, Color Code + audit; Add New / Export.
37 AdvancedSettings/ReportColumnSettings (“Report Column Settings”)Which columns appear in entity reports.layer_details report columns.
40 AdvancedSettings/HistoryColumnSettings (“History Column Settings”)Which columns appear in entity history.layer_details history columns.

5.8 LandBase Settings (runtime landbase layer builder)

ScreenPurposeKey fields / gridDB structure
45 LandbaseSettings/AddLayer (“Add Landbase Layer”, adm-45)Create a landbase layer at runtime (the closest the UI comes to “new layer without code”).Tabs Existing Fields / Add a Field. Fields: Layer Name, Geom Type (Line/Point/Polygon), Layer Abbreviation, Map Abbreviation, Map Border Color (color picker), Map Sequence, Map Border Thickness, Map Background Color (color picker), Map Background Opacity (%), Network Id Type (Automatic/Manual), Network Code Separator (- / /), Is Active, Icon Type + icon upload, Is Center-Line Enable; “Add a Field” tab adds custom attribute columns (Create TextBox + Save).landbase_layer_master + landbase_layer_columns_settings (docs/database/06).
46 LandbaseSettings/ViewLayersList landbase layers.Grid: Layer Name, Geom Type, Layer/Map Abbreviation, Map Border Color, Map Sequence, Map Border Thickness, Map Background Color/Opacity, Is Center Line Enable, Network Type, Network Code Separator, Status + audit; Export.landbase_layer_master.
47 LandbaseSettings/ManageDropdownValues (“Landbase Dropdown Master”)Landbase per-layer vocab.Filters: Landbase Layer (AdityaLandbase/Building/Camera/Electric Utility/Hydrology…), Type (Category / Sub Category / Classification), Value; grid: Layer Name, Dropdown Type, Value, Status + audit; Add New / Export.landbase_dropdown_master.
48 LandbaseSettings/LandBaseLayerSearchSetting (“Search Settings”)Searchable columns per landbase layer.Landbase Layer select → column list.landbase_layer_columns_settings.
49 LandbaseSettings/LandBaseLabelSettings (“Label Settings”)Label column per landbase layer.Landbase Layer + Label Columns select → Save.landbase_layer_columns_settings.

5.9 Other admin areas (left-nav, not separately captured)

  • OLT Patching (top-level) — OLT port-patching workspace (the WorkSpace/equipment OLT-patching UI).
  • Dashboard (05 Admin/Home) — admin dashboard; grid: Month, User Count, Task, Hours per Day (POST getDashboardData).
  • API Consumer Master — registers third-party IntegrationServices clients (api_consumer_master; the empty-password-consumer security finding lives here, docs/database/08).
  • Accessories / Project / Link Budget Settings — accessory + entity mapping; project/planning/workorder/purpose code masters; optical link-budget (drives Splicing/viewlossdetails).

6. What’s configurable-as-data vs hardcoded

This is the central observation for the rewrite thesis. The web client is a thin renderer over the layer_details registry and DB stored functions — but only a fraction of that model is editable through the admin UI.

Admin-editable through the UI (config-as-data):

  • Dynamic attribute formsDynamicForm adds custom textbox/dropdown attributes per entity (dynamic_controls).
  • Controlled vocabulariesDropDownMaster (dropdown_master, 791 rows), LandbaseSettings/ManageDropdownValues, TicketType, port_status (ViewPortStatus).
  • Landbase layer builderLandbaseSettings/AddLayer creates a whole new landbase layer (geom type, styling, network-id rules, custom fields) at runtime — the only true “new layer without code” path.
  • Per-layer presentation — search/info/label/report/history column pickers (OSP + Advanced Settings), LayerIconMapping, TubeCoreColorSettings, CableMapColorSettings, DynamicTheme, ViewLayerGroupsMapping (tree order/grouping).
  • Rights — Roles, per-entity CRUD permission Templates (Entity × Planned/As-Built/Dormant × Add/Edit/Delete/View matrix), RoleModuleMapping, geography scoping (Country→Region→State on AddUser).
  • Vendor specs / BOQ catalogitem_template_master (cost/service-cost/RFS flags/sub-categories) fully UI-editable.
  • Equipment models — the visual Equipment Builder authors the Equipment→Chassis→Slot→Card→Port→Tray hierarchy (isp_model_*) + parent/child placement rules.
  • Utilization thresholds, association rules, termination points, data-uploader column dictionary, change-network-code.

DB / deployment-only (NOT editable in the UI):

  • The core layer_details network-entity behaviour. LayerConfigurationSettings exposes only 5 of ~80 columns (Layer Name, Min Zoom, Is Mobile Layer, Is Visible In Mobile Library, Is Visible On Mobile Map). The ~75 remaining capability flags (is_osp_layer, is_isp_layer, is_splicer, is_cpe_entity, is_barcode_enabled, is_template_required, is_data_upload_enabled, is_history_enabled, is_feasibility_layer, …) and the config pointers/URLs (layer_table, layer_view, layer_form_url, save_entity_url, network_code_format, …) are set only at the DB/deployment level.
  • Adding a network entity type = a new layer_details row + a new att_details_<entity> table + audit twin + CSV-staging twin (ALTER TABLE/CREATE TABLE), not a UI action. The landbase builder is the only UI exception, and landbase layers are a separate, simpler class than network entities.
  • Codification rules, map view definitions (vw_*_map), the 60 GeoJSON caches, trigger-based auditing, and the connectivity model (connection_info) are all DB-side.

Conclusion: “config-not-code” is only partially realized for end users. The vocabulary, presentation, rights, costing, and equipment layers are genuinely data-driven; but the deep behaviour of a network entity still requires DB changes — the key driver of per-customer DB forking, and exactly what the rewrite’s typed schema-driven entity/attribute engine must make safely tenant-editable.


7. UX observations & gaps (for the rewrite)

  1. One global si.* namespace. Every toolbar action and dialog hangs off a single global JS object (4,081 distinct tooltip/onclick entries in TOOL_INVENTORY.txt) — confirming a server-rendered jQuery monolith, not a componentized SPA. The new UI wants a composable, permissioned action model.
  2. Modal-heavy. Nearly every workflow (tickets, redline, all reports, splicing, upload, NE library) is a jQuery-UI modal floating over the map. Reports especially share one rigid template (Filter Data / Summary tabs → Reset/Apply → export + poll log).
  3. ~20 disjoint config screens, one grid pattern. The admin area repeats the same Search-By + Search Text + Search/Export/Reset/Add New + sortable grid (Action … audit columns) archetype across most screens, and the entity-selector-then-load archetype across the OSP/Advanced/Landbase column settings — strong candidates for a single generic config surface.
  4. Reports = ~12 bespoke “draw area → filter → export + poll log” tools (si.*Report.*ExportReport + *ExportReportLog). One generic async export/job framework replaces all of them.
  5. The visual Equipment Builder is a genuinely good feature (CAD grid, model-type rails, parent/child rules) worth re-imagining on top of the typed equipment model.
  6. The admin UI exposes only a sliver of the entity/attribute model (§6) — the single most important gap. The rewrite must make the whole entity/attribute schema safely tenant-editable, retiring the 80-boolean-column + table-per-entity + DB-fork pattern.
  7. Realtime (SignalR) for upload/utilization progress is genuinely useful — keep it, but decouple from Forms-session auth.

Status: complete. Built from a live read-only capture (demo v8.16.4.0); field/grid/select contents are authoritative from DETAIL_ADMIN.txt, the si.* action surface from TOOL_INVENTORY.txt, and DB table mappings from docs/database/. Screenshots live in references/ui-exploration/shots/ and shots/detail/.