Wastewater Planning & Design System (WPDS) architecture

Project purpose

The Wastewater Planning & Design System (WPDS) is used to design a project's wastewater collection network on a map. The outcome is not a standalone drawing: it is a network model stored in an enterprise geodatabase, tied to a single project, that engineering staff can calculate, review, adjust, and export.

Work is split into two phases.

Request. The person opening the project specifies where the area is, draws the project boundary, and places the collection point. When they submit the request, the platform registers the project and, in the background, prepares starting data: it downloads cadastral parcels for that area (Lightbox), clips streets (OpenStreetMap) to the boundary, and generates a preview image. The project is then ready for engineering to open.

Design. The engineering team builds the network in five steps, always within the same project:

  1. Connections. Computes service laterals from each parcel to the street. They can add auxiliary streets manually or restart the calculation.
  2. Parcels. Reviews and corrects parcels, boundary, and laterals on the map.
  3. Main collector. Proposes routes or adjusts a hand-drawn route and inserts it into the network.
  4. Costs. Reviews construction parameters and cost per pipe segment.
  5. EDU. Calculates Equivalent Dwelling Units, used to size the network, and allows exporting the project.

Everything that belongs to a project (parcels, streets, laterals, main collector, costs, EDU) shares the same identifier, workflowid. Copying, cloning, resetting, or deleting a project therefore means working with that identifier, not hunting for loose geometries.

The network is stored as an ArcGIS Utility Network: mains, laterals, connections, and the collection point are network elements with connectivity rules. The network is branch-versioned, so the application and calculations do not write directly to the database. They read and change data through web services published on ArcGIS Server. Heavy work (street graph, laterals, routing, EDU) runs on the server as Python geoprocessing (ArcPy); the web app only submits jobs, shows progress, and displays results on the map.

This documentation explains how that platform is built and how its parts connect, so anyone on the team can understand the system and assess the impact of a change before making it.

The full source code (web application, geoprocessing scripts, and ArcGIS Pro project) is in the repository Wastewater-System--WPDS-.

How it is organized

DocumentContents
1. OverviewThe four system layers, the path of a request, and the licenses and reference data required to implement the platform. Recommended starting point.
2. Web applicationApplication pages, maps, authentication, and communication between widgets.
3. WidgetsReference for each custom widget and the shared code library.
4. WorkflowFull project journey: request, initial calculation, and five-step design.
5. GeoprocessingCatalog of calculation services, script structure, and how to add a new one.
6. ArcGIS ProDesktop project: maps, toolboxes, and database connections.
7. DataData model, Utility Network, published services, and which processes read or write each table.
8. Successful implementationsDelivered products: ARXInfrastructure and DIG, with screens from each.

The generated/ annex holds the detailed inventory: widgets, application, web–geoprocessing links, toolboxes, scripts, ArcGIS Pro, geodatabase, and services. Interactive diagrams live in diagrams/; index.html combines everything in a single offline page.

Glossary

TermMeaning
WorkflowA design project. Identified by workflowid (the globalid of the Workflow table); all project data carries that identifier.
WidgetA component of the Experience Builder web application (form, step panel, editor, etc.).
Geoprocess (GP)A calculation run on ArcGIS Server from a Python script published as a service.
ToolboxAn ArcGIS Pro .atbx file that defines tools (names and parameters) later published as geoprocessing services.
Utility Network (UN)ArcGIS network model where mains, laterals, connections, and the collection point are stored.
Feature serviceA web service that exposes geodatabase tables and layers for query and edit.
EDUEquivalent Dwelling Unit: unit used to size the network.
Documented environmentStaging: service folder AWWSP_UN and parameters in Params/params_staging.py.

Scope

AreaWhat was reviewed
Web applicationApp 1 "Staging | WPDS" (Experience Builder 1.17.0): 4 pages, 11 custom widgets, and 32 shared modules.
GeoprocessingToolbox Steps UN.atbx, 18 entry scripts and helper modules.
ArcGIS ProProject Geoproccess/AWWSP Dev/AWWSP.aprx (5 maps documented).
GeodatabaseSchema export Awwsp UN_ExportXMLWorkspaceD.xml (database awwsp_un).
Published servicesContract for services reachable without authentication. Others require a token and were not verified.

Out of scope:

  • .sde connections and validation of broken layers, which require network access to the databases.

Change log

DateChange
28/09/2026First version.
28/09/2026Editorial review and scope adjustment.
29/09/2026Product named WPDS (Wastewater Planning & Design System). Service URLs use generic placeholders.
29/09/2026Shared auth modules renamed from dig-* to wws-*. Scripts fixed to STAGING environment.
29/09/2026Project onboarding phase renamed to project request.
29/09/2026Risks and technical debt excluded from this documentation.
29/09/2026Workflow doc includes application screenshots; personal data redacted.
29/09/2026Entry document opens with project purpose: request, network design, and Utility Network role.
29/09/2026Full documentation translated to English.
29/09/2026Added successful implementations: ARXInfrastructure and DIG.
29/09/2026Overview lists the ArcGIS licenses and reference datasets required to implement the platform.
29/09/2026EDU elevations documented as queries to the USGS elevation service.
29/09/2026Source repository linked: Wastewater-System--WPDS-.
29/09/2026Product references renamed from WWS to WPDS across the documentation.
29/09/2026Narrative doc filenames, diagram labels, placeholders (<wpds-server>, <gis-server>), and screenshot assets use English names only.

Diagrams

Wastewater Planning & Design System (WPDS) · System architecture DiagramOpen full screen ↗
Phase 1 · Project request DiagramOpen full screen ↗
Phase 2 · Network design DiagramOpen full screen ↗
Project data flow DiagramOpen full screen ↗
Data model · geodatabase awwsp_un DiagramOpen full screen ↗
Geoprocess sequence: Send to Engineers DiagramOpen full screen ↗
Project lifecycle states DiagramOpen full screen ↗

1. Overview

In brief: the platform has four layers. The user works in a web application; each calculation action is sent to a geoprocess on ArcGIS Server; the geoprocess reads and updates project data in the geodatabase through web services; and ArcGIS Pro is where those geoprocesses and services are prepared and published.

Diagram: System architecture

The four layers

LayerWhat it isWhere it lives
1. Web applicationUser interface: pages, maps, forms, and editor.ExB/server/public/apps/1 and widgets under ExB/client/your-extensions/widgets
2. GeoprocessingNetwork calculations (project request, connections, main collector, EDU, costs, export).WPDS project services at https://<wpds-server>/server/rest/services/AWWSP_UN/…/GPServer. Code in Geoproccess/Scripts Utiliy Network
3. ArcGIS ProEnvironment to prepare and publish tools and maps.Geoproccess/AWWSP Dev/AWWSP.aprx
4. DataSanitary sewer Utility Network and project tables in PostgreSQL (Azure), published as feature services.Database awwsp_un. Services AWWSP_UN/Utility_Network and AWWSP_UN/Utility_Network___Auxiliar

Path of a request

The example below follows what happens when the user clicks Send to Engineers to submit a project request. Other calculation actions follow the same pattern.

  1. Preparation. The create-workflow widget collects the drawn boundary, discharge point, and form data.
  2. Authentication. The shared module wws-server-fetch obtains an ArcGIS Server token from the user's portal session.
  3. Execution. The application submits geoprocess CreateWorkflow. The script registers the boundary, the project (status Pending), and the collection point, creates the commercial contact in HubSpot (production only), and returns the project identifier.
  4. Initial calculation. Without waiting for a response, the application submits CalculateInitialNetwork. That job downloads parcels from Lightbox, clips streets from the roads database, generates a preview image, and sets the project to Ready.
  5. Confirmation. The user sees a confirmation message. Engineering opens the project later from List projects, which shows the updated status.
Diagram: Geoprocess sequence

Technology

ComponentDetail
Web applicationArcGIS Experience Builder 1.17.0 (Developer Edition), React, and ArcGIS Maps SDK for JavaScript
ServerWPDS ArcGIS Enterprise: portal https://<wpds-server>/portal and server https://<wpds-server>/server
GeoprocessingPython with ArcPy (ArcGIS Pro 3.5) and NetworkX for graph analysis
DatabasePostgreSQL on Azure with enterprise geodatabase; branch-versioned Utility Network
External servicesLightbox (cadastral parcels) and HubSpot (CRM)
InfrastructureGIS server on Azure (ArcGIS Enterprise and PostgreSQL)

What is required to implement it

A new deployment needs the source repository, the ArcGIS licenses below, and a set of reference datasets. The application and geoprocessing services cannot run without them.

Source code

The full codebase is in the repository Wastewater-System--WPDS-.

Licenses

LicenseWhy it is required
ArcGIS ServerPublishes the feature services and the geoprocessing services the web application calls.
Network AnalystArcGIS extension used by network routing on the server.
ArcGIS Pro AdvancedDesktop license used to author the Utility Network, maps, and toolboxes, and to publish them.

Reference data

DatasetRole
OpenStreetMap roadsStreet network clipped to the project boundary for the initial calculation (awwsp_roads.sde.roads_usa_osm).
TIGERAlternative to OpenStreetMap roads: U.S. Census road lines that can supply the same street network.
Digital elevation modelTerrain surface used when the network needs ground elevation.
USGS elevation serviceGround elevation for EDU points. Geoprocess CalulateEdus queries the USGS Elevation Point Query Service for each point.
LightboxCadastral parcels downloaded for the area inside the project boundary.

Design principles

  • Everything is organized by project. Each project element (mains, connections, parcels, EDU, costs) stores the project's workflowid. Copy, reset, clone, or delete a project by filtering on that identifier.
  • Data is edited through services. The Utility Network is branch-versioned, so it can only be changed through its web services. Scripts do not write directly to the database; they use service URLs defined in UtilsUN/vars.py.
  • Calculation runs locally (on the GP server). Each geoprocess copies project data to a temporary geodatabase, computes with ArcPy, and pushes results back to the service.
  • Configuration lives in the application. Geoprocess URLs are set per widget in Experience Builder, not hard-coded.
  • One calculation at a time. The application blocks starting a geoprocess while another is running.

2. Web application

In brief: the application is a single ArcGIS Experience Builder experience with four pages. It is built from custom widgets that share a common library (shared-code). Widgets coordinate through configuration, messages, and shared state, and every geoprocessing call goes through the same authentication module.

Annexes: application · widgets · web–geoprocessing links

Pages

Application ExB/server/public/apps/1 ("Staging | WPDS") has these pages:

PagePurposeMain widgetsMap
Init workflowWelcome screen: user picks the project location.init-workflow, stepper—
Create workflowProject request: boundary, discharge point, and client data.create-workflow (and create-workflow-floating on small screens), stepperMap Stage 1 (phase 1 web map)
Workflow managerFive-step network design for one project.workflow-controller, workflow-project, advanced-editing, data-statistics, clone-workflow, title-project, stepperMap Stage 2 (phase 2 web map)
List projectsProject list with preview and status; open and delete.list-projects—

How each page looks, in project order, is in 4. Workflow.

Web maps

Maps come from the WPDS portal (https://<wpds-server>/portal). Phase 2 is exported in the repository (shared-code/Map Phase 2.json):

Map layerService / layerTable
BoundaryUtility_Network___Auxiliar/5Boundary
ParcelUtility_Network___Auxiliar/4Parcel
Edus pointsUtility_Network___Auxiliar/0Edus
Auxiliary line, Lateral, Force mainUtility_Network/5 (same layer, filtered by subtype)SewerLine
Service connection, Wastewater Collection PointUtility_Network/2 (filtered by subtype)SewerDevice
TeeUtility_Network/4SewerJunction
WetlandsExternal USGS service—
Tables: Workflows Projects, Construction Parameters, Line Costs, UsersUtility_Network___Auxiliar/6, /12, /13, /14Workflow, ConstructionParameters, LineCosts, WorkflowUser

Widgets reach layers through map data sources, not raw URLs. If the web map or a republished service changes, you may need to re-select layers in widget configuration.

Communication between widgets

The application uses four mechanisms:

  1. Configuration references. A widget points to another widget it controls. For example, each stepper targets the widget whose steps it displays, and advanced-editing points at workflow-controller.
  2. Messages. When the user edits features in advanced-editing, it publishes a data-change message. workflow-project receives it and reacts by layer—for example, a boundary edit triggers geoprocess UpdateNetwork.
  3. Shared state. A global "geoprocess running" flag (gp-running-lock) prevents two calculations at once. Other modules keep the editor aligned with the active step.
  4. URL parameters. The active project moves between pages as ?workflow=<id>, and the chosen location as ?lat=&lng=.

Authentication

Module shared-code/wws-server-fetch.ts centralizes ArcGIS Server access:

  • Token. Requests a server token from the user's portal session. If there is no session (e.g. local development), it uses the API key configured on the widget.
  • Job submission. Geoprocesses are submitted with POST so large geometries are not sent in the URL.
  • Polling. Associates the token with job status queries so polling stays authenticated.

Geoprocess configuration

Each widget stores its tools in application configuration with two fields: service URL and a utility reference (the app's service registry). Practical effects:

  • GP services. URLs and utilities configured in the documented application point at folder AWWSP_UN.

3. Widgets

In brief: there are 11 custom widgets, all used in the application. They rely on the shared-code library. Paths in this document are relative to ExB/client/your-extensions/widgets/.

Annexes: widget inventory · web–geoprocessing links

Project request

init-workflow — Start

  • Role: welcome screen where the user picks the project location. Looks up State Plane zones for the point to suggest the right coordinate system.
  • Page: Init workflow.
  • Geoprocesses: none.

create-workflow — Project request

  • Role: guides the four request steps (location, boundary, discharge point, and form with client data and contracted package). On submit, registers the project and starts initial calculation in the background.
  • Page: Create workflow.
  • Geoprocesses: CreateWorkflow, then CalculateInitialNetwork.
  • Main code: steps/step-4.tsx (submit) and shared-code/build-create-workflow-gp-params.ts (form to GP parameters).

create-workflow-floating — Request on small screens

  • Role: same request logic as a floating bar for small viewports.
  • Page: Create workflow.

stepper — Step indicator

  • Role: shows flow progress and drives the step of the linked widget.
  • Pages: all flow pages.

Project design (Workflow manager)

workflow-controller — Coordinator

  • Role: switches between map editor and step panel depending on the active step.

workflow-project — Design steps

  • Role: core of design. Presents steps 5–9, checks required data before advancing, persists the current step on the project, and reacts to map edits.
StepWhat it doesGeoprocesses
5. ConnectionsComputes laterals from parcels to streets.CalculateConnections, PrepareManualAuxiliaryLines, ResetNetwork
6. ParcelsReview and edit parcels and boundary.UpdateNetwork, automatic on boundary edit
7. Main collectorProposes routes or adjusts a hand-drawn route and inserts it.Second1, Second2, SecondMainLine, ResetMainLine
8. CostsEdit construction parameters and per-segment costs.— (direct table edit)
9. EDUEDU calculation, report, and export.CalulateEdus, ExportToShapefile

advanced-editing — Map editor

  • Role: edit features on the map: single, batch, and attachments. Applies Utility Network connectivity rules in the browser. Each edit notifies workflow-project to recalculate as needed.

data-statistics — Statistics

  • Role: loads project metrics used for time and cost estimates.
  • Geoprocess: CalculateEstimateInputs (read-only).

clone-workflow — Clone project

  • Role: creates a copy with a new name and description.
  • Geoprocess: CloneWorkflow.

title-project — Header

  • Role: shows project and client names and assigned users.

Listing

list-projects — Projects

  • Role: shows projects as cards with preview, status, and assignee. While status is Pending, polls every 5 seconds and blocks opening. Supports bulk delete.
  • Geoprocess: DeleteMultipleProject.

Shared library (shared-code)

The library has 32 modules. The most important:

ModuleResponsibility
wws-server-fetch, wws-api-request-setup, wws-api-tokenAuthentication and requests to ArcGIS Server.
geoprocessGeoprocess progress bar and error formatting.
gp-running-lockLock that prevents two geoprocesses at once.
workflow-packages and relatedContracted package catalog (Package table).
stepper-navigationStep navigation.
workflow-controller-coordination, editor-selection-coordination, map-edit-sketch-coordinationCoordination between editor, steps, and map sketch.

The full list, with widgets per module, is in the widget inventory.

4. Project workflow

In brief: a project goes through two phases. In the request, the user defines the area and discharge point, and the system automatically prepares parcels and streets. In design, engineering completes the network in five steps inside Workflow manager. Screenshots in this chapter show that journey in the application. Names, emails, and phone numbers are redacted.

Diagrams: Phase 1 · Project request · Phase 2 · Design · Geoprocess sequence · Project states

Phase 1 · Project request

StepUser actionSystem action
1. LocationChooses project area on Init workflow.Suggests the area coordinate system.
2. BoundaryDraws the project limit.—
3. Discharge pointPlaces the collection point.—
4. SubmitCompletes client data and package, clicks Send to Engineers.Runs CreateWorkflow and, in the background, CalculateInitialNetwork.

CreateWorkflow (Create_workflow.py):

  • Registers boundary, project (status Pending, step 5), and collection point.
  • In production, creates the HubSpot contact.
  • Returns the project identifier.

CalculateInitialNetwork (Calculate_initial_network.py):

  1. Generates a preview image and stores it as an attachment.
  2. Clips streets from the roads database (OpenStreetMap) to the boundary, keeps only those connected to the collection point, and if needed adds a segment linking the collection point to the nearest street. These become auxiliary lines.
  3. Downloads parcels inside the boundary from Lightbox.
  4. Sets the project to Ready, or Ready with errors if something fails.

After submit, the app shows confirmation. The project appears in List projects and can be opened once it leaves Pending.

Project request start screen
1. Location. Start screen: user indicates where the project sits.
Project boundary drawn on the map
2. Boundary. User draws the project limit on the map.
Discharge point placed near the boundary
3. Discharge point. The star marks the collection point.
Submit form before sending to engineering
4. Submit. Project data before sending to engineering.
Confirmation after request submission
Confirmation after submit. Initial calculation continues in the background.

Phase 2 · Design

The project opens from List projects. The current step is stored on the project record; the app blocks advancing if the next step lacks required data.

Project list with preview, step, and status
Project list. Each card shows preview, step, and opens design.
StepEngineer actionGeoprocessesData affected
5. ConnectionsComputes laterals from each parcel to the street. Can add hand-drawn auxiliary lines or reset the network.CalculateConnections, PrepareManualAuxiliaryLines, ResetNetworkService connections, laterals, tees
6. ParcelsReviews and fixes parcels, boundary, and laterals in the editor.UpdateNetwork when boundary changesParcels, boundary, related network
7. Main collectorAutomatic: pick among proposed routes. Manual: draw a route and the system snaps it to the network.Second1 → Second2, SecondMainLine, ResetMainLineMain collector (force main)
8. CostsReviews construction parameters and per-segment costs.—LineCosts, ConstructionParameters
9. EDUCalculates EDU, reviews feasibility report, exports project.CalulateEdus, ExportToShapefileEDU points; ZIP with shapefiles

Two more actions are available throughout design:

  • Statistics (CalculateEstimateInputs): project metrics.
  • Clone (CloneWorkflow): project copy.

From List projects, projects can be deleted (DeleteMultipleProject).

Step 5: service connections on parcels
5. Connections. Calculated laterals and calculation notices.
Step 6: parcel manager for the boundary
6. Parcels. Manager lists boundary parcels for map review.
Step 7: main collector panel, automatic or manual mode
7. Main collector. Automatic route calculation or hand-drawn route.
Step 8: main line drawn and cost tables
8. Costs. With the main line in place, open parameter and cost tables.
Design parameters: density, flow, pipe type
Design parameters that feed cost and EDU calculation.
Construction parameters in the cost table
Construction parameters: trench depth, width, and unit costs.
Step 9: collector hydraulic profile after EDU calculation
9. EDU. Collector hydraulic profile after equivalent dwelling units are calculated.
Collector segment table and shapefile download
Collector segment table and shapefile export.

Project states

StateWhenSet by
PendingRight after project creation.CreateWorkflow
ReadyWhen initial calculation or a network operation finishes successfully.CalculateInitialNetwork, ResetNetwork, UpdateNetwork
Ready with errorsWhen one of those operations fails partially.Same processes

Besides status, the project stores the current step (5–9) and whether connections have been calculated (calculated_connections).

General rules

  • One geoprocess at a time. The app does not start a calculation while another is running.
  • Shared authentication. All geoprocesses use the same mechanism (see 2. Web application).
  • Data version. Calculations use geodatabase version sde.DEFAULT.

5. Geoprocessing

In brief: all calculations are Python scripts defined as tools in ArcGIS Pro toolbox Steps UN.atbx and published as asynchronous services in ArcGIS Server folder AWWSP_UN. Each service maps to one tool, and each task to one script.

https://<wpds-server>/server/rest/services/AWWSP_UN/CreateWorkflow/GPServer/Create_Workflow
                                              folder   service = tool   task = script (Create_workflow.py)

Some names contain typos that are part of the contract with the web app (for example, CalulateEdus). Do not fix them without republishing the service and updating application configuration.

Annexes: web–geoprocessing links · toolboxes · scripts

Catalog

The Contract column shows whether the published contract could be compared to the local toolbox definition: ✔ match, ✖ differs, 🔒 requires authentication.

Project request

Service / taskInputs → outputsScriptUsed inContract
CreateWorkflow/Create_Workflowboundary, collection point, name, description, package, company, contact data → workflow_idCreate_workflow.pyRequest, step 4✖
CalculateInitialNetwork/Calculate_initial_networkworkflowId, sdeVersionCalculate_initial_network.pyRequest, background✔

Network design

Service / taskInputs → outputsScriptStepContract
CalculateConnections/Calculate_connectionsworkflowId, distance, unit, sdeVersionCalculate_connections.py5🔒
PrepareManualAuxiliaryLines/Prepare_manual_auxiliary_linesworkflowId → segments_preparedPrepare_manual_auxiliary_lines.py5🔒
ResetNetwork/Reset_networkworkflowId, sdeVersionReset_network.py5🔒
UpdateNetwork/Update_networkworkflowId, distance, unit, sdeVersionUpdate_network.py6🔒
Second1/Second_1workflowId, totalRoutes → routesSecond_1.py7🔒
Second2/Second_2workflowId, routeSecond_2.py7🔒
SecondMainLine/Second_main_lineworkflowId, userRouteSecond_main_line.py7🔒
ResetMainLine/Reset_main_lineworkflowIdReset_main_line.py7🔒
CalulateEdus/Calculate_edusworkflowIdCalculate_edus.py9🔒
ExportToShapefile/Export_to_shapefileworkflowId → shapefilesExport_to_shapefile.py9🔒
CalculateEstimateInputs/Calculate_estimate_inputsworkflowId, graphMode, sdeVersion → resultJsonCalculate_estimate_inputs.pyStatistics🔒

Project management

Service / taskInputs → outputsScriptUsed inContract
CloneWorkflow/Clone_workflowworkflowId, projectName, projectDescription → newWorkflowIdClone_workflow.pyClone🔒
DeleteMultipleProject/Delete_multiple_projectsworkflowsIdDelete_multiple_projects.pyList🔒

Tools not used by the application

  • CopyToLocal: copies a project to a local geodatabase for debugging.
  • Scripts Second_1_on_edus.py and Second_1_priori.py: experimental route variants, not published.

Script structure

All entry scripts follow the same pattern:

  1. Parameters. Read by index (arcpy.GetParameter(0), GetParameter(1), …). Order must match the published tool.
  2. Data access. Project data elements from UtilsUN.vars (e.g. workflows_fc, sewer_line_fc). Each wraps the corresponding service URL.
  3. Local calculation. Copy project data to a temporary geodatabase (Manager), compute with ArcPy or NetworkX, push results to the service.
  4. Cleanup. Update project status when needed and close the edit session.
UtilsUN moduleResponsibility
vars.pyConfiguration: loads credentials from .env, picks environment, builds service URLs, defines subtype and domain codes.
elements_rest.pyService access: queries and edits filtered by project, Utility Network operations.
manager.pyTemporary workspace per run.
workflow_registration.pyProject request and HubSpot registration.
connection_functions*.py, parcel_functions.py, street_functions.pyLaterals, parcels (Lightbox), streets.
network_cleanup.pyNetwork cleanup after main collector insertion.
elevation_raster.pyElevation for EDU and estimates.
hubspot.py, gp_errors.py, functions.pyCRM integration, error handling, utilities.

Environment

ItemStaging (documented)
ParametersParams/params_staging.py
Data servicesAWWSP_UN/Utility_Network, AWWSP_UN/Utility_Network___Auxiliar
GeoprocessingFolder AWWSP_UN

Environment is not inferred from where a service is published: it is fixed in UtilsUN/vars.py (environment = "STAGING").

Adding a geoprocess

  1. Script. Create Scripts Utiliy Network/<Task_name>.py following the structure above. Access data only through UtilsUN.vars.
  2. Tool. Add it to AWWSP Dev/Steps UN.atbx with parameters in the same order the script reads them.
  3. Publish to staging. Publish as an asynchronous service in folder AWWSP_UN. Confirm vars.py environment first.
  4. Application. Register the service as an application utility and select it in widget configuration. In code, submit through the shared auth module and respect the running-job lock.
  5. Documentation. Update this documentation.

6. ArcGIS Pro

In brief: project Geoproccess/AWWSP Dev/AWWSP.aprx is the preparation and publishing environment. From it you maintain calculation tools, publish services, and inspect data. The web application does not use this project directly—it uses published services.

Annex: ArcGIS Pro inventory

Toolboxes

ToolboxStatusNotes
Steps UN.atbxIn use (15 tools)Source of services in folder AWWSP_UN.
Steps classical.atbxBroken referenceStill registered in the project; file no longer exists.

Many tools point at scripts via paths from another machine (C:\Repo\DIG_Python\…). On a new machine, relink them to Geoproccess/Scripts Utiliy Network.

Maps

MapContentsUse
Utility Network - Web MapLayers from Utility_Network and Utility_Network___Auxiliar servicesDesktop view of what users see in the app. Useful for debugging.
Utility NetworkSanitary sewer network read directly from awwsp_unReview Utility Network model.
Utility Network - AuxiliarProject tables and layers (boundary, parcels, EDU, costs…)Source of the auxiliary service.
RoadsOpenStreetMap roads (awwsp_roads)Street source for initial calculation.
Create WorkflowCollection point and boundaries from the legacy model (awwsp)Reference to older onboarding; the app uses published services.

Database connections

ServerDatabaseUserMaps
GIS server on Azureawwsp_undigUtility Network, Utility Network - Auxiliar
GIS server on AzureawwspsdeCreate Workflow
localhostawwsp_roadssdeRoads

Connection files live under Local connections/ and Remote connections/. Scripts connect directly only to the roads database (Remote connections/Awwsp Roads.sde). Everything else goes through services.

Relationship to services

  • Geoprocessing. Tools in Steps UN.atbx publish as GP services under AWWSP_UN.
  • Data. Maps Utility Network and Utility Network - Auxiliar are the source of data services. Scripts reach them by layer index (/FeatureServer/2, /5, /12, …), so when republishing, preserve layer order. The full mapping is in 7. Data.

7. Data

In brief: data lives in enterprise geodatabase awwsp_un (PostgreSQL, owner dig). There are two groups: the Utility Network (sanitary sewer network) and project data (boundary, parcels, EDU…), plus several management tables. All data for one project links through workflowid.

Source: schema export AWWSP Dev/Awwsp UN_ExportXMLWorkspaceD.xml.

Diagrams: Data model · Data flow · Annex with fields, domains, subtypes: geodatabase

Utility Network (UtilityNetwork)

The Utility Network was built with ArcGIS Pro 3.4.3 and uses branch versioning, so it can only be edited through its services. Classes the platform uses:

ClassTypes (asset groups and asset types)Platform use
SewerLineGravity Main (street main; hidden main used as force main) · Force Main · LateralAuxiliary streets, main collector, laterals
SewerDeviceTreatment (collection point) · Service Connection (commercial, industrial, residential)Collection / discharge point and service connections
SewerJunctionFitting (tee, cross)Connection tees on the main

The model includes other classes the platform does not use directly: SewerAssembly, SewerSubnetLine, Structure classes, and internal Utility Network tables.

Project data (ProjectData) and management tables

TableTypeContents
WorkflowTableThe project: name, client, contact, package (package_id), assignee (assigned_user), status, current step, and whether connections are calculated. Attachments store the preview image.
BoundaryPolygonProject limit. Referenced by perimeterid.
ParcelPolygonProject parcels with land use, EDU, and linked service connection.
EdusPointEDU points along streets.
RouteLineMain collector route candidates.
LineCosts, ConstructionParametersTableCosts and construction parameters for step 8.
PackageTableContracted package catalog.
WorkflowUserTableUsers assignable to a project.

Published services

ServiceContents
AWWSP_UN/Utility_NetworkUtility Network
AWWSP_UN/Utility_Network___AuxiliarProject data and management tables

Both services require authentication.

Who uses each table

TableService layerVariable in UtilsUN/vars.pyGeoprocesses that use itWeb editing
SewerDeviceUtility_Network/2sewer_device_url (collection point and connections)Request, initial calc, connections, EDU, routes, update, reset, clone, delete, export, statisticsMap editor
SewerJunctionUtility_Network/4sewer_junction_url (tees)Initial calc, connections, EDU, update, reset, clone, delete, statisticsMap editor
SewerLineUtility_Network/5sewer_line_url (auxiliary streets, main, laterals)Most calculation processesMap editor
EdusUtility_Network___Auxiliar/0edu_points_urlEDU, connections, main collector, update, reset, clone, delete, exportRead-only (step 9)
ParcelUtility_Network___Auxiliar/4parcels_project_urlInitial calc, update, reset, EDU, clone, delete, export, statisticsMap editor (step 6)
BoundaryUtility_Network___Auxiliar/5perimeter_urlRequest, initial calc, update, reset, EDU, clone, delete, exportMap editor (triggers UpdateNetwork)
WorkflowUtility_Network___Auxiliar/6workflows_urlAll that change project status, plus clone, delete, exportCurrent step and assignee
ConstructionParametersUtility_Network___Auxiliar/12construction_parameters_urlClone, deleteStep 8
LineCostsUtility_Network___Auxiliar/13line_costs_urlClone, deleteStep 8
WorkflowUserUtility_Network___Auxiliar/14——Read-only

Exact table-by-table and script-by-script links are in the geodatabase annex.

External sources

SourceUse
LightboxCadastral parcels inside the project boundary.
OpenStreetMap (awwsp_roads.sde.roads_usa_osm)Streets for initial calculation; the only direct database read.
USGS WetlandsWetlands as a reference layer on the map.
USGS elevation serviceGround elevation for EDU points. Geoprocess CalulateEdus queries the USGS Elevation Point Query Service for each point.
HubSpotCommercial contact when creating a project in production.

8. Successful implementations

In brief: the same wastewater planning workflow has been delivered as two products. ARXInfrastructure is the branded application shown below, from location through EDU export. DIG (Digital Infrastructure) is an earlier delivery of the Waste Water Planning Tool; the frames come from a recorded walkthrough of one project, from map extent through the hydraulic profile.

ARXInfrastructure

The platform is the Wastewater Planning & Design System (WPDS). ARXInfrastructure is one branded deployment of that workflow. A project starts with a location, a drawn boundary, and a collection point, then goes to engineering. Design continues with connections, parcels, the main collector, costs, and EDU.

These frames are the same sequence used in 4. Workflow. Names, emails, and phone numbers are redacted.

ARXInfrastructure start screen
1. Location. Start screen: the user indicates where the project sits.
Project boundary drawn on the map
2. Boundary. The user draws the project limit on the map.
Discharge point placed near the boundary
3. Discharge point. The star marks the collection point.
Submit form before sending to engineering
4. Submit. Project data before sending to engineering.
Confirmation after request submission
Confirmation after submit. Initial calculation continues in the background.
Project list with preview, step, and status
Project list. Each card shows a preview and the current step, and opens design.
Service connections on parcels
5. Connections. Calculated laterals and calculation notices.
Parcel manager for the boundary
6. Parcels. The manager lists parcels inside the boundary for map review.
Main collector panel
7. Main collector. Automatic route calculation or a hand-drawn route.
Main line drawn and cost tables
8. Costs. With the main line in place, open parameter and cost tables.
Design parameters
Design parameters that feed cost and EDU calculation.
Construction parameters
Construction parameters: trench depth, width, and unit costs.
Collector hydraulic profile
9. EDU. Collector hydraulic profile after equivalent dwelling units are calculated.
Collector segment table and shapefile download
Collector segment table and shapefile export.

DIG

The product on screen is Digital Infrastructure — Automated Waste Water System Planning (Waste Water Planning Tool). The walkthrough covers one project: set the map extent, draw the boundary, place the collection point, send the request, generate laterals, choose a main route, then review segments, the hydraulic grade line, and design-flow parameters.

DIG location step with the map extent control
1. Location. The user frames the project area and sets the map extent.
DIG boundary, collection point, and send form
2. Request. Boundary and collection point are on the map; the form sends the plan to engineering.
DIG laterals after a completed calculation
3. Connections. Laterals drawn after the calculation finishes.
DIG automatic main-line route options
4. Main collector. Proposed routes; one route is selected to add.
DIG designed network and segment table
5. Result. Designed network inside the boundary, with the segment table open.
DIG line segment table with EDU values
6. Segments. Per-section length, elevation, and EDU values.
DIG hydraulic grade line of the main collector
7. EDU. Hydraulic grade line of the main collector.
DIG design flow and line-loss parameters
8. Parameters. Pipe type, roughness, and design flow used for gravity segments.

Experience Builder applications

Pages, data sources, and widget coordination for each app under ExB/server/public/apps.

Updated 2026-09-29.

App 1 — Staging | Wastewater Planning & Design System (WPDS)

Experience Builder 1.17.0 · ExB/server/public/apps/1

Pages

PageCustom widgets
Create workflowCreate workflow (create-workflow), Stepper Create (stepper), Stepper Create (SMALL) (stepper), Create workflow (floating) (create-workflow-floating)
Workflow managerData Statistics (data-statistics), Workflow Controller (workflow-controller), Workflow Project (workflow-project), Advanced editing (advanced-editing), Clone Workflow (clone-workflow), Stepper Workflow (stepper), Title Project (title-project)
List projectsList projects (list-projects)
Init workflowStepper Existing Init (stepper), Init Workflow (init-workflow)

Data sources

IdTypePortal itemPortal
dataSource_6WEB_MAP8c5593220f234638bd9036ed9bb22a70https://<wpds-server>/portal
dataSource_11WEB_MAP6228c09e2bc84a3eaf6f59ba51a582b2https://<wpds-server>/portal

Widget messages

FromMessageToAction
Advanced editingDATA_RECORD_SET_CHANGEWorkflow Projectnetwork

Widget references in configuration

WidgetConfig keyReferenced widget
Stepper CreatewidgetToControlCreate workflow
Stepper CreateinitWorkflowWidgetIdInit Workflow
Stepper WorkflowwidgetToControlWorkflow Project
Stepper WorkflowinitWorkflowWidgetIdInit Workflow
Advanced editingworkflowControllerWidgetIdWorkflow Controller
Stepper Existing InitwidgetToControlInit Workflow
Stepper Create (SMALL)widgetToControlCreate workflow (floating)
Stepper Create (SMALL)initWorkflowWidgetIdInit Workflow

ArcGIS Pro projects

Maps, layers, toolboxes, and connections for .aprx projects (read with arcpy 3.5).

Updated 2026-09-29.

Geoproccess/AWWSP Dev/AWWSP.aprx

Toolboxes: Geoproccess/AWWSP Dev/Steps UN.atbx, ../DIG/AWWSP Geoproccess/AWWSP Dev/Steps classical.atbx

Databases: D:\WWS\Geoproccess\AWWSP Dev\AWWSP.gdb, .\Roads\Roads full USA - TIGER.gdb, D:\WWS\Geoproccess\AWWSP Dev\Remote connections\Awwsp Roads.sde, D:\WWS\Geoproccess\AWWSP Dev\Remote connections\Awwsp UN - Admin.sde, D:\WWS\Geoproccess\AWWSP Dev\Remote connections\Awwsp UN.sde, ..\..\..\Roads_USA_cleaned.gdb

Enterprise connections used by layers

ServerInstanceDatabaseVersionUserLayersMaps
<gis-server>sde:postgresql:<gis-server>awwsp_unsde.DEFAULTdig16Utility Network, Utility Network - Auxiliar
<gis-server>sde:postgresql:<gis-server>awwspsde.DEFAULTsde14Create Workflow
localhostsde:postgresql:localhostawwsp_roadssde.DEFAULTsde1Roads

Connection files

Local connections/Awwsp EGDB Remote.sde, Local connections/Awwsp Roads.sde, Local connections/Awwsp UN - Admin.sde, Local connections/Awwsp UN.sde, Remote connections/Awwsp Roads.sde, Remote connections/Awwsp UN - Admin.sde, Remote connections/Awwsp UN.sde

Maps

MapLayersTablesSource kinds
Utility Network124enterprise-gdb, service
Utility Network - Web Map169group, service
Create Workflow41enterprise-gdb, service
Roads31enterprise-gdb, service
Utility Network - Auxiliar65enterprise-gdb, service
Utility Network — layers
LayerSource kindDataset / origin
Sewer Deviceenterprise-gdbawwsp_un.dig.SewerDevice
Sewer Assemblyenterprise-gdbawwsp_un.dig.SewerAssembly
Sewer Junctionenterprise-gdbawwsp_un.dig.SewerJunction
Sewer Lineenterprise-gdbawwsp_un.dig.SewerLine
Sewer Subnet Lineenterprise-gdbawwsp_un.dig.SewerSubnetLine
Structure Junctionenterprise-gdbawwsp_un.dig.StructureJunction
Structure Lineenterprise-gdbawwsp_un.dig.StructureLine
Structure Boundaryenterprise-gdbawwsp_un.dig.StructureBoundary
UtilityNetwork Utility Networkenterprise-gdbawwsp_un.dig.UtilityNetwork
UtilityNetwork Utility Network\Dirty Areasenterprise-gdbawwsp_un.dig.UN_41_DirtyAreas
World Topographic Mapservicehttps://<external-service>
World Hillshadeservicehttps://<external-service>/World_Hillshade
Utility Network - Web Map — layers
LayerSource kindDataset / origin
Utility Network\Sewer Deviceservicehttps://<wpds-server>/server/rest/services/AWWSP_UN/Utility_Network/FeatureServer/2
Utility Network\Sewer Assemblyservicehttps://<wpds-server>/server/rest/services/AWWSP_UN/Utility_Network/FeatureServer/3
Utility Network\Sewer Junctionservicehttps://<wpds-server>/server/rest/services/AWWSP_UN/Utility_Network/FeatureServer/4
Utility Network\Sewer Lineservicehttps://<wpds-server>/server/rest/services/AWWSP_UN/Utility_Network/FeatureServer/5
Utility Network\Sewer Subnet Lineservicehttps://<wpds-server>/server/rest/services/AWWSP_UN/Utility_Network/FeatureServer/6
Utility Network\Structure Junctionservicehttps://<wpds-server>/server/rest/services/AWWSP_UN/Utility_Network/FeatureServer/7
Utility Network\Structure Lineservicehttps://<wpds-server>/server/rest/services/AWWSP_UN/Utility_Network/FeatureServer/8
Utility Network\Structure Boundaryservicehttps://<wpds-server>/server/rest/services/AWWSP_UN/Utility_Network/FeatureServer/9
Utility Network\UtilityNetwork Utility Networkservicehttps://<wpds-server>/server/rest/services/AWWSP_UN/Utility_Network/FeatureServer/0
Utility Network\UtilityNetwork Utility Network\Dirty Areasservicehttps://<wpds-server>/server/rest/services/AWWSP_UN/Utility_Network/FeatureServer;VERSION=sde.DEFAULT;VERSIONGUID={BD3F4817-9A00-41AC-B0CC-58F78DBAE0A1}/1
Utility Network _ Auxiliar\Edusservicehttps://<wpds-server>/server/rest/services/AWWSP_UN/Utility_Network___Auxiliar/FeatureServer;VERSION=sde.DEFAULT;VERSIONGUID={BD3F4817-9A00-41AC-B0CC-58F78DBAE0A1}/0
Utility Network _ Auxiliar\Routeservicehttps://<wpds-server>/server/rest/services/AWWSP_UN/Utility_Network___Auxiliar/FeatureServer;VERSION=sde.DEFAULT;VERSIONGUID={BD3F4817-9A00-41AC-B0CC-58F78DBAE0A1}/3
Utility Network _ Auxiliar\Parcelservicehttps://<wpds-server>/server/rest/services/AWWSP_UN/Utility_Network___Auxiliar/FeatureServer;VERSION=sde.DEFAULT;VERSIONGUID={BD3F4817-9A00-41AC-B0CC-58F78DBAE0A1}/4
Utility Network _ Auxiliar\Boundaryservicehttps://<wpds-server>/server/rest/services/AWWSP_UN/Utility_Network___Auxiliar/FeatureServer;VERSION=sde.DEFAULT;VERSIONGUID={BD3F4817-9A00-41AC-B0CC-58F78DBAE0A1}/5
World Topographic Mapservicehttps://<external-service>
World Hillshadeservicehttps://<external-service>/World_Hillshade
Create Workflow — layers
LayerSource kindDataset / origin
Collection Pointenterprise-gdbawwsp.sde.WWCollectionPoint
Boundariesenterprise-gdbawwsp.sde.Boundaries
World Topographic Mapservicehttps://<external-service>
World Hillshadeservicehttps://<external-service>/World_Hillshade
Roads — layers
LayerSource kindDataset / origin
Roadsenterprise-gdbawwsp_roads.sde.roads_usa_osm
Hybrid Reference Layerservicehttps://<external-service>
World Imageryservicehttps://<external-service>/World_Imagery
Utility Network - Auxiliar — layers
LayerSource kindDataset / origin
Edusenterprise-gdbawwsp_un.dig.Edus
Routeenterprise-gdbawwsp_un.dig.Route
Parcelenterprise-gdbawwsp_un.dig.Parcel
Boundaryenterprise-gdbawwsp_un.dig.Boundary
World Topographic Mapservicehttps://<external-service>
World Hillshadeservicehttps://<external-service>/World_Hillshade

Geodatabase schema

Geodatabase structure from the XML schema export, and how each table links to services, code, and maps.

Updated 2026-09-29.

Geoproccess/AWWSP Dev/Awwsp UN_ExportXMLWorkspaceD.xml

Version sde.DEFAULT · database awwsp_un · owner dig

Feature datasets

Feature datasetContents
UtilityNetworkStructureJunction, SewerLine, ServiceTerritory, StructureLine, StructureBoundary, SewerJunction, SewerDevice, SewerSubnetLine, UtilityNetwork, SewerAssembly
ProjectDataBoundary, Edus, Route, Parcel

Tables and feature classes

NameKindFeature datasetGeometryFieldsSubtypesVersionedService layerCode variableScripts using itPro maps
SewerEdgeObjectTable——11ASSETGROUP: 0=Unknownyes———Utility Network, Utility Network - Web Map
StructureJunctionObjectTable——10ASSETGROUP: 0=Unknownyes———Utility Network, Utility Network - Web Map
StructureJunctionFeature classUtilityNetworkPoint11ASSETGROUP: 0=Unknownyes———Utility Network, Utility Network - Web Map
SewerLineFeature classUtilityNetworkPolyline17ASSETGROUP: 0=Unknown, 1=Gravity Main, 2=Force Main, 3=LateralyesAWWSP_UN/Utility_Network/5sewer_line_urlCalculate_connections, Calculate_edus, Calculate_estimate_inputs, Calculate_initial_network, Clone_workflow, Export_to_shapefile, Prepare_manual_auxiliary_lines, Reset_network, Second_1, Second_1_on_edus, Second_1_priori, Second_2, Second_main_line, Update_network, connection_functions, connection_functions_assoc, network_cleanupUtility Network, Utility Network - Web Map
ServiceTerritoryFeature classUtilityNetworkPolygon9—yes————
StructureLineFeature classUtilityNetworkPolyline13ASSETGROUP: 0=Unknownyes———Utility Network, Utility Network - Web Map
StructureBoundaryFeature classUtilityNetworkPolygon13ASSETGROUP: 0=Unknownyes———Utility Network, Utility Network - Web Map
SewerJunctionFeature classUtilityNetworkPoint12ASSETGROUP: 0=Unknown, 1=FittingyesAWWSP_UN/Utility_Network/4sewer_junction_urlCalculate_edus, Calculate_estimate_inputs, Calculate_initial_network, Clone_workflow, Reset_network, Second_1_on_edus, Second_1_priori, Update_network, connection_functions, connection_functions_assoc, network_cleanupUtility Network, Utility Network - Web Map
SewerDeviceFeature classUtilityNetworkPoint19ASSETGROUP: 0=Unknown, 1=Treatment, 2=Service ConnectionyesAWWSP_UN/Utility_Network/2sewer_device_urlCalculate_edus, Calculate_estimate_inputs, Calculate_initial_network, Clone_workflow, Create_workflow, Export_to_shapefile, Prepare_manual_auxiliary_lines, Reset_network, Second_1, Second_1_on_edus, Second_1_priori, Second_main_line, Update_network, connection_functions, connection_functions_assoc, network_cleanupUtility Network, Utility Network - Web Map
SewerSubnetLineFeature classUtilityNetworkPolyline14TIERNAME: 0=Unknownyes———Utility Network, Utility Network - Web Map
SewerAssemblyFeature classUtilityNetworkPoint10ASSETGROUP: 0=Unknownyes———Utility Network, Utility Network - Web Map
WorkflowUserTable——9—yes———Utility Network - Auxiliar, Utility Network - Web Map
StructureEdgeObjectTable——11ASSETGROUP: 0=Unknownyes———Utility Network, Utility Network - Web Map
PackageTable——12—yes———Roads, Utility Network - Auxiliar, Utility Network - Web Map
BoundaryFeature classProjectDataPolygon12—yesAWWSP_UN/Utility_Network___Auxiliar/5perimeter_urlCalculate_edus, Calculate_initial_network, Clone_workflow, Copy_to_local, Create_workflow, Export_to_shapefile, Reset_network, Update_networkCreate Workflow, Utility Network - Auxiliar, Utility Network - Web Map
EdusFeature classProjectDataPoint18—yesAWWSP_UN/Utility_Network___Auxiliar/0edu_points_urlCalculate_connections, Calculate_edus, Clone_workflow, Export_to_shapefile, Reset_network, Second_2, Second_main_line, Update_networkUtility Network - Auxiliar, Utility Network - Web Map
RouteFeature classProjectDataPolyline11—yes———Utility Network - Auxiliar, Utility Network - Web Map
ParcelFeature classProjectDataPolygon18—yesAWWSP_UN/Utility_Network___Auxiliar/4parcels_project_urlCalculate_edus, Calculate_estimate_inputs, Calculate_initial_network, Clone_workflow, Export_to_shapefile, Reset_network, Second_1_on_edus, Second_1_priori, Update_network, connection_functions, connection_functions_assocUtility Network - Auxiliar, Utility Network - Web Map
LineCostsTable——35—yesAWWSP_UN/Utility_Network___Auxiliar/13line_costs_urlClone_workflowUtility Network - Auxiliar, Utility Network - Web Map
ConstructionParametersTable——12—yesAWWSP_UN/Utility_Network___Auxiliar/12construction_parameters_urlClone_workflowUtility Network - Auxiliar, Utility Network - Web Map
Workflow__ATTACHTable——11—yes————
SewerJunctionObjectTable——15ASSETGROUP: 0=Unknownyes———Utility Network, Utility Network - Web Map
WorkflowTable——21—yesAWWSP_UN/Utility_Network___Auxiliar/6workflows_urlCalculate_connections, Calculate_edus, Calculate_initial_network, Clone_workflow, Copy_to_local, Create_workflow, Export_to_shapefile, Reset_network, Update_networkUtility Network - Auxiliar, Utility Network - Web Map
UN_41_TraceConfigurationsTable——12—no————
UN_41_TemplatesTable——7—no————
UN_41_RulesTable——16—yes————

Relationships

NameOriginDestinationCardinalityCompositeAttachments
Workflow__ATTACHRELWorkflowWorkflow__ATTACHOneToManyyesyes

Utility Network UtilityNetwork

Created with ArcGIS Pro 3.4.3 · schema generation 7 · branch versioned: yes · service territory ServiceTerritory

Domain networkTierClassUsageAsset groups (asset types)
StructureesriTDNoneStructureJunctionStructureJunctionUnknown (Unknown)
StructureesriTDNoneStructureBoundaryStructureBoundaryUnknown (Unknown)
StructureesriTDNoneStructureJunctionObjectStructureJunctionObjectUnknown (Unknown)
StructureesriTDNoneStructureLineStructureLineUnknown (Unknown)
StructureesriTDNoneStructureEdgeObjectStructureEdgeObjectUnknown (Unknown)
SeweresriTDHierarchicalSewerDeviceDeviceUnknown (Unknown); Treatment (Treatment Collection Point); Service Connection (Commercial Service Connection, Industrial Service Connection, Residential Service Connection)
SeweresriTDHierarchicalSewerAssemblyAssemblyUnknown (Unknown)
SeweresriTDHierarchicalSewerJunctionJunctionUnknown (Unknown); Fitting (Tee, Cross)
SeweresriTDHierarchicalSewerJunctionObjectJunctionObjectUnknown (Unknown)
SeweresriTDHierarchicalSewerLineLineUnknown (Unknown); Gravity Main (Sanitary Collector, Hidden Collector - Used as Force main); Force Main (Sanitary Force Main); Lateral (Sanitary Lateral)
SeweresriTDHierarchicalSewerSubnetLineSubnetLineUnknown ()
SeweresriTDHierarchicalSewerEdgeObjectEdgeObjectUnknown (Unknown)

Network attributes: Source ID, Terminal ID, Asset group, Asset type, Is subnetwork controller, Tier name, Shape length, Position from, Position to, Flow direction

Terminal configurations: Single terminal

Domains

DomainTypeValuesUsed in
Asset_Type_Sewer_Device_Service_ConnectionSmallInteger1=Commercial Service Connection, 2=Industrial Service Connection, 3=Residential Service ConnectionSewerDevice.assettype [Service Connection]
ErrorTypeString2=Through, 1=Edits, 3=IntentionalParcel.error
UtilityNetwork_6_FlowDirectionSmallInteger1=With digitized, 2=Against digitized, 3=IndeterminateSewerEdgeObject.flowdirection, SewerEdgeObject.flowdirection [Unknown], SewerLine.flowdirection, SewerLine.flowdirection [Force Main], SewerLine.flowdirection [Gravity Main], SewerLine.flowdirection [Lateral], SewerLine.flowdirection [Unknown], StructureEdgeObject.flowdirection, …
UtilityNetwork_41_UnknownAssetTypeSmallInteger0=UnknownSewerAssembly.assettype [Unknown], SewerDevice.assettype [Unknown], SewerEdgeObject.assettype [Unknown], SewerJunction.assettype [Unknown], SewerJunctionObject.assettype [Unknown], SewerLine.assettype [Unknown], StructureBoundary.assettype [Unknown], StructureEdgeObject.assettype [Unknown], …
UtilityNetwork_41_IsConnectedSmallInteger0=False, 1=True, 2=UnknownSewerDevice.isconnected, SewerDevice.isconnected [Service Connection], SewerDevice.isconnected [Treatment], SewerDevice.isconnected [Unknown], SewerEdgeObject.isconnected, SewerEdgeObject.isconnected [Unknown], SewerJunction.isconnected, SewerJunction.isconnected [Fitting], …
Asset_Type_Sewer_Junction_FittingSmallInteger1=Tee, 2=CrossSewerJunction.assettype [Fitting]
UtilityNetwork_41_IsSubnetworkControllerSmallInteger0=False, 1=TrueSewerDevice.issubnetworkcontroller, SewerDevice.issubnetworkcontroller [Service Connection], SewerDevice.issubnetworkcontroller [Treatment], SewerDevice.issubnetworkcontroller [Unknown], SewerJunctionObject.issubnetworkcontroller, SewerJunctionObject.issubnetworkcontroller [Unknown]
Asset_Type_Sewer_Device_TreatmentSmallInteger1=Treatment Collection PointSewerDevice.assettype [Treatment]
Asset_Type_Sewer_Line_Gravity_MainSmallInteger1=Sanitary Collector, 2=Hidden Collector - Used as Force mainSewerLine.assettype [Gravity Main]
YesNoSmallInteger0=No, 1=YesPackage.active, Parcel.is_excluded, Workflow.calculated_connections
Asset_Type_Sewer_Line_Force_MainSmallInteger1=Sanitary Force MainSewerLine.assettype [Force Main]
UtilityNetwork_41_TerminalNamesSmallInteger0=None, 1=Single TerminalSewerLine.fromdeviceterminal, SewerLine.fromdeviceterminal [Force Main], SewerLine.fromdeviceterminal [Gravity Main], SewerLine.fromdeviceterminal [Lateral], SewerLine.fromdeviceterminal [Unknown], SewerLine.todeviceterminal, SewerLine.todeviceterminal [Force Main], SewerLine.todeviceterminal [Gravity Main], …
UtilityNetwork_41_TierNameSmallInteger0=UnknownSewerDevice.tiername, SewerDevice.tiername [Service Connection], SewerDevice.tiername [Treatment], SewerDevice.tiername [Unknown], SewerJunctionObject.tiername, SewerJunctionObject.tiername [Unknown]
Asset_Type_Sewer_Line_LateralSmallInteger1=Sanitary LateralSewerLine.assettype [Lateral]
UtilityNetwork_41_IsContentVisibleSmallInteger0=False, 1=True—
UtilityNetwork_41_AssociationStatusSmallInteger0=None, 1=Container, 2=Structure, 4=Content, 5=Content and Container, 6=Content and Structure, 8=Attachment, 9=Attachment and Container, 10=Attachment and Structure, 12=Attachment and Content, 13=Attachment and Content and Container, 14=Attachment and Content and Structure, 16=Visible Content, 17=ViSewerAssembly.associationstatus, SewerAssembly.associationstatus [Unknown], SewerDevice.associationstatus, SewerDevice.associationstatus [Service Connection], SewerDevice.associationstatus [Treatment], SewerDevice.associationstatus [Unknown], SewerEdgeObject.associationstatus, SewerEdgeObject.associationstatus [Unknown], …
UtilityNetwork_41_FeatureSourceIDSmallInteger0=Unknown, 1=Association, 2=System Junction, 3=System Junction Object, 4=Structure Junction, 5=Structure Line, 6=Structure Boundary, 7=Structure Junction Object, 8=Structure Edge Object, 9=Sewer Device, 10=Sewer Line, 11=Sewer Assembly, 12=Sewer Junction, 13=Sewer Subnet Line, 14=Sewer Junction Obje—
UtilityNetwork_41_IsDeletedSmallInteger0=False, 1=True—
UtilityNetwork_41_TierTopologyTypeSmallInteger1=Radial, 2=Mesh—
UtilityNetwork_41_IsDirtySmallInteger0=Clean, 1=Dirty, 2=InvalidSewerSubnetLine.isdirty, SewerSubnetLine.isdirty [Unknown]
SewerEdgeObject — fields
FieldTypeAliasDomainNullableLength
objectidOIDObject ID—no8
assetgroupIntegerAsset group—no4
assettypeSmallIntegerAsset type—no2
associationstatusSmallIntegerAssociation statusUtilityNetwork_41_AssociationStatusno2
isconnectedSmallIntegerIs connectedUtilityNetwork_41_IsConnectedno2
flowdirectionSmallIntegerFlow directionUtilityNetwork_6_FlowDirectionyes2
globalidGlobalIDGlobal ID—no38
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
StructureJunctionObject — fields
FieldTypeAliasDomainNullableLength
objectidOIDObject ID—no8
assetgroupIntegerAsset group—no4
assettypeSmallIntegerAsset type—no2
associationstatusSmallIntegerAssociation statusUtilityNetwork_41_AssociationStatusno2
subnetworknameStringSupported subnetwork name—no2000
globalidGlobalIDGlobal ID—no38
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
StructureJunction — fields
FieldTypeAliasDomainNullableLength
objectidOIDObject ID—no8
assetgroupIntegerAsset group—no4
assettypeSmallIntegerAsset type—no2
associationstatusSmallIntegerAssociation statusUtilityNetwork_41_AssociationStatusno2
subnetworknameStringSupported subnetwork name—no2000
globalidGlobalIDGlobal ID—no38
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
shapeGeometryShape—no8
SewerLine — fields
FieldTypeAliasDomainNullableLength
objectidOIDObject ID—no8
assetgroupIntegerAsset group—no4
assettypeSmallIntegerAsset type—no2
associationstatusSmallIntegerAssociation statusUtilityNetwork_41_AssociationStatusno2
isconnectedSmallIntegerIs connectedUtilityNetwork_41_IsConnectedno2
fromdeviceterminalSmallIntegerFrom device terminalUtilityNetwork_41_TerminalNamesno2
todeviceterminalSmallIntegerTo device terminalUtilityNetwork_41_TerminalNamesno2
flowdirectionSmallIntegerFlow directionUtilityNetwork_6_FlowDirectionyes2
globalidGlobalIDGlobal ID—no38
workflowidGUIDworkflowid—no38
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
shapeGeometryShape—no8
fclassStringfclass—yes80
st_length(shape)Doublest_length(shape)—yes—
ServiceTerritory — fields
FieldTypeAliasDomainNullableLength
objectidOIDOBJECTID—no8
globalidGlobalIDglobalid—no38
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
shapeGeometrySHAPE—yes8
st_area(shape)Doublest_area(shape)—yes—
st_length(shape)Doublest_length(shape)—yes—
StructureLine — fields
FieldTypeAliasDomainNullableLength
objectidOIDObject ID—no8
assetgroupIntegerAsset group—no4
assettypeSmallIntegerAsset type—no2
associationstatusSmallIntegerAssociation statusUtilityNetwork_41_AssociationStatusno2
subnetworknameStringSupported subnetwork name—no2000
flowdirectionSmallIntegerFlow directionUtilityNetwork_6_FlowDirectionyes2
globalidGlobalIDGlobal ID—no38
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
shapeGeometryShape—no8
st_length(shape)Doublest_length(shape)—yes—
StructureBoundary — fields
FieldTypeAliasDomainNullableLength
objectidOIDObject ID—no8
assetgroupIntegerAsset group—no4
assettypeSmallIntegerAsset type—no2
associationstatusSmallIntegerAssociation statusUtilityNetwork_41_AssociationStatusno2
subnetworknameStringSupported subnetwork name—no2000
globalidGlobalIDGlobal ID—no38
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
shapeGeometryShape—no8
st_area(shape)Doublest_area(shape)—yes—
st_length(shape)Doublest_length(shape)—yes—
SewerJunction — fields
FieldTypeAliasDomainNullableLength
objectidOIDObject ID—no8
assetgroupIntegerAsset group—no4
assettypeSmallIntegerAsset type—no2
associationstatusSmallIntegerAssociation statusUtilityNetwork_41_AssociationStatusno2
isconnectedSmallIntegerIs connectedUtilityNetwork_41_IsConnectedno2
globalidGlobalIDGlobal ID—no38
workflowidGUIDworkflowid—no38
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
shapeGeometryShape—no8
SewerDevice — fields
FieldTypeAliasDomainNullableLength
objectidOIDObject ID—no8
assetgroupIntegerAsset group—no4
assettypeSmallIntegerAsset type—no2
associationstatusSmallIntegerAssociation statusUtilityNetwork_41_AssociationStatusno2
issubnetworkcontrollerSmallIntegerIs subnetwork controllerUtilityNetwork_41_IsSubnetworkControllerno2
isconnectedSmallIntegerIs connectedUtilityNetwork_41_IsConnectedno2
subnetworkcontrollernameStringSubnetwork controller name—no2000
tiernameSmallIntegerTier nameUtilityNetwork_41_TierNameno2
tierrankIntegerTier rank—no4
terminalconfigurationStringTerminal path—no128
globalidGlobalIDGlobal ID—no38
workflowidGUIDworkflowid—no38
errorSmallIntegererror—yes2
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
shapeGeometryShape—no8
connection_idGUIDConnection ID—yes38
SewerSubnetLine — fields
FieldTypeAliasDomainNullableLength
objectidOIDObject ID—no8
subnetworknameStringSubnetwork name—no64
isdirtySmallIntegerStatusUtilityNetwork_41_IsDirtyno2
tiernameSmallIntegerTier name—no2
subnetworkcontrollernamesStringSubnetwork controller names—no1073741822
lastupdatesubnetworkDateLast update subnetwork—yes8
lastackexportsubnetworkDateLast ack export subnetwork—yes8
globalidGlobalIDGlobal ID—no38
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
shapeGeometryShape—no8
st_length(shape)Doublest_length(shape)—yes—
SewerAssembly — fields
FieldTypeAliasDomainNullableLength
objectidOIDObject ID—no8
assetgroupIntegerAsset group—no4
assettypeSmallIntegerAsset type—no2
associationstatusSmallIntegerAssociation statusUtilityNetwork_41_AssociationStatusno2
globalidGlobalIDGlobal ID—no38
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
shapeGeometryShape—no8
WorkflowUser — fields
FieldTypeAliasDomainNullableLength
objectidOIDOBJECTID—no4
first_nameStringname—yes255
portal_user_nameStringportal_user_name—yes255
last_nameStringlast_name—yes255
globalidGlobalIDglobalid—no38
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
StructureEdgeObject — fields
FieldTypeAliasDomainNullableLength
objectidOIDObject ID—no8
assetgroupIntegerAsset group—no4
assettypeSmallIntegerAsset type—no2
associationstatusSmallIntegerAssociation statusUtilityNetwork_41_AssociationStatusno2
subnetworknameStringSupported subnetwork name—no2000
flowdirectionSmallIntegerFlow directionUtilityNetwork_6_FlowDirectionyes2
globalidGlobalIDGlobal ID—no38
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
Package — fields
FieldTypeAliasDomainNullableLength
objectidOIDOBJECTID—no4
nameStringName—yes255
typeStringType—yes255
descriptionStringDescription—yes255
costIntegerCost—yes4
activeSmallIntegerActiveYesNoyes2
globalidGlobalIDglobalid—no38
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
success_typeSmallIntegerSuccess Type—yes2
Boundary — fields
FieldTypeAliasDomainNullableLength
objectidOIDobjectid—no4
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
idGUIDID—yes38
statusStringStatus—yes255
stepSmallIntegerStep—yes2
globalidGlobalIDglobalid—no38
shapeGeometryshape—yes8
st_area(shape)Doublest_area(shape)—yes—
st_length(shape)Doublest_length(shape)—yes—
Edus — fields
FieldTypeAliasDomainNullableLength
objectidOIDobjectid—no4
is_sublineSmallIntegerIs subline—yes2
accum_lengthDoubleAcummulate Length—yes8
line_lengthDoubleLine Length—yes8
levelSmallIntegerlevel—yes2
line_guidGUIDline_guid—yes38
point_guidGUIDpoint_guid—yes38
parent_pointGUIDparent_point—yes38
zDoubleZ—yes8
edusIntegeredus—yes4
acumm_edusIntegeracumm_edus—yes4
workflowidGUIDWorkflow Id—yes38
globalidGlobalIDglobalid—no38
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
shapeGeometryshape—yes8
Route — fields
FieldTypeAliasDomainNullableLength
objectidOIDobjectid—no4
facilityidIntegerFacilityID—yes4
total_lengthDoubleTotal_Length—yes8
workflowidGUIDworkflowid—yes38
globalidGlobalIDglobalid—no38
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
shapeGeometryshape—yes8
st_length(shape)Doublest_length(shape)—yes—
Parcel — fields
FieldTypeAliasDomainNullableLength
objectidOIDobjectid—no4
eduIntegerEDU—yes4
workflowidGUIDWorkflow ID—yes38
errorStringErrorErrorTypeyes255
landusedesStringLand usedes—yes255
globalidGlobalIDglobalid—no38
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
shapeGeometryshape—yes8
parcel_apnStringParcel APN—yes255
is_excludedSmallIntegerExcluded parcelYesNoyes2
service_connection_idGUIDservice_connection_id—yes38
area_mDoubleArea (in meters)—yes8
area_acresDoubleArea (in acres)—yes8
st_area(shape)Doublest_area(shape)—yes—
st_length(shape)Doublest_length(shape)—yes—
LineCosts — fields
FieldTypeAliasDomainNullableLength
objectidOIDobjectid—no4
nominal_diaDoubleNominal Diameter—yes8
hdpe_ips_dr9DoubleHDPE IPS DR9—yes8
hdpe_ips_dr11DoubleHDPE IPS DR11—yes8
hdpe_dips_dr11DoubleHDPE DIPS DR11—yes8
hdpe_ips_dr135DoubleHDPE IPS DR13.5—yes8
pvc_sdr21DoublePVC SDR21—yes8
pvc_sdr26DoublePVC SDR26—yes8
pvc_sdr25DoublePVC SDR25—yes8
pvc_sch40DoublePVC Sch40—yes8
min_exDoubleMin Ex—yes8
pipe_beddingDoublePipe Bedding—yes8
ac_class_aDoubleAC Class A—yes8
three_quarter_class_aDouble3/4" Class A—yes8
three_quarter_class_bDouble3/4" Class B—yes8
select_native_class_bDoubleSelect/Native Class B—yes8
native_select_class_cDoubleNative/Select Class C—yes8
trench_class_a_mid_rangeDoubleTrench Class A Mid Range—yes8
trench_class_b_mid_rangeDoubleTrench Class B Mid Range—yes8
trench_class_c_mid_rangeDoubleTrench Class C Mid Range—yes8
class_a_pvc_sdr21DoubleClass A - PVC SDR21—yes8
class_a_pvc_sdr26DoubleClass A - PVC SDR26—yes8
class_a_hdpe_dips_dr11DoubleClass A - HDPE DIPS DR11—yes8
class_b_pvc_sdr26DoubleClass B - PVC SDR26—yes8
class_b_hdpe_dips_dr11DoubleClass B - HDPE DIPS DR11—yes8
class_c_pvc_sdr21_26DoubleClass C - PVC SDR21/26—yes8
class_c_hdpe_dips_dr11DoubleClass C - HDPE DIPS DR11—yes8
dr11_general_assumedDoubleDR11 General Assumed—yes8
workflowidGUIDWorkflow ID—yes38
idIntegerId—yes4
globalidGlobalIDglobalid—no38
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
ConstructionParameters — fields
FieldTypeAliasDomainNullableLength
objectidOIDobjectid—no4
labelStringParameter—yes255
valueDoubleValue—yes8
unitStringUnit—yes50
descriptionStringDescription—yes255
workflowidGUIDWorkflow ID—yes38
idStringID—yes255
globalidGlobalIDglobalid—no38
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
Workflow__ATTACH — fields
FieldTypeAliasDomainNullableLength
attachmentidOIDattachmentid—no4
rel_globalidGUIDrel_globalid—no38
content_typeStringcontent_type—no150
att_nameStringatt_name—no250
data_sizeIntegerdata_size—no4
dataBlobdata—yes—
globalidGlobalIDglobalid—no38
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
SewerJunctionObject — fields
FieldTypeAliasDomainNullableLength
objectidOIDObject ID—no8
assetgroupIntegerAsset group—no4
assettypeSmallIntegerAsset type—no2
associationstatusSmallIntegerAssociation statusUtilityNetwork_41_AssociationStatusno2
issubnetworkcontrollerSmallIntegerIs subnetwork controllerUtilityNetwork_41_IsSubnetworkControllerno2
isconnectedSmallIntegerIs connectedUtilityNetwork_41_IsConnectedno2
subnetworkcontrollernameStringSubnetwork controller name—no2000
tiernameSmallIntegerTier nameUtilityNetwork_41_TierNameno2
tierrankIntegerTier rank—no4
terminalconfigurationStringTerminal path—no128
globalidGlobalIDGlobal ID—no38
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
Workflow — fields
FieldTypeAliasDomainNullableLength
objectidOIDOBJECTID—no4
globalidGlobalIDglobalid—no38
project_nameStringProject name—yes255
stepSmallIntegerStep—yes2
statusStringStatus—yes255
perimeteridGUIDBoundary—yes38
created_userStringcreated_user—yes255
created_dateDatecreated_date—yes8
last_edited_userStringlast_edited_user—yes255
last_edited_dateDatelast_edited_date—yes8
phone_numberStringPhone number—yes255
inputvarsStringInput vars—yes1500
emailStringEmail—yes255
descriptionStringDescription—yes1000
client_nameStringClient name—yes255
companyStringcompany—yes255
calculated_connectionsSmallIntegerCalculated connectionsYesNoyes2
assigned_userIntegerAssigned user—yes4
client_first_nameStringClient first name—yes255
client_last_nameStringClient last name—yes255
package_idGUIDPackage ID—yes38

Web application to geoprocessing links

Each row is the full chain: widget and config key → GP service → published toolbox tool → Python script.

Updated 2026-09-29.

App 1

PageWidgetConfig keyGP service / taskToolboxToolScript
Workflow managerWorkflow Projectcalculate_connections.toolUrlAWWSP_UN/CalculateConnections/Calculate_connectionsGeoproccess/AWWSP Dev/Steps UN.atbxCalculateConnectionsGeoproccess/Scripts Utiliy Network/Calculate_connections.py
Workflow managerData StatisticsstatisticsTool.toolUrlAWWSP_UN/CalculateEstimateInputs/Calculate_estimate_inputsGeoproccess/AWWSP Dev/Steps UN.atbxCalculateEstimateInputsGeoproccess/Scripts Utiliy Network/Calculate_estimate_inputs.py
Create workflowCreate workflowcalculateInitialNetworkTool.toolUrlAWWSP_UN/CalculateInitialNetwork/Calculate_initial_networkGeoproccess/AWWSP Dev/Steps UN.atbxCalculateInitialNetworkGeoproccess/Scripts Utiliy Network/Calculate_initial_network.py
Workflow managerWorkflow Projectcalculate_initial_network.toolUrl (unused in code)AWWSP_UN/CalculateInitialNetwork/Calculate_initial_networkGeoproccess/AWWSP Dev/Steps UN.atbxCalculateInitialNetworkGeoproccess/Scripts Utiliy Network/Calculate_initial_network.py
—Create workflow (SMALL)calculateInitialNetworkTool.toolUrlAWWSP_UN/CalculateInitialNetwork/Calculate_initial_networkGeoproccess/AWWSP Dev/Steps UN.atbxCalculateInitialNetworkGeoproccess/Scripts Utiliy Network/Calculate_initial_network.py
Create workflowCreate workflow (floating)calculateInitialNetworkTool.toolUrlAWWSP_UN/CalculateInitialNetwork/Calculate_initial_networkGeoproccess/AWWSP Dev/Steps UN.atbxCalculateInitialNetworkGeoproccess/Scripts Utiliy Network/Calculate_initial_network.py
Workflow managerWorkflow Projectcalculate_edus.toolUrlAWWSP_UN/CalulateEdus/Calculate_edusGeoproccess/AWWSP Dev/Steps UN.atbxCalulateEdusGeoproccess/Scripts Utiliy Network/Calculate_edus.py
Workflow managerClone WorkflowgeoProcessingUrl (unused in code)AWWSP_UN/CloneWorkflow/Clone_workflowGeoproccess/AWWSP Dev/Steps UN.atbxCloneWorkflowGeoproccess/Scripts Utiliy Network/Clone_workflow.py
Workflow managerClone WorkflowcloneWorkflowTool.toolUrlAWWSP_UN/CloneWorkflow/Clone_workflowGeoproccess/AWWSP Dev/Steps UN.atbxCloneWorkflowGeoproccess/Scripts Utiliy Network/Clone_workflow.py
Create workflowCreate workflowcreateWorkflowTool.toolUrlAWWSP_UN/CreateWorkflow/Create_WorkflowGeoproccess/AWWSP Dev/Steps UN.atbxCreateWorkflowGeoproccess/Scripts Utiliy Network/Create_workflow.py
—Create workflow (SMALL)createWorkflowTool.toolUrlAWWSP_UN/CreateWorkflow/Create_WorkflowGeoproccess/AWWSP Dev/Steps UN.atbxCreateWorkflowGeoproccess/Scripts Utiliy Network/Create_workflow.py
Create workflowCreate workflow (floating)createWorkflowTool.toolUrlAWWSP_UN/CreateWorkflow/Create_WorkflowGeoproccess/AWWSP Dev/Steps UN.atbxCreateWorkflowGeoproccess/Scripts Utiliy Network/Create_workflow.py
List projectsList projectsdeleteProjectsTool.toolUrlAWWSP_UN/DeleteMultipleProject/Delete_multiple_projectsGeoproccess/AWWSP Dev/Steps UN.atbxDeleteMultipleProjectGeoproccess/Scripts Utiliy Network/Delete_multiple_projects.py
Workflow managerWorkflow Projectexport_shapefiles.toolUrlAWWSP_UN/ExportToShapefile/Export_to_shapefileGeoproccess/AWWSP Dev/Steps UN.atbxExportToShapefileGeoproccess/Scripts Utiliy Network/Export_to_shapefile.py
Workflow managerWorkflow Projectfirst.toolUrlAWWSP_UN/First/First———
Workflow managerWorkflow Projectprepare_manual_auxiliary_lines.toolUrlAWWSP_UN/PrepareManualAuxiliaryLines/Prepare_manual_auxiliary_linesGeoproccess/AWWSP Dev/Steps UN.atbxPrepareManualAuxiliaryLinesGeoproccess/Scripts Utiliy Network/Prepare_manual_auxiliary_lines.py
Workflow managerWorkflow Projectreset_main_line.toolUrlAWWSP_UN/ResetMainLine/Reset_main_line———
Workflow managerWorkflow Projectreset_network.toolUrlAWWSP_UN/ResetNetwork/Reset_networkGeoproccess/AWWSP Dev/Steps UN.atbxResetNetworkGeoproccess/Scripts Utiliy Network/Reset_network.py
Workflow managerWorkflow Projectsecond_1.toolUrl (unused in code)AWWSP_UN/Second1/Second_1Geoproccess/AWWSP Dev/Steps UN.atbxSecond1Geoproccess/Scripts Utiliy Network/Second_1.py
Workflow managerWorkflow Projectget_candidates_main_line.toolUrlAWWSP_UN/Second1/Second_1Geoproccess/AWWSP Dev/Steps UN.atbxSecond1Geoproccess/Scripts Utiliy Network/Second_1.py
Workflow managerWorkflow Projectsecond_2.toolUrl (unused in code)AWWSP_UN/Second2/Second_2Geoproccess/AWWSP Dev/Steps UN.atbxSecond2Geoproccess/Scripts Utiliy Network/Second_2.py
Workflow managerWorkflow Projectadd_main_line.toolUrlAWWSP_UN/Second2/Second_2Geoproccess/AWWSP Dev/Steps UN.atbxSecond2Geoproccess/Scripts Utiliy Network/Second_2.py
Workflow managerWorkflow Projectsecond_main_line.toolUrl (unused in code)AWWSP_UN/SecondMainLine/Second_main_lineGeoproccess/AWWSP Dev/Steps UN.atbxSecondMainLineGeoproccess/Scripts Utiliy Network/Second_main_line.py
Workflow managerWorkflow Projectadd_manual_main_line.toolUrlAWWSP_UN/SecondMainLine/Second_main_lineGeoproccess/AWWSP Dev/Steps UN.atbxSecondMainLineGeoproccess/Scripts Utiliy Network/Second_main_line.py
Workflow managerWorkflow Projectthird.toolUrl (unused in code)AWWSP_UN/Third/Third———
Workflow managerWorkflow ProjectmessageAction[network].perimeter.geoprocessTool.utilityAWWSP_UN/UpdateNetwork/Update_networkGeoproccess/AWWSP Dev/Steps UN.atbxUpdateNetworkGeoproccess/Scripts Utiliy Network/Update_network.py

Tool copies in other toolboxes

No items.

Geoprocessing scripts

Scripts under Geoproccess/Scripts Utiliy Network: parameters read and returned, and dependencies.

Updated 2026-09-29.

Geoprocessing entry scripts

ScriptDescriptionInputs (index:variable)Outputs (index)Internal modulesMain arcpy usage
Calculate_connections—0:workflowid, 1:sde_version—UtilsUN.connection_functions, UtilsUN.dev_reload, UtilsUN.elements_rest, UtilsUN.functions, UtilsUN.manager, UtilsUN.varsarcpy.AddMessage, arcpy.GetInstallInfo, arcpy.management.GetCount, arcpy.da.SearchCursor
Calculate_edus—0:workflowid—UtilsUN.dev_reload, UtilsUN.functions, UtilsUN.manager, UtilsUN.vars, UtilsUN, UtilsUNarcpy.da.SearchCursor, arcpy.management.MakeFeatureLayer, arcpy.AddWarning, arcpy.PointGeometry, arcpy.da.UpdateCursor
Calculate_estimate_inputsCalculate_estimate_inputs.py — read-only GP that returns Estimate workbook metrics.0:?, 1:?, 2:?NoneEstimates, UtilsUN.dev_reload, UtilsUN.elevation_raster, UtilsUN.functions, UtilsUN.manager, UtilsUN.varsarcpy.AddMessage, arcpy.AddWarning, arcpy.GetInstallInfo, arcpy.PointGeometry, arcpy.Exists
Calculate_initial_network—0:workflowid, 1:sde_version—UtilsUN.dev_reload, UtilsUN.functions, UtilsUN.manager, UtilsUN.parcel_functions, UtilsUN.varsarcpy.da.SearchCursor, arcpy.Point, arcpy.AddMessage, arcpy.SpatialReference, arcpy.server.ExportWebMap
Clone_workflow—0:workflowid, 1:projectName, 2:projectDescription3UtilsUN.dev_reload, UtilsUN.functions, UtilsUN.manager, UtilsUN.varsarcpy.AddMessage, arcpy.GetInstallInfo
Copy_to_local—0:workflowid—UtilsUN.connection_functions, UtilsUN.dev_reload, UtilsUN.elements_rest, UtilsUN.manager, UtilsUN.varsarcpy.AddMessage, arcpy.GetInstallInfo
Create_workflow—0:input_boundary, 1:input_collection_point, 2:project_name, 3:project_description, 4:package_id, 5:company, 6:client_first_name, 7:client_last_name, 8:email, 9:phone_number10UtilsUN.dev_reload, UtilsUN.functions, UtilsUN.manager, UtilsUN.vars, UtilsUNarcpy.AddMessage, arcpy.GetInstallInfo
Delete_multiple_projects—0:workflows_ids—UtilsUN.dev_reload, UtilsUN.functions, UtilsUN.manager, UtilsUNarcpy.AddMessage, arcpy.GetInstallInfo
Export_to_shapefile—0:workflowid1UtilsUN.dev_reload, UtilsUN.functions, UtilsUN.manager, UtilsUN.varsarcpy.AddMessage, arcpy.conversion.FeatureClassToShapefile, arcpy.Exists, arcpy.conversion.TableToDBASE, arcpy.GetInstallInfo
Prepare_manual_auxiliary_linesPrepare_manual_auxiliary_lines.py — prepare hand-drawn auxiliary lines for routing.0:value, 0:value1UtilsUN.dev_reload, UtilsUN.functions, UtilsUN.manager, UtilsUN.varsarcpy.AddMessage, arcpy.management.GetCount, arcpy.GetInstallInfo
Reset_main_lineReset_main_line.py — restore streets hidden during main-line calculation.0:workflowid—UtilsUN.dev_reload, UtilsUN.functions, UtilsUN.manager, UtilsUN.network_cleanuparcpy.AddMessage, arcpy.GetInstallInfo
Reset_network—0:workflowid, 1:sde_version—UtilsUN.dev_reload, UtilsUN.functions, UtilsUN.manager, UtilsUN.parcel_functions, UtilsUN.varsarcpy.Point, arcpy.AddMessage, arcpy.analysis.Near, arcpy.GetInstallInfo, arcpy.da.SearchCursor
Second_1Name: Find longest routes candidates0:workflowid, 1:n_rutas2UtilsUN.dev_reload, UtilsUN.functions, UtilsUN.manager, UtilsUN.varsarcpy.AddMessage, arcpy.management.GetCount, arcpy.Point, arcpy.da.SearchCursor, arcpy.management.Delete
Second_1_on_edusName: Find EDU-weighted route candidates0:workflowid, 1:n_rutas2UtilsUN.dev_reload, UtilsUN.functions, UtilsUN.manager, UtilsUN.varsarcpy.management.AddField, arcpy.AddMessage, arcpy.AddWarning, arcpy.management.Delete, arcpy.da.SearchCursor
Second_1_prioriName: Find EDU-weighted route candidates (road-class priority)0:workflowid, 1:n_rutas2UtilsUN.dev_reload, UtilsUN.functions, UtilsUN.manager, UtilsUN.varsarcpy.management.AddField, arcpy.AddWarning, arcpy.AddMessage, arcpy.management.Delete, arcpy.da.SearchCursor
Second_2Name: Add main line0:workflowid, 1:polyline—UtilsUN.dev_reload, UtilsUN.elements_rest, UtilsUN.manager, UtilsUN.network_cleanup, UtilsUN.varsarcpy.AddMessage, arcpy.da.SearchCursor, arcpy.management.MakeFeatureLayer, arcpy.management.SelectLayerByLocation, arcpy.GetInstallInfo
Second_main_lineName: Add main line0:workflowid, 1:user_route_fc—UtilsUN.dev_reload, UtilsUN.elements_rest, UtilsUN.manager, UtilsUN.network_cleanup, UtilsUN.varsarcpy.AddMessage, arcpy.da.SearchCursor, arcpy.AddWarning, arcpy.ListFields, arcpy.Array
Update_network—0:workflowid, 1:distance, 2:distance_unit, 3:sde_version—UtilsUN.connection_functions, UtilsUN.dev_reload, UtilsUN.functions, UtilsUN.manager, UtilsUN.parcel_functions, UtilsUN.varsarcpy.management.GetCount, arcpy.AddMessage, arcpy.management.SelectLayerByLocation, arcpy.analysis.Clip, arcpy.GetInstallInfo

Helper modules

ModuleDescriptionFunctionsUsed by
Estimates.__init__—0—
Estimates.estimate_metricsPure metric helpers for Estimate workbook inputs.37—
Estimates.register_estimate_inputs_toolRegister CalculateEstimateInputs in AWWSP Dev/Steps UN.atbx.2—
Estimates.test_estimate_metricsSynthetic tests for Estimates.estimate_metrics (ArcPy required).5—
Params.__init__—0—
Params.params_staging—0—
UtilsUN.__init__—0—
UtilsUN.connection_functionsShared parcel connection helpers for Utility Network scripts.35Calculate_connections, Copy_to_local, Update_network
UtilsUN.connection_functions_assocShared parcel connection helpers for Utility Network scripts.23—
UtilsUN.dev_reloadDevelopment-only module reloading for ArcGIS Pro geoprocessing tools.1Calculate_connections, Calculate_edus, Calculate_estimate_inputs, Calculate_initial_network, Clone_workflow, Copy_to_local, Create_workflow, Delete_multiple_projects, Export_to_shapefile, Prepare_manual_auxiliary_lines, Reset_main_line, Reset_network, Second_1, Second_1_on_edus, Second_1_priori, Second_2, Second_main_line, Update_network
UtilsUN.elements_rest—7Calculate_connections, Copy_to_local, Second_2, Second_main_line, UtilsUN.connection_functions, UtilsUN.network_cleanup, UtilsUN.vars
UtilsUN.elevation_raster—28Calculate_estimate_inputs
UtilsUN.functions—21Calculate_connections, Calculate_edus, Calculate_estimate_inputs, Calculate_initial_network, Clone_workflow, Create_workflow, Delete_multiple_projects, Estimates.estimate_metrics, Export_to_shapefile, Prepare_manual_auxiliary_lines, Reset_main_line, Reset_network, Second_1, Second_1_on_edus, Second_1_priori, Update_network, UtilsUN.connection_functions, UtilsUN.connection_functions_assoc, UtilsUN.elevation_raster, UtilsUN.hubspot, UtilsUN.manager, UtilsUN.network_cleanup
UtilsUN.gp_errorsStructured GP tool errors for client display and support lookup.5UtilsUN.elements_rest
UtilsUN.hubspotHubSpot CRM helpers for create-workflow Step 4.10—
UtilsUN.manager—0Calculate_connections, Calculate_edus, Calculate_estimate_inputs, Calculate_initial_network, Clone_workflow, Copy_to_local, Create_workflow, Delete_multiple_projects, Export_to_shapefile, Prepare_manual_auxiliary_lines, Reset_main_line, Reset_network, Second_1, Second_1_on_edus, Second_1_priori, Second_2, Second_main_line, Update_network
UtilsUN.network_cleanupPrune redundant auxiliary segments while treating force main as immutable.80Reset_main_line, Second_2, Second_main_line
UtilsUN.parcel_functionsShared Lightbox parcel helpers for Utility Network scripts.22Calculate_initial_network, Reset_network, Update_network, UtilsUN.street_functions
UtilsUN.street_functionsShared street sync helpers for Utility Network scripts.9—
UtilsUN.vars—2Calculate_connections, Calculate_edus, Calculate_estimate_inputs, Calculate_initial_network, Clone_workflow, Copy_to_local, Create_workflow, Delete_multiple_projects, Export_to_shapefile, Prepare_manual_auxiliary_lines, Reset_network, Second_1, Second_1_on_edus, Second_1_priori, Second_2, Second_main_line, Update_network, UtilsUN.connection_functions, UtilsUN.connection_functions_assoc, UtilsUN.hubspot, UtilsUN.network_cleanup, UtilsUN.parcel_functions, UtilsUN.workflow_registration
UtilsUN.workflow_registrationShared helpers to register perimeter, workflow, and collection point for create-workflow GP tools.3—

Services and web maps

Feature services and web maps used by the application, scripts, and ArcGIS Pro projects.

Updated 2026-09-29.

Data services

ServiceKindLayersUsed by
AWWSP_UN/Utility_NetworkFeatureServer0, 2, 3, 4, 5, 6, 7, 8, 9Pro: Utility Network - Web Map, params_staging.utilityNetwork
AWWSP_UN/Utility_Network___AuxiliarFeatureServer—Pro: Utility Network - Web Map, params_staging.auxiliaryData
Canvas/World_Light_Gray_BaseMapServer—list-projects
Elevation/World_HillshadeMapServer—Pro: Create Workflow, Pro: Utility Network, Pro: Utility Network - Auxiliar, Pro: Utility Network - Web Map
World_ImageryMapServer—Pro: Roads

Web maps

AppData sourcePortal itemPortalMap widgets
1dataSource_68c5593220f234638bd9036ed9bb22a70https://<wpds-server>/portalMap Stage 1, Map Stage 1 (SMALL)
1dataSource_116228c09e2bc84a3eaf6f59ba51a582b2https://<wpds-server>/portalMap Stage 2

Toolboxes and tools

Tools in each ArcGIS Pro toolbox, their parameters, and the script each runs.

Updated 2026-09-29.

Geoproccess/AWWSP Dev/Steps UN.atbx (Steps 3.0)

ToolToolsetTitleParameters (→ output, ? optional)ScriptScript resolution
CalculateConnectionsMainCalculate connectionsworkflowId:GPString, distance:GPLong, unit:GPString, sdeVersion:GPStringGeoproccess/Scripts Utiliy Network/Calculate_connections.pylink outside repo; matched by filename
CalculateEstimateInputsMainCalculate estimate inputsworkflowId:GPString, graphMode:GPString, sdeVersion:GPString, resultJson:GPString →Geoproccess/Scripts Utiliy Network/Calculate_estimate_inputs.pylink outside repo; matched by filename
CalculateInitialNetworkMainCalculate initial networkworkflowId:GPString, sdeVersion:GPStringGeoproccess/Scripts Utiliy Network/Calculate_initial_network.pylink outside repo; matched by filename
CalulateEdusMainCalculate EDUsworkflowId:GPStringGeoproccess/Scripts Utiliy Network/Calculate_edus.pylink outside repo; matched by filename
CloneWorkflowAuxiliarClone workflowworkflowId:GPString, projectName:GPString, projectDescription:GPString, newWorkflowId:GPString →Geoproccess/Scripts Utiliy Network/Clone_workflow.pylink outside repo; matched by filename
CopyToLocal<root>Copy to localWorkflow id:GPStringGeoproccess/Scripts Utiliy Network/Copy_to_local.pylink outside repo; matched by filename
CreateWorkflowMainCreate workflowperimeter:GPFeatureRecordSetLayer, collection point:GPFeatureRecordSetLayer, project_name:GPString, project_description:GPString?, stage:GPString?, company:GPString?, client_first_name:GPString, client_last_name:GPString, email:GPString, phone_number:GPString?, workflow_id:GPString →Geoproccess/Scripts Utiliy Network/Create_workflow.pylink outside repo; matched by filename
DeleteMultipleProjectAuxiliarDelete multiple projectsworkflowsId:GPMultiValueGeoproccess/Scripts Utiliy Network/Delete_multiple_projects.pylink outside repo; matched by filename
ExportToShapefileAuxiliarExport to shapefileworkflowId:GPString, shapefiles:DEFile →Geoproccess/Scripts Utiliy Network/Export_to_shapefile.pylink outside repo; matched by filename
PrepareManualAuxiliaryLinesMainPrepare manual auxiliary linesworkflowId:GPString, segments_prepared:GPLong →Geoproccess/Scripts Utiliy Network/Prepare_manual_auxiliary_lines.pylink outside repo; matched by filename
ResetNetworkMainReset networkworkflowId:GPString, sdeVersion:GPStringGeoproccess/Scripts Utiliy Network/Reset_network.pylink outside repo; matched by filename
Second1MainCalculate candidate routesworkflowId:GPString, totalRoutes:GPLong, routes:GPFeatureRecordSetLayer →Geoproccess/Scripts Utiliy Network/Second_1.pylink outside repo; matched by filename
Second2MainAdd selected main lineworkflowId:GPString, route:GPFeatureRecordSetLayerGeoproccess/Scripts Utiliy Network/Second_2.pylink outside repo; matched by filename
SecondMainLineMainAdd main line (manual route)workflowId:GPString, userRoute:GPFeatureRecordSetLayerGeoproccess/Scripts Utiliy Network/Second_main_line.pylink outside repo; matched by filename
UpdateNetworkMainUpdate networkworkflowId:GPString, distance:GPLong, unit:GPString, sdeVersion:GPStringGeoproccess/Scripts Utiliy Network/Update_network.pylink outside repo; matched by filename

Widget inventory

Custom widgets under ExB/client/your-extensions/widgets and shared library shared-code.

Updated 2026-09-29.

Custom widgets

WidgetDisplay nameVersionCode areasShared modulesGP callsMessagingTests
advanced-editingAdvanced editing1.17.0config.ts, runtime, setting70DataRecordSetChangeMessage, MessageManager, publishMessageyes
clone-workflowClone Workflow1.16.0config.ts, runtime, setting31—yes
create-workflowCreate workflow1.12.0config.ts, runtime, setting141—yes
create-workflow-floatingCreate workflow (floating)1.17.0config.ts, runtime, setting141—yes
data-statisticsData Statistics1.17.0config.ts, runtime, setting11—no
init-workflowInit Workflow1.17.0config.ts, runtime, setting70—yes
list-projectsList Projects1.17.0config.ts, runtime, setting52—yes
stepperStepper1.16.0config.ts, runtime, setting10—yes
title-projectTitle Project1.17.0config.ts, runtime, setting10—no
workflow-controllerWorkflow Controller1.16.0config.ts, runtime, setting20—no
workflow-projectWorkflow Project1.16.0config.ts, data-actions, runtime, setting132DataRecordSetChangeMessageyes

shared-code modules

ModuleUsed by
arcade-editoradvanced-editing
basemap-persistenceworkflow-project
build-buffered-location-query-paramsinit-workflow
build-create-workflow-gp-paramscreate-workflow, create-workflow-floating
editor-selection-coordinationadvanced-editing, workflow-controller
geoprocesscreate-workflow, create-workflow-floating, workflow-project
gp-running-lockworkflow-project
lib—
map-edit-sketch-coordinationadvanced-editing, workflow-project
match-state-plane-coordinate-systeminit-workflow
modaladvanced-editing, list-projects, title-project, workflow-project
nad83-state-plane-coordinate-systemsinit-workflow
project-geometrycreate-workflow, create-workflow-floating
query-state-plane-zonesinit-workflow
render-rich-textcreate-workflow, create-workflow-floating
stepper-navigationcreate-workflow, create-workflow-floating, init-workflow, stepper, workflow-project
street-networkworkflow-project
toastadvanced-editing, clone-workflow, create-workflow, create-workflow-floating, init-workflow, list-projects, workflow-project
tool-selectorclone-workflow, create-workflow, create-workflow-floating, data-statistics, list-projects, workflow-project
use-workflow-packagescreate-workflow, create-workflow-floating
wetlands-layer-visibilityworkflow-project
workflow-calculated-connections-eventsworkflow-project
workflow-controller-coordinationadvanced-editing, workflow-controller
workflow-id-attributesadvanced-editing
workflow-package-uicreate-workflow, create-workflow-floating
workflow-packagescreate-workflow, create-workflow-floating, list-projects
workflow-submit-form-schemacreate-workflow, create-workflow-floating
wws-api-request-setupcreate-workflow, create-workflow-floating, workflow-project
wws-api-token—
wws-secured-layer—
wws-server-fetchclone-workflow, create-workflow, create-workflow-floating, list-projects, workflow-project
wws-url-locationcreate-workflow, create-workflow-floating, init-workflow

Per-widget dependencies

WidgetShared modulesArcGIS SDK modules
advanced-editingarcade-editor, editor-selection-coordination, map-edit-sketch-coordination, modal, toast, workflow-controller-coordination, workflow-id-attributes30
clone-workflowtoast, tool-selector, wws-server-fetch1
create-workflowbuild-create-workflow-gp-params, geoprocess, project-geometry, render-rich-text, stepper-navigation, toast, tool-selector, use-workflow-packages, workflow-package-ui, workflow-packages, workflow-submit-form-schema, wws-api-request-setup, wws-server-fetch, wws-url-location23
create-workflow-floatingbuild-create-workflow-gp-params, geoprocess, project-geometry, render-rich-text, stepper-navigation, toast, tool-selector, use-workflow-packages, workflow-package-ui, workflow-packages, workflow-submit-form-schema, wws-api-request-setup, wws-server-fetch, wws-url-location15
data-statisticstool-selector1
init-workflowbuild-buffered-location-query-params, match-state-plane-coordinate-system, nad83-state-plane-coordinate-systems, query-state-plane-zones, stepper-navigation, toast, wws-url-location2
list-projectsmodal, toast, tool-selector, workflow-packages, wws-server-fetch11
stepperstepper-navigation0
title-projectmodal0
workflow-controllereditor-selection-coordination, workflow-controller-coordination0
workflow-projectbasemap-persistence, geoprocess, gp-running-lock, map-edit-sketch-coordination, modal, stepper-navigation, street-network, toast, tool-selector, wetlands-layer-visibility, workflow-calculated-connections-events, wws-api-request-setup, wws-server-fetch28