Configuration · Influence zones
Maps postal codes to named catchment zones (primary, secondary, tertiary and so on), so customer registrations can be analysed by catchment. Supports CSV import and export.
| Area | Configuration |
| Routes | configuration.influence-zones · configuration.influence-zones.index · configuration.influence-zones.import |
| Centre modules | influence-zone |
| Staff levels | root · admin |
| Models | influence-zone · load |
| UI label | title.influence-zones / menu.navbar.configuration.influence-zones |
| Coverage | 3 use cases · 1 happy · 3 failure |
Known issues (1)
How it works
Three fields only — id, postal code, zone — but it feeds the demographic dashboard’s influence-zone breakdown. fetchData is defensive: a failed query falls back to an empty table and a synthetic meta object ({ page: { number: 1, size: 15, total: 0 } }) rather than leaving the list in a loading state, though it also means a backend outage looks identical to ‘no data’. Export goes through load.export('influence', …) — note the model name sent to the API is influence, not influence-zone.
Use cases
Why someone opens this (3)
- Loading a region’s postal-code-to-catchment mapping during onboarding.
- Analysing what share of registrations comes from the primary catchment.
- Correcting a mis-assigned postal code.
Path map
flowchart LR F(["Influence zones"]):::feat F --> H1["Mapping imported"]:::ok F -.-> X1["Query fails"]:::bad F -.-> X2["Duplicate column mapping on import"]:::bad F -.-> X3["Role insufficient"]:::bad classDef feat fill:#566066,stroke:#566066,color:#ffffff,font-weight:bold classDef ok fill:#e3f1ea,stroke:#0d6b42,color:#0d4a2e classDef bad fill:#f7e6e2,stroke:#9a2d1c,color:#6e1f13
Happy paths
Mapping imported
- Admin opens Influence zones → import and downloads the three-column example.
- Uploads the filled CSV; columns auto-map to id, postal_code and influence_zone.
- The import runs and the list shows the mapping.
- The demographic dashboard’s influence-zone chart populates.
Failure paths
Query fails
Cause — API error loading the list.
What happens — Caught by a bare
catch {}; the table shows zero rows with a fabricated meta — indistinguishable from an empty dataset.
Duplicate column mapping on import
Cause — Two CSV columns mapped to one field.
What happens —
error.load.repeated-fields.
Role insufficient
Cause — Not root/admin.
What happens —
influence-zone#canAccess/canImport/canExportblock it.
QA checklist
Tick these off while regression-testing this feature. The boxes are plain Markdown, so progress is visible in git diffs.
- ✅ Mapping imported
- ⛔ Query fails
- ⛔ Duplicate column mapping on import
- ⛔ Role insufficient
Implementation
app/controllers/configuration/influence-zones/index.jsapp/controllers/configuration/influence-zones/import.jsapp/routes/configuration/influence-zones/*.jsapp/models/influence-zone.jsapp/abilities/influence-zone.jsapp/enums/influence-zones.js
Translation keys (7)
Key English title.influence-zonesInfluence zone menu.navbar.configuration.influence-zonesInfluence zone configuration.influence-zone.idid configuration.influence-zone.postal-codePostal code configuration.influence-zone.zoneZone of influence influence-zone.postal_codePostal code influence-zone.zoneZone of influence
Related
- Same area — Centre list & export · Centre editor (modules, app config, integrations) · Staff member list, deletion & restore · Staff member editor (levels, scope, API token) · Channels · Extra attributes · Email template preview & test send · Dashboard configuration · Server incidents · Server command runner (CLI) · Accessibility statement · Mobile app configuration · Customer login methods (Google, Facebook) · Third-party integrations & connectors · Social wifi & location services
- Shares data with — Customer CSV import · Children CSV import · Store CSV import · Footfall (flows) & Yardi upload · CSV import engine
Generated from doc/feature-inventory.json · id config-influence-zones · commit 276788ca6