Training manual
Section 1 of 58: Introduction
This tutorial explains how Econ works end to end — for office staff on this web dashboard, field workers on the mobile app, and equipment owners. Use the menu on the left to jump to a specific operation (creating a project, starting a site, scanning QR, approving trip issues, generating reports, and more).
What you will learn
- How to set up a company, project, site, and field team from zero.
- LINEAR (chainage) vs AREA (map polygon) projects — when to use each.
- All 11 trip process types: standard QR, no-loader, paper QR, offline, exceptions, and more.
- How GPS verification works for loader, driver, and unloader on LINEAR and AREA sites.
- How to read reports, approve trip issues, and close a site.
Shorter topic pages are also available from the home menu: Platform, Trips, Trip issues, Office dashboard, Roles.
| Term | Meaning |
|---|---|
| Company | Your employer org in Econ. Office users may belong to several and switch in the header. |
| Company worker | Person in the company directory (phone, role). Created in User Management — not the same as project membership. |
| Project member | Company worker assigned to a specific project (drivers often have linked equipment). |
| Project | Construction job — LINEAR (chainage CSV/map) or AREA (closed polygon on map). Contains products, places, sites, members. |
| Project type | LINEAR = alignment + chainage. AREA = map zone + GPS places (requires area_projects feature). |
| Product | Material tracked (DELIVERY or DISPOSAL) with units and target quantities. |
| Product place | LOADING, UNLOADING, or DISPOSAL point — chainage (LINEAR) or lat/lng (AREA). |
| Site | Work zone — chainage segment (LINEAR) or drawn polygon (AREA); dates, products, places. |
| Chainage | Distance along centerline, e.g. 13+800 (km+mmm). LINEAR sites must sit inside project range. |
| boundaryGeoJson | Polygon geometry for AREA project boundary or site zone (GeoJSON). |
| Disposal site | Site flagged isDisposalSite — pickup zone + selected dump destinations. |
| Verification mode | How GPS is checked: CENTERLINE (LINEAR) or polygon rules (AREA). |
| GpsCheckResult | pass / fail / skip per role (loader, driver, unloader). |
| Trip | One load movement: loader → driver → unloader (office can edit and approve issues). |
| QR handoff | Loader shows QR; driver scans in mobile to accept the trip. |
| Report value | Fixed score on approved trip issues: 0, −1, or +1 — affects product totals. |
Office (this website) → ComapySass API → projects, sites, reports, users Field (mobile app) → Field API → trips, QR, offline queues, equipment Both share the same business story: projects consume equipment and record every delivery trip.
| Surface | Who | Main work |
|---|---|---|
| Web dashboard | Engineers, dispatch, HR, management | Projects, sites, KPIs, reports, trip issue approval |
| Mobile app | Loader, driver, unloader, foreman | Work tab, QR, site start, issue report/classify |
| Mobile / web (field) | Equipment owner | List equipment, usage reports |
A typical day
- Morning — office: log in, switch company, check dashboard KPIs, add a site or adjust members.
- Morning — site: foreman opens Work, syncs after poor coverage, starts site or opens loader/driver screens.
- Handoff — loader shows QR; driver scans; unloader completes at destination.
- Evening — office: products/equipment reports; approve trip issues; generate site report.
- Evening — owner: mobile Reports tab for machine trip history.
Econ connects equipment owners, construction companies, and field workers through one trip-tracking story. Everything below happens in order — skip a phase and field work will block.
| Phase | Who | What happens | Where |
|---|---|---|---|
| 1 | Any user | Phone login via Telegram code | Mobile or web /login |
| 2 | Equipment owner | Posts equipment listing | Mobile Home / Add Post |
| 3 | System admin | Company registered; first owner/admin | Operations / admin tools |
| 4 | HR / admin | Company workers added to directory | Web User Management |
| 5 | Office engineer | Project, products, places, sites, members | Web Projects |
| 6 | Office engineer | Foreman + site settings (speed, times, flags) | Web site detail |
| 7 | Foreman | Site starter → assign loaders/drivers/unloaders → Start site | Mobile Work |
| 8 | Loader, driver, unloader | Daily trips — QR, codes, offline, exceptions | Mobile Work |
| 9 | Office / owner | Reports, GPS verification, trip issue approval, site closure | Web + mobile Reports |
Registration → Company users → Project setup → Foreman starts site
→ Loader QR / driver scan / unloader complete → Reports & verificationRegistration today means: your phone is already in the system, you log in with a Telegram one-time code. Self-signup on /register is not wired — an admin must add you first (Phase 4).
- 1Open login
Web /login or mobile app login screen.
- 2Enter phone
International format (e.g. 2519…). Mobile normalizes 09… and 9-digit local numbers.
- 3Request code
Backend sends 6-digit code to Telegram bot linked to that phone.
- 4Enter code
JWT stored; user lands on dashboard (web) or five tabs (mobile).
- 5If login fails
“User not found” — phone not in company_workers. Admin adds you in User Management.
Equipment owners use the mobile marketplace to list trucks and machines. This is separate from company project work but feeds the equipment pool companies can assign to drivers.
- 1Home tab — browse equipment with filters (category, location, type).
- 2Add Post — 5-step wizard: category → type → specs → up to 4 images → details (phone required).
- 3Account — profile, my equipment, update GPS location for nearby features.
- 4Reports tab — trip history per machine (usage, not favorites).
Office analytics for equipment compliance live on the web dashboard, not the public /hearted placeholder route.
Phase 3 — Company registration
- A company record is created (name, settings, feature flags such as area_projects).
- First owner and system admin are attached to the company.
- Done by operations / system admin — not self-service on the public site.
Phase 4 — Add company workers
Route: /dashboard/CompanyUsers — HR adds people to the company directory.
| Mode | When to use | Result |
|---|---|---|
| By phone (Telegram) | User has Telegram | Full role selection; can be loader, driver, foreman, office roles |
| Without Telegram | No Telegram access | Loader_load only; role cannot be changed later |
Field roles vs dashboard roles
| Type | Examples | Used for |
|---|---|---|
| Field roles | loader_load, driver, unloader, foreman | Mobile Work tab, QR, site operations |
| Dashboard roles | office_engineer, project_manager, site_engineer, owner | Web projects, reports, trip issue approval |
Every project has a project type that controls how geometry, sites, places, and GPS verification work.
| LINEAR (default) | AREA (feature flag: area_projects) | |
|---|---|---|
| Geometry | Centerline from CSV or map points; chainage range | Closed polygon drawn on map |
| Site definition | Start/end chainage inside project range | Polygon drawn inside project boundary (or full project area) |
| Product places | Chainage point + optional distance | GPS lat/lng required; no chainage |
| Dashboard display | Chainage column on sites | Site area (m²) — click to view map |
| GPS verification | Unload vs survey parquet at chainage | Mixed: LOADING place + site polygon rules |
| Best for | Roads, railways, pipelines | Quarries, plants, closed yards, map zones |
Prerequisite: Company has area_projects feature enabled.
Step 1 — Create AREA project
- 1Projects → + New project → choose AREA type (not CSV chainage).
- 2Draw the project boundary polygon on the map (at least 3 points, closed area).
- 3Save — project stores boundaryGeoJson.
Step 2 — Add products & places
- 1Add products as usual (DELIVERY or DISPOSAL type).
- 2Open Product places — chainage fields are hidden for AREA.
- 3Enter latitude and longitude for each place (LOADING, UNLOADING, or DISPOSAL).
- 4Set geofence radius (m) — used for GPS verification at that place.
- 5Distance field remains available where applicable.
Step 3 — Create site on map
- 1Manage Sites → map shows project boundary (brand color).
- 2Draw site polygon inside project area — clicks outside boundary are rejected.
- 3Or tick “Use whole project area” to inherit full boundary.
- 4Select products and places; set start date and site name.
- 5Save — site stores boundaryGeoJson (or null for full-area sites).
Step 4 — Field & verification
- Foreman starts site on mobile same as LINEAR.
- Trips unload inside site polygon (DELIVERY) or pickup inside polygon (DISPOSAL).
- Office Trip Details shows GPS badges per role — see GPS verification section.
- Click site area on dashboard to open map overlay (project + site polygons).
Disposal tracks material picked up from a site zone and dumped at configured destinations. Works on both LINEAR and AREA projects with different geometry inputs.
Office setup (Phase 5)
- 1Create DISPOSAL product on project.
- 2Add DISPOSAL places (dump destinations) with GPS or chainage.
- 3Manage Sites → check Disposal site.
- 4Select DISPOSAL product(s) and which dumps apply to this site.
- 5Optional: Allow trip without unloader — driver can complete alone (Mode 1B).
Foreman site starter (Phase 7)
| Step | Action |
|---|---|
| 1 | Assign pickup loader(s) for site pickup zone |
| 2 | Assign dump unloader per configured dump (skip dumps marked noUnloader) |
| 3 | No supervisor step on disposal sites |
| 4 | Start site when pickup loaders (and unloaders if required) are assigned |
GPS verification (AREA disposal)
- Loader + driver-load: must be inside site polygon (pickup zone).
- If dump destination selected: driver-unload + unloader checked against DISPOSAL place GPS.
- If no dump selected (pickup-only): dump-side checks PASS automatically.
- 1Foreman starts disposal site
Site starter: pickup loaders + per-dump unloaders (if required). No supervisor.
- 2Loader at pickup
Shows QR at site pickup zone; driver scans as standard delivery.
- 3Driver transport
May select dump destination if multiple dumps configured.
- 4Unloader at dump
Assigned per dump place; completes trip at destination GPS.
- 5Without unloader flag
If office enabled allow trip without unloader, driver completes trip at dump.
disposalPlaceId on unloader assignments — one unloader per dump that requires unloading.Phase 8 covers every trip process type the system supports. Pick the scenario that matches your site configuration.
| # | Scenario | When used | Key roles |
|---|---|---|---|
| 8.1.1 | Standard loader QR → driver → unloader | Default; loader required | Loader, driver, unloader |
| 8.1.2 | Driver creates trip without loader | Site flag allowDriverTripWithoutLoader | Driver, unloader |
| 8.1.3 | Paper QR | Printed QR from web site detail | Driver, unloader |
| 8.1.4 | Multi-place / multi-loader | 2+ product places on site | 2+ loaders, drivers |
| 8.1.5 | Verification codes | Poor connectivity or process requires codes | All field roles |
| 8.1.6 | Offline queued sync | No network during action | All field roles |
| 8.1.7 | Buffered accept | Driver scans before loader syncs | Loader, driver |
| 8.1.8 | Reassign driver mid-site | Foreman changes personnel | Foreman, loader, new driver |
| 8.1.9 | Trip exception / issue | Driver reports problem | Driver, foreman, office |
| 8.1.10 | Office post-trip edit | Correction after field done | Office engineer |
| 8.1.11 | GPS verification | After unloaded | System, office |
loading → driving → unloaded → (needs checking) → approved
↘ issue_reported → pending_approval → approved/rejectedThe default flow: loader shows QR → driver scans → unloader completes.
Before first trip (office + foreman)
- 1Project has products and product places.
- 2Site created with products/places; allowDriverTripWithoutLoader = off.
- 3Loader, driver (+ equipment), unloader are project members.
- 4Foreman started site → status Loading.
- 5Loader assigned to place; driver on site personnel.
Loader — step by step
- 1Work → project → Loader sites (Loading status only).
- 2Loader site detail → select driver + product.
- 3Tap Show QR — app captures GPS, POST scanQRCode → trip status loading.
- 4Driver scans QR from LoaderQRCodeDialog.
Driver — step by step
- 1Work → Driver sites → Scan QR.
- 2Camera decrypts payload; confirm car/plate if prompted.
- 3POST acceptTrip → status driving.
Unloader — step by step
- 1Work → Unloading sites → Unloader site detail.
- 2Scan QR or pick trip; enter chainage (LINEAR) or confirm GPS (AREA).
- 3POST completeTrip → status unloaded.
Common failures & recovery
| Problem | Trip status | Fix |
|---|---|---|
| Loader never showed QR | No trip row | Loader creates QR |
| Accept failed / offline | loading | Driver retry or sync Q2 queue |
| Complete failed / offline | driving | Unloader retry or sync Q4 queue |
| Driver already has active trip | — | Pick another driver |
| Chainage out of range (LINEAR) | driving | Enter valid km+mmm inside site range |
Drivers start trips without loader QR when office enabled the site flag and foreman started with supervisor only.
Prerequisites
- allowDriverTripWithoutLoader = true on site (office Manage Sites).
- Supervisor assigned on Site starter.
- Site started → Loading (may start with supervisor only — no loader teams).
- Driver is project member with equipment/plate.
- For offline create: driver needed one prior online session to cache equipment list.
Field steps
- 1Foreman: Site starter → assign supervisor only → Start site.
- 2Driver: Work → site → Create trip without loader → pick product + equipment.
- 3Trip goes directly to driving (no loading status from loader).
- 4Unloader completes as standard.
For yards without phones at the loading point, office generates a printed QR from site detail.
Office — generate & print
- 1Site detail → Loader paper QR section.
- 2Generate QR (payload includes r: paper marker).
- 3Print and post at loading point.
Field — driver scan
- 1Driver scans paper QR (no loader phone needed).
- 2Backend creates new trip + accepts in one step → driving.
- 3Unloader completes as standard.
| Phone loader QR | Paper QR | |
|---|---|---|
| Trip creation | Loader scanQRCode first | Created on driver scan |
| Who shows QR | Loader app | Printed sheet |
| Offline | Q1 + Q2 queues | Q2 with encryptedData |
When a site has 2+ product places, each place can have its own loader running parallel trips.
- 1Office: site links multiple places per product (or multiple products).
- 2Foreman: Site starter assigns one loader per place.
- 3Each loader generates independent QR → separate trip rows.
- 4Drivers must scan the QR from their assigned loader/place.
- 5Unloaders complete each trip independently.
Numeric codes alongside QR for poor connectivity or sites that require manual confirmation.
| Code | Role | When shown |
|---|---|---|
| Loader verification code | Loader | After scanQRCode; expires (~2 min) |
| Driver verification code | Driver | After acceptTrip; driver may need to confirm |
| Unloader verification code | Unloader | On car row before completeTrip |
When to use codes vs QR only
- QR-only: good connectivity, standard handoff.
- Codes: backup when camera fails or process requires verbal confirmation.
- Expired codes: UI shows expired — regenerate by re-showing QR or re-accepting per safety rules.
Mobile queues failed mutations locally. When back online, Work → Sync all uploads them in order.
| Queue | What was offline | API action |
|---|---|---|
| Q1 — Pending trip creations | Loader generated QR but server never got scanQRCode | scanQRCode replay |
| Q2 — Pending accept trips | Driver accepted QR offline | acceptTrip replay |
| Q3 — Pending driver trips | Driver created trip without loader offline | createTrip replay |
| Q4 — Pending complete trips | Unloader completed offline | completeTrip replay |
Sync algorithm
- 1User taps sync badge on Work tab (must be online).
- 2Pass 1: Q1 creations → Q2 accepts → Q3 driver trips → Q4 completes.
- 3Pass 2: retry any that failed due to ordering (e.g. accept before create landed).
- 4Refresh cached site data (up to 15 sites per project).
- 5If N failed: stay online, sync again, or contact support with timestamp.
Outcome scenarios
- All succeed: trips reach unloaded; queues cleared.
- Partial fail: some trips stuck — retry sync; check which queue failed.
- Idempotent retry: alreadyAccepted / alreadyCompleted treated as success.
- Duplicate guards: system blocks abusive duplicate offline payloads.
When a driver scans before the loader trip reaches the server (loader offline, driver online), the accept may be buffered instead of failing permanently.
- 1Loader offline: shows QR locally, trip in Q1 queue.
- 2Driver online: scans QR → server may store pending_offline_events buffer.
- 3Loader syncs Q1 → trip created on server.
- 4Next sync pass applies buffered accept → driving.
Foreman or coordinator can change personnel while site is Loading.
- 1Site detail → remove driver from site personnel or change assignment.
- 2Add new driver from project member pool.
- 3In-flight trips keep original driver until complete.
- 4New loader QR uses newly selected driver only.
Office engineers can correct trip data after field completion.
- 1Open site detail or project trips table.
- 2Select trip → edit quantity, times, plate, locations where permitted.
- 3Save — may trigger re-verification or report recalculation.
- 4For exceptions: use trip issue approval flow instead of raw edit.
| Situation | Action |
|---|---|
| Wrong quantity entered | Edit trip quantity on site detail |
| GPS needs recheck | Reset checked flag; wait for verification cron |
| Material went to wrong place | Driver reports issue → foreman classifies → office approves |
Goal: Project exists, materials defined, sites created, people assigned — before field work begins.
| Step | Who | Where (web) |
|---|---|---|
| A1 Log in (phone → Telegram 6-digit code) | Engineer / admin | /login → /dashboard |
| A2 Switch company if user has several | Admin | Header company dropdown |
| A3 User Management: add company workers | HR | /dashboard/CompanyUsers |
| A4 Projects → + New project (LINEAR: CSV/map · AREA: draw polygon) | Engineer | /dashboard/projectsHome |
| A5 Open project → add Products (DELIVERY or DISPOSAL) | Engineer | Project detail |
| A6 For each product → Product places (chainage or GPS) | Engineer | Product places dialog |
| A7 + Add / Manage Users — project members (drivers need equipment) | Engineer | Project detail |
| A8 Manage Sites — chainage or map polygon, dates, products+places | Engineer | Project detail |
| A9 Site detail — foreman, speed/times, paper QR, generate report | Engineer | .../sites/[siteId] |
Detailed order for a new LINEAR project
- 1Create project from CSV or map points — verify chainage range on project card.
- 2Add each material as a product with unit and target quantity.
- 3For DELIVERY products: add LOADING places along chainage; optional UNLOADING places.
- 4For DISPOSAL products: add DISPOSAL dump places with GPS or chainage.
- 5Assign all field workers as project members; pick truck plate for each driver.
- 6Create sites: delivery sites use chainage range; disposal sites tick isDisposalSite and pick dumps.
- 7Open site detail: set foreman, average speed, loading/unloading times.
Detailed order for a new AREA project
- 1Confirm company has area_projects feature enabled.
- 2Create AREA project — draw closed boundary polygon on map.
- 3Add products; for each place enter lat/lng (chainage not used).
- 4Assign project members as above.
- 5Manage Sites — draw site polygon inside project boundary (or use whole project area).
- 6Verify site area displays on dashboard; click to preview map overlay.
Phase B — Field start (mobile)
| Step | Who | Where (mobile) |
|---|---|---|
| B1 Log in; allow location & camera | All | Login → Passcode → tabs |
| B2 Work → open project | Coordinator / roles | Work tab |
| B3 Delivery site: Site starter — loader per place + supervisor → Start | Foreman | Sites list |
| B3b Disposal site: pickup loaders + dump unloaders → Start (no supervisor) | Foreman | Sites list |
| B4 Loader: Start loading if needed → Loader site detail | Loader | Loader sites |
Phase C — Daily operations (mobile)
- 1Loader: assign driver, display QR (or use printed loader paper QR from web site page).
- 2Driver: scan QR to accept trip — status becomes driving.
- 3Driver: transport; use verification codes if your process requires them.
- 4Unloader: scan or verify to complete unloading — trip becomes unloaded.
- 5If offline: when back online, Work → tap sync badge to upload queued actions.
| Step | Who | Where |
|---|---|---|
| D1 Dashboard KPIs and recent activity | Management | Web /dashboard |
| D2 Products report + product analysis | Engineer / QS | Dashboard → Products tile |
| D3 Equipment report (filters, drill-down) | Office | Sidebar Equipment Report |
| D4 Site detail → Generate report / mark Done | Engineer | Site detail page |
| D5 Approve trip issues (updates totals & may auto-report one trip) | Backoffice | Site or project trip panels |
| D6 Owner equipment usage | Owner | Mobile Reports tab |
- 1Open /login
Enter phone number in international format as your organization standardizes.
- 2Request code
Backend sends a one-time code; user reads it in Telegram.
- 3Enter 6-digit code
App stores JWT and redirects to /dashboard.
- 4Switch company (if applicable)
Header → Company dropdown → pick company → new token for that company → dashboard reloads.
- 5Logout
Sidebar Logout clears session; use on shared PCs.
Quick actions (large tiles)
- Projects → project list
- Products → products report (not in narrow sidebar)
- Users → Company Users
- Account → account settings
What you see on the dashboard
- Overview cards: total cars, users, projects, active sites.
- Material delivery: each product row — planned vs delivered, progress bar; tap row for product analysis.
- Trip statistics: counts by loading, driving, unloading, unloaded, needs checking, approved.
- Site statistics: not started, loading, done, with/without foreman.
- Recent trips, sites, projects — useful for daily standups.
Route: /dashboard/CompanyUsers — used by HR / admin.
Mode A — By phone (Telegram user)
- 1Open Add User → choose By phone.
- 2Enter country code and phone; fetch preview if offered.
- 3Select role from directory → Save under current company.
Mode B — Without Telegram
- 1Choose Without Telegram — read warning: user becomes Loader_load only; role cannot be changed later.
- 2Enter name, phone, optional username → Save.
- 1Sidebar → Projects (/dashboard/projectsHome).
- 2Search filters project names on the current loaded page (10 per page).
- 3+ New project opens creation dialog.
- 4Export CSV downloads Project Name, Cars, Workers, KPI %, Points, Chainage Range for the current filtered page — paginate if you need all projects.
Prerequisite
Login must have an active company. If the dialog says company is missing, re-login or switch company.
Mode A — Upload CSV
- 1Tab Upload CSV → enter project name.
- 2File must end with .csv.
- 3Required columns: chainage, easting, northing, elevation.
- 4Example row: 13+800,500000.0,1200000.0,1500.5
- 5Submit Create — wait for success — page reloads.
Mode B — From map points
- 1Tab From map points → project name.
- 2Set interval in meters (e.g. 50) for derived chainage along the polyline.
- 3Optional starting chainage: 0+000, 13+800, or plain meters; empty = 0+000 at first point.
- 4Enter at least two points per line as longitude,latitude (WGS84), e.g. 38.123456,9.012345.
- 5Optionally click the map to append points.
- 6Submit Create project.
Route: /dashboard/projectsHome/[id]
Recommended order for a new project
- 1Products — create each material (name, unit, targets).
- 2Product places — for each product, define places along chainage.
- 3+ Add / Manage Users — attach company workers; drivers must pick plate/equipment when required.
- 4Manage Sites — create sites (see next section).
- 5Cars dialog — maintain project vehicles as needed.
Assign existing worker to project
- 1Open + Add / Manage Users.
- 2Select worker from available list.
- 3If role is driver — pick equipment / plate before assign.
- 4Assign to project — confirm row in members table.
Invite by phone from project dialog
- 1Enter country code and phone → fetch preview.
- 2Choose role and status → Save (may create company worker then assign).
- 3Tell user to log in on mobile with same phone.
Open Manage Sites from project detail. For LINEAR projects the dialog shows allowed chainage range. For AREA projects use the map-based site dialog — see AREA projects section.
| Field | Rule |
|---|---|
| Site name | Required |
| Start chainage | e.g. 13+800 — inside project range |
| End chainage | After start — inside project range |
| Start date | Required |
| Allow driver trip without loader | Optional — drivers may create trips without loader QR on this site |
| Products | Tick at least one |
| Places per product | For each ticked product, tick at least one place |
After save, open the site from the table for trip management and reports.
Route: .../sites/[siteId]
Trips table
- Monitor statuses: loading, driving, unloading, unloaded, needs checking, approved.
- Trip issue banners show when driver reported an issue or foreman classified — waiting for backoffice.
- Edit trip fields where permissions allow (quantity, times, plates).
Site settings
- Set foreman / supervisor.
- Average car speed, loading time, unloading time — often required before save.
Loader paper QR
Generate printable QR for yards without phones at the loading point (paper QR creates a new trip on driver scan — see QR scenarios).
Generate report
- 1Check whether a report already exists for the site/day.
- 2Click Generate Report when eligible trips are complete — recalculates equipment-per-trip scores for that calendar day.
- 3Approving a trip issue can run the same logic for that single trip only.
Finish site
When work is truly complete, use the action to set site status Done.
NONE → ISSUE_REPORTED → PENDING_APPROVAL → APPROVED
↘ reject → ISSUE_REPORTED (foreman may re-classify)Step by step
- 1Driver reports issue
Mobile — trip owner flags problem. Status: issue_reported. Excluded from product totals.
- 2Foreman classifies
Mobile or dashboard — picks one of four resolution types. Status: pending_approval.
- 3Backoffice approves or rejects
Dashboard Trip Exception panel on site/project — roles: owner, sys_admin, project_manager, office_engineer, site_engineer.
- 4On approve
reportValue snapshotted from classification. Reached intended / new useful location → trip may become unloaded + per-trip equipment report generated.
- 5On reject
Returns to issue_reported; classification cleared; foreman can submit again.
See Trip issues (exceptions) below for classification values and report impact.
- 1Dashboard quick action → Products (/dashboard/products-report).
- 2View aggregates across projects: target vs current, active trips hints.
- 3Use search and filters.
- 4Click a product for Product analysis — charts, progress, logistics views.
- 5Approved trip issues contribute fixed report values; pending issues contribute zero.
- 1Sidebar → Equipment Report.
- 2Choose date range (calendar).
- 3Optionally filter by project and site.
- 4Generate / refresh — driver-centric compliance-style summary.
- 5Click equipment row for individual machine view (period may default to today — check on-screen labels).
- Install from Play Store or internal channel your company provides.
- If forced update modal appears, install latest build from store.
- Grant camera (QR) and location (nearby projects, trip payloads).
Sign in
- 1Enter phone — app normalizes 09… to 2519…, 9-digit local to 251…, keeps 251… as-is.
- 2Send code → read Telegram → enter 6 digits on passcode screen.
- 3Five tabs appear on success.
- 4Logout: Account → Log out on shared phones.
| Tab | Purpose |
|---|---|
| Home | Equipment marketplace feed — filters, pagination, detail |
| Work | Projects — role-based sites, QR, sync |
| Add Post | Five-step equipment listing wizard (tab bar hidden) |
| Reports | Owner trip history by date range — not favorites |
| Account | Profile, my equipment, nearby projects, logout |
- Title: Projects — subtitle Online or Offline · using saved data.
- Filter chips: All, Active, Upcoming, Completed (derived from material progress on cards).
- Sync badge (top right): upload offline queues when online.
- Project cards: name, dates, site count, progress — tap to continue.
Role priority (multiple hats)
If user has mixed roles, Work filters in order: Loader first, else Driver, else Unloader, else generic coordinator list.
- 1Work → project
Generic routing → Sites list with Active / Done / All.
- 2Not Started site
Site starter: assign loader per product place, assign supervisor, Start site when enabled.
- 3Driver without loader sites
Start may enable with supervisor only when office enabled the flag.
- 4Loading / Done site
Site detail — manage drivers, loaders, unloaders, view trucks.
- 5Classify trip issues
When driver reported issue — pick resolution type → pending_approval for backoffice.
- 1Work → project
See loader-assigned projects only.
- 2Loader sites
Lists sites in Loading status (Not Started may use Start loading flow first).
- 3Loader site detail
Refresh trucks → select driver → show QR in LoaderQRCodeDialog.
- 4Wait for driver scan
Online: immediate accept. Offline: show QR, sync later from Work.
- 5Pending trips strip
If offline at QR time, local pending items until sync succeeds.
- 1Work → project → Driver sites
Cards show chainage, pending cars, coarse status.
- 2Scan QR
Camera → scan loader QR → confirm → trip becomes driving (same trip, no duplicate).
- 3Transport & codes
Use car info and verification codes per site process.
- 4Report trip issue
If delivery went wrong — flags issue_reported for foreman.
- 5Create trip without loader
Only if site.allowDriverTripWithoutLoader — pick product + equipment; may need one online session to cache trucks.
- 1Work → project → Unloading sites
My unloading sites list.
- 2Unloader site detail
See incoming vs unloaded trucks.
- 3Scan / complete unload
Correct QR for trip → confirm → unloaded.
- 4Refresh & sync
Pull to refresh if stale; Work → sync after offline complete.
| Action while offline | Queue |
|---|---|
| Loader generated trip/QR not reaching server | Pending trip creations |
| Driver accepted trip | Pending accept trips |
| Driver created trip without loader | Pending driver trips |
| Unloader completed unload | Pending complete trips |
Sync all
- 1Be online → Work → tap sync badge.
- 2Upload order: creations → accepts → driver trips → completes (may repeat once).
- 3Refreshes cached site data (bounded: up to 15 sites per project).
- 4If N failed, stay online and sync again or contact support.
Some deployments use numeric codes alongside or instead of QR:
- Loader may show loader verification code with expiry on trip card.
- Driver enters or confirms driver code after scan.
- Unloader uses unloader verification code on car row.
- Expired codes show expired in UI — request regeneration per safety rules.
| Status | Phase | Who acts |
|---|---|---|
| loading | At product place | Loader |
| driving | En route | Driver |
| unloading | At destination | Unloader |
| unloaded | Complete | — |
| needs checking | Pending GPS verification | System / office |
| approved | Verified closed | Office / automated check |
PHASE 5 — Office: project, products, places, sites, members
PHASE 6 — Office: foreman, speed, loading/unloading times, flags
PHASE 7 — Foreman: Site starter → assign teams → Start site (Loading)
PHASE 8 — Field:
Loader: assign driver → QR (or paper QR / driver-create if configured)
Driver: scan QR → driving → transport
Unloader: scan/verify → unloaded
PHASE 9 — Office:
GPS verification → needs checking / approved
Trip issues → approve/reject
Generate report → site DoneEnd-to-end journey map
| Journey | Office setup | Field path | Final state |
|---|---|---|---|
| P-01 Standard delivery | Project, site, members, foreman | Loader QR → driver scan → unloader | unloaded |
| P-02 Paper QR | Generate paper QR on site detail | Driver scan paper → unloader | unloaded |
| P-03 Driver without loader | Enable no-loader flag | Supervisor start → driver create → unloader | unloaded |
| P-04 Multi-place | 2+ places on site | 2 loaders, 2 parallel trips | 2× unloaded |
| P-07 Exception loop | — | Driver report → foreman classify → office approve | approved + reportValue |
| QR type | Behaviour | Trip status after |
|---|---|---|
| Standard loader QR | Decrypt → find trip → acceptTrip | loading → driving |
| Paper QR (r: paper) | Creates trip + accept in one scan | driving immediately |
| Driver without loader | No QR — driver createTrip API | driving immediately |
| Legacy QR without identifier j | Fallback: find LOADING trip by loader + product | driving |
| QR includes tripId | Updates that specific trip | driving |
| Non-paper loader QR, no trip yet | Error or buffer (8.1.7) — never duplicate create | — |
| Step | Actor | Status after |
|---|---|---|
| Normal trip | — | NONE |
| Driver flags issue | Driver | ISSUE_REPORTED |
| Foreman classifies | Site foreman (project_sites.foremanId) | PENDING_APPROVAL |
| Backoffice approves | Dashboard role | APPROVED + reportValue set |
| Backoffice rejects | Dashboard role | ISSUE_REPORTED (classification cleared) |
ISSUE_REPORTED, PENDING_APPROVAL: excluded from product totals (contribution 0). APPROVED: uses snapshotted reportValue.
| Classification | Report value | Trip status on approve |
|---|---|---|
| Material returned to loading site | 0 | Unchanged |
| Material wasted at wrong place | −1 | Unchanged |
| Material reached intended site | +1 | → unloaded (+ endTime if missing) |
| Material unloaded at new useful location | +1 | → unloaded (+ endTime if missing) |
- On approve for +1 outcomes: per-trip equipment report runs (same logic as Generate Report for that day, that trip only).
- reportGenerated = true on the approved trip.
- Foreman can re-classify until backoffice approves or rejects.
- 1Mobile Reports tab — pick start/end date.
- 2Equipment list with trip counts for range.
- 3Tap equipment → trip list with times, locations, quantity.
- 4Web office uses dashboard + equipment report + site generate-report instead.
Econ runs automatic GPS verification after a trip reaches unloaded. The goal is to confirm that load and unload actions happened in the right place — either along a LINEAR alignment (chainage) or inside an AREA site zone polygon.
When verification runs
- Runs periodically for trips with status unloaded and not yet checked.
- Writes per-role results to the trip: loader/driver/unloader GPS checks plus an overall tripStatus label.
- Office sees the badges in Trip Details; mobile sees them as informational.
LINEAR projects (alignment / chainage)
LINEAR verification uses the survey parquet (from the project CSV) as the source of truth.
- Loader: loader GPS is compared to the selected LOADING product place (point + radius or chainage-derived point).
- Driver (unload): driver unloading GPS is compared to the survey point at the unloaded chainage.
- Unloader: unloader GPS is compared to the same survey point at the unloaded chainage.
- Typical radius: ~100m (configurable via place geofence where applicable).
AREA projects (closed polygon sites)
AREA verification combines product places (where loading happens) with the site polygon (where unloading must occur).
| Case | Loader + Driver load checked against | Driver unload + Unloader checked against |
|---|---|---|
| AREA + DELIVERY product | LOADING place (point + geofence radius) | Site zone polygon (inside boundary) |
| AREA + DISPOSAL product (pickup-only) | Site zone polygon (pickup must be inside) | PASS when no dump destination is selected |
| AREA + DISPOSAL product (known dump) | Site zone polygon (pickup must be inside) | DISPOSAL dump destination place (point + geofence radius) |
GPS capture points
| Event | Role | Fields captured | Checked against |
|---|---|---|---|
| Load start | Loader | loaderLat, loaderLng | LOADING place or site polygon (by product type) |
| Accept / load | Driver | driverLat, driverLng | Same as loader for AREA DELIVERY |
| Unload complete | Driver | driverUnloadingLat, driverUnloadingLng | Site polygon or chainage point |
| Unload complete | Unloader | unloaderLat, unloaderLng | Site polygon or chainage point |
Per-role outcomes
| Result | Meaning | Office action |
|---|---|---|
| pass | GPS within allowed zone/geofence | No action — informational badge |
| fail | GPS outside expected zone | Trip may show Loader/Driver/Unloader Location Issue |
| skip | No GPS captured for that role | Informational — not treated as pass |
Verification statuses on trip
- unloaded — field work complete.
- needs checking — GPS rule mismatch; awaiting review.
- approved — passed automated or manual review; counts in compliance reports.
- tripStatus labels: verified, loader_red, driver_red, unloader_red, etc.
Spatial buffer (AREA polygons)
Polygon checks use a tolerance buffer (default 20m). DuckDB converts meters to degrees for WGS84 — otherwise far-away points could incorrectly pass.
Owner / marketplace (mobile & field web)
- 1Home: browse equipment with filters.
- 2Add Post: 5 steps — category, type, specs, up to 4 images, details (phone required).
- 3Account: profile, my equipment, update location for nearby features.
- 4Reports: usage and trips per machine (not the web Hearted placeholder).
| Role | Tool | Main tasks |
|---|---|---|
| Office / engineers | This web dashboard | Projects, sites, reports, trip review, user management |
| Foreman | Mobile Work | Start site, assign loaders, classify trip issues |
| Loader | Mobile / field web | Start loading, QR handoff, verification codes |
| Driver | Mobile / field web | Accept trips, transport, report issues |
| Unloader | Mobile / field web | Verify arrival, complete unloading |
| Equipment owner | Mobile / field web | List equipment, usage reports, notify interest |
- Phone + Telegram one-time code for web and mobile.
- Web: JWT in browser storage, company-scoped token, ~24h session guard with refresh.
- Mobile: long-lived session in device storage with refresh on 401.
- RBAC: dashboard areas (users, trip approve, reports) depend on company role keys.
- Multi-company: switch company on web header only.
| Symptom | Likely cause | What to try |
|---|---|---|
| Web login no code | Phone not registered / Telegram bot | Admin checks worker; start bot; retry |
| Cannot create project | Missing companyId on token | Re-login; switch company |
| Site save fails (LINEAR) | Chainage outside range; no places | Fix chainage; add product places |
| Site save fails (AREA) | Polygon outside project boundary | Redraw site inside project map |
| Add place fails (AREA) | chainagePoint required error | Enter lat/lng instead — chainage not used on AREA |
| GPS all pass but wrong location | AREA trip used CENTERLINE mode | Ensure project type AREA; re-run verification |
| Loader pass, unloader fail (AREA) | Unload GPS outside site polygon | Check site boundaryGeoJson matches field location |
| Mobile no projects | Not project member | Office assigns on project |
| Work shows Offline | Network; cached list | Coverage; sync when online |
| Loader list empty | Only Loading sites shown | Foreman must start site |
| Driver cannot create trip | Site flag off | Office enables allow without loader |
| Sync failures | Bad queued payload | Retry; capture time for support |
| Web Hearted empty | Placeholder route | Use dashboard reports |
Can one person be loader on one project and driver on another?
Yes on server; mobile Work shows loader view if any assignment is loader (see role priority).
Where are favorites on mobile Reports tab?
Reports tab is equipment usage history, not favorites (internal name Hearted).
Who creates the site?
Geometry and products on web; starting site for field work is usually mobile foreman.
Can drivers work without loaders?
Only if office enabled Allow driver to create trip without loader on that site.
What is the difference between LINEAR and AREA?
LINEAR uses chainage along a centerline. AREA uses map polygons and GPS coordinates for places and site zones. See Project types section.
Do I need chainage on AREA projects?
No. Sites show area (m²) instead of chainage. Product places require latitude and longitude.
What happens if GPS verification fails?
Trip shows fail badges per role. Office reviews in Trip Details. Field should allow location permission and work inside the defined site zone or loading place.
Web
- /register does not submit — use User Management.
- Main /hearted is not office analytics.
- Projects status filter may be incomplete server-side.
- CSV export is current page only.
Mobile
- Forced update if store version ahead of app check.
- Role priority can confuse loader+driver users.
- Driver-create-trip offline needs one online session to cache equipment list.