Feasibility

Part of the IP4CMS portal. ← All module guides

What it's for β€” the Feasibility module answers a single practical question: can a service be delivered at a given location (or for a given resource)? It checks a set of coordinates against your configured rules β€” how close it is to existing infrastructure (proximity), whether it falls inside a coverage area (polygon), whether there is a clear line of sight to a tower, whether a bookable resource is free in a date/time window (availability), and whether an external network operator reports the address as serviceable (external API). You point it at a location, it runs the checks, and it returns Feasible (Yes), Not feasible (No), Maybe, or Pending β€” together with which products or resources are available there.

Where to find it β€” Feasibility lives in two places in the portal:

Before you start


Key tasks

Run a feasibility request

This is the core operator task β€” checking one location.

  1. Go to Feasibility Requests and click New Request.
  2. Optionally enter a Description (e.g. "Site A check for new tower") to help you find it later.
  3. Select layers β€” tick one or more active layers. The request runs every query in those layers. The overall result is Feasible if any selected layer comes back feasible.
  4. Resource Types (optional) β€” tick one or more types (product, package, inventory, user, supplier) to limit which resources are evaluated. Leave empty to check all.
  5. Coordinates (optional) β€” click on the map to drop a marker, drag it to fine-tune, or type Latitude and Longitude directly. Coordinates are required for proximity, polygon, line-of-sight, and the external providers.
  6. Resource / Date-Time (optional) β€” for availability checks, enter a Resource ID and a From/To window with a Timezone.
  7. Click Execute Request. Results appear in the list with a Processing status (Pending / Processing / Completed / Failed) and a Feasibility result (Yes / No / Maybe / Pending). Click View on any row to see the per-layer and per-query breakdown, including matched resources and the raw details each query returned.

A result is Maybe when some queries pass and none clearly succeed, and Pending when an external generic-API query is still waiting on its callback.

Work with request groups

When many locations are checked together (for example, a bulk upload from the Mapping module), the individual requests are gathered into a request group.

Manage layers

A layer is a named bundle of checks β€” think of it as one "answer path", e.g. Fibre Coverage or LTE Coverage. A request can run several layers at once.

In Settings β†’ Feasibility, create a layer with:

Then attach queries to the layer and set their sort order (priority). Within a layer, the first query to return Yes becomes the preferred query, and that layer becomes the preferred layer for the request β€” useful for picking the best product to offer. Only active layers and active layer-query links are evaluated.

Build and run a query

A query is one individual check. Create it with a Key, Name, and a Type, then fill in the type-specific settings:

Queries also carry an optional colour (for map display) and an Active toggle. Mark a query inactive to exclude it without deleting it. You can run a check directly from the New Request form, or pre-build queries here and attach them to layers.

Use external provider integrations

For real-world network feasibility, queries of type external_api can call an operator's API instead of using your own data:

The portal only offers the providers your licence enables, and access is re-checked every time a query runs. Each provider needs valid coordinates; OpenServe and Telkom also need an API key (configured per query or via environment).

Manage resource availability

For availability checks you maintain availability windows for your resources (products, packages, inventory, users, suppliers):


How the data connects

Locations & mapping. Proximity, polygon, and line-of-sight queries test the request's coordinates against Locations from the Locations module. A query can pull its locations three ways, combined: specific linked locations, every location in a location group, or a location filter (by type, status, group, supplier, or name match). The module keeps these resolved into a fast lookup table automatically, and exposes location geometry so feasibility coverage can be drawn on the Mapping module's maps. Bulk feasibility runs initiated from Mapping create the request groups described above.

Resources. Availability queries link to feasibility resources, which are pointers to real entities elsewhere in the portal β€” products and packages (from Sales & Orders), inventory, users, and suppliers. When a request is feasible, the module records the matched resources for each layer, so the result tells you not just whether service is possible but what you can offer. A feasible request can flow onward into an order (the portal can create an order directly from a feasibility request).

Layers, queries, locations, resources therefore form a chain: a request runs one or more layers β†’ each layer runs its queries β†’ each query tests coordinates against locations or a resource's availability (or an external operator) β†’ the result rolls up to a per-layer status and an overall Yes/No/Maybe/Pending, with preferred layer/query and matched resources attached.


Permissions & access


Tips & gotchas