Availability

Loading…

Ready to schedule ACTIVE projects whose survey is waiting — send the rep a booking link

The filter is project_status = 'ACTIVE' and the survey status — not survey status alone. Verified live: 94% of surveys sitting in a schedulable status (1,054 of 1,124) belong to CANCELLED projects, because survey status is never cleaned up when a project dies. Expect this queue to be short; it's arrival-driven, not a backlog.
OUR #Customer CityState Survey statusType GeocodeBooking
Loading…

Surveyors OWEDB is the seed, not the source of truth — curate here

Import pulls Site Surveyor and Site Survey Tech / Lead only — matching on role ILIKE '%Survey%' would make 8 schedulers and 8 reviewers bookable. OWEDB has no home lat/lon, so set a home base below or drive time can't be measured.
NameStateHome baseTimezone Jobs/dayMax drivePhoneStatus
Loading…

Default working hours

Set a weekly pattern effective-dated — changing hours adds a dated row, it never rewrites one

Changing hours adds a dated row rather than rewriting history, so a slot offered last month can still be explained. Times are local wall clock — they survive DST.

Hours in effect today one row per surveyor, resolved: the market that wins on priority today, and the week that market selects. Everyone keeps default hours; hours set for a market are an override on top, and each kind closes only its own kind. Earlier and future patterns are on the surveyor's own record — open a row.

SurveyorWeekBreakMarket today EffectiveStatus
Loading…

Temporary changes

Everything temporary, in effect or upcoming a read view over all three kinds — one-off day changes, surveyor absences, and market moves

SurveyorKindDatesDetailWhere it lives
Loading…
A one-off day change replaces the pattern for that single date and is set below. An absence over a date range is a blackout scoped to one surveyor — it subtracts from whatever hours they have, so the pattern stays intact. A market move is an assignment with a date range, and it changes which market's clock and centre their day runs on.

One-off day change different hours, or no hours, for a single date

One-off days already set last week onward — clearing one hands that date back to the recurring pattern

SurveyorDateHoursReasonSet by
Loading…

Move a surveyor to a market state or region, for a date range

A temporary move outranks the home market for its date range and then hands back automatically — the home assignment is left intact. Their working day starts from the destination market's centre and runs on that market's timezone, so sending a Phoenix tech to Houston gives a 7 AM Central start, not 7 AM Mountain. Setting a new home market auto-closes the previous home the day before this one starts.

Assignments a read view — assignments are made by the form above and ended by date, never deleted

SurveyorMarketTypeFromTo TimezonePriorityStatus
Loading…
Remove is gone on purpose (P3.1). It ran a hard DELETE, which destroyed the record that a surveyor had ever covered a market — and this table is effective-dated precisely so that a slot generated last month can still be explained. To end an assignment, set its To date using the form above; the row stays and greys out. Creating a home assignment still auto-closes the previous one.

Coverage state → market → survey tech base. A market spans one timezone — that's why El Paso and the Florida panhandle are their own

Loading…
A state-wide row is the fallback for anything in that state no region claims; it sits last in its group. Click a market to see who covers it and how it is configured. Offices are listed under the market they belong to.

Coverage map where we have configured coverage — not where work is

Configuration, not work. Shaded state = a market exists there. Ring = a market's centre. Pin = a base a survey tech reports to. No shape here means a job, a booking or a person, and the centre is neither a radius nor a day origin. About this screen has how coverage is actually decided.
Loading…

Bases without a position named, because a missing pin is a record gap and not an absence

Time off this app is the system of record — OWEDB has no leave table at all

Every “PTO” field in OWEDB means Permission To Operate (utility interconnection), not leave — none of them are wired to this. Only approved time off removes availability; pending never does.

Requests

SurveyorDatesKindReasonStatusDecided
Loading…

Service areas ZIP3 is primary; radius is a fallback and a ranking signal

We deliberately don't derive coverage from OWEDB's zip→office table: it's populated for only ~8,945 of ~22,000 ZIPs (CA has 10) and is empty for NY/IL/VA/MA/NJ/MD/ME/CT/VT. Since this serves all markets, coverage lives here. A state row is a fine start for a one-surveyor market.
SurveyorKindValuePriority
Loading…

Blackouts dates nobody is bookable — company holidays and regional closures

Leave To empty for a single day. A blackout removes availability for everyone it covers, whatever their working hours say — it is a closure, not a person's leave. One person's absence belongs in Time off, which needs approval and warns you about surveys already booked in the range; a blackout applies immediately and asks nobody.
ScopeWhenLabel
Loading…

Calendar book a survey, or narrow this tab to one project

Find it by OUR#, customer name or address, then pick a window.
No project loaded yet. Everything below is showing the whole team.
Every window here works on the route, not just on paper. The tech finishes their last job, drives over, and is at the door somewhere inside the arrival window — each chip is the whole window, not a start time — and can still reach their next customer inside the window that customer was given.

Who is available when bookable local hours per surveyor, after shifts, overrides, approved time off and blackouts

Every arrival window each surveyor has, and which are already taken. Click a free one to book into it. Name a project at the top of this tab and this narrows to the people who can actually take that job, with the drive time checked.

Tickets

Everything the team has raised, what was actually done about it, and whether it's finished. Anyone here can add one or move one along — you shouldn't have to ask for a status.

Auto-send to the customer send the booking link on its own once a project clears QC

“Cleared QC” is read as: the project is ACTIVE, it has a sale date, its survey is waiting to be scheduled, and no link has been sent and nothing booked for it yet. Turning this on still respects the email switch on Config — with email suppressed, nothing leaves either way.

Who would be sent, right now a preview — nothing is sent while this is off

OUR #CustomerAddressState Sale dateWould go to
Loading…

Day board every tech's day in one place — jobs, addresses, route and drive time

workable check it unreachable / over cap
Amber and red are computed from real drive time between consecutive addresses, not a gap rule — a red day contains a job the tech physically cannot reach. Map overview opens the whole route in Google Maps. Click a job to move or cancel it; reviewing a day records who cleared it, and the review lapses automatically if the day changes afterwards.

What's scheduled every survey on the calendar — filter by surveyor, market, state, status or date

Click a scheduled survey to open it. The detail opens over the list and the list does not move — the row you clicked stays where it is and is highlighted, so when you close it you are back where you were and a second click cannot land on somebody else's booking (#29). Move and Cancel are on the detail.
DateWindowOUR #CustomerMarketState SurveyorDrive inStatus
Loading…

Booked, but the project is in trouble surveys with a slot on the calendar whose project in OWEDB reads JEOPARDY or HOLD — call the sales rep and settle it before the slot reopens

Loading…
DateWindowOUR #Customer Project statusSurvey status in TapeState SurveyorBooking
Loading…

Waiting to be entered in Tape bookings live here first — ops reads Tape, so each one is mirrored by hand until a real integration exists

Open the Tape record, enter the survey as Scheduled with the date, arrival window and tech below, then tick it off. It's undoable from the list underneath, and a booking that later cancels comes back into this queue so Tape gets updated too.
The tick is your word; the check is separate. Ticking a row records who said they entered it and when. The app then re-reads OWEDB's copy of the Tape survey record for that OUR#, and a row reads VERIFIED only if that copy shows the survey scheduled. Anything else stays ADDED with the status OWEDB actually returned — including "not there yet", which is a normal thing to see while the sync catches up. Not verified never means Tape is missing it; it means the check has not seen it yet. Use Check Tape again on the row.
Survey dateArrival windowOUR #Customer AddressSurveyorStatusLink to Tape In Tape?
Loading…

Recently marked as entered a person's tick, plus whatever the check found when it re-read OWEDB

OUR #CustomerSurvey dateWindow Says they entered itWhenIn Tape?
Loading…

Bookings the sync could not place Tape holds these; the console would not guess at them — most are fixed in Tape, and the next sync closes them on its own

The hourly sync files a booking here instead of guessing, because a guess puts a real job on the wrong technician. Most of these are fixed in Tape, not here. Once Tape is right the next sync brings the booking in and closes the row itself — you only need to resolve a row by hand when the answer is that nothing is coming (a duplicate, a cancellation), or when you have done the fix and want it off the list.
Loading…

Outbound email the go-live switch — this is what decides whether real homeowners are mailed

Read this before changing it. off sends nothing at all — no sign-in links, no rep links, no homeowner confirmations; bookings still record normally. internal is testing mode: only @ourworldenergy.com addresses receive mail, and every suppressed message is recorded in Audit as mail.suppressed. on means real customers and outside reps receive real email. This screen is the only place in the app that can change it.

Scheduling rules what the offer engine is allowed to promise · these fields write the global scope

No changes.

Advanced every row as stored, and the raw setter — the escape hatch for keys the fields above don't know

Show all config rows and the raw key/value setter
A key nothing reads is a row that looks saved and does nothing — the original complaint on this screen. Anything not already in the table below, and not a field above, is queried before it is written. Security and governance switches are refused by the server in every scope, and the refusal is recorded.
ScopeKeyValueUpdated by
Loading…

Who can sign in fail-closed and invite-only — an @ourworldenergy.com address gets NOTHING until it's listed here

Listing an email that is already here updates their role rather than adding a second entry — the change is recorded in the audit trail, and the original grant's author and date are kept.
Two gates still protect this app, but the first one moved. OWE sign-in (ScaleKit → the company directory) decides who can authenticate; this list decides what they can do — and anyone not on it is refused outright, even with a perfectly good OWE login. Cloudflare Access used to be the front door and no longer is, so this list is now the only place a new person is let in. A surveyor login must be linked to its surveyor record — that's what scopes them to their own day.

What each role can see which tabs a role gets — the server decides this, the sidebar just follows

Hiding a tab is convenience, not the security boundary: every endpoint behind every tab re-checks the role itself, so a URL typed by hand still gets refused. A surveyor login is additionally scoped to its own record — that's what keeps a field tech out of the whole company's day.

Who actually signed in successes and refusals — the only way to see a person being turned away, since the directory holds no roster we can read

Loading…
WhenEmailResultWhy
Loading…

Current access

EmailRoleLinked surveyorAdded byWhen
Loading…

Audit trail append-only; every availability edit and booking action

WhenWhoActionEntityDetail
Loading…

Settings super admin only

— surveys on today's calendar
    — routes today that don't work as booked
      — live booking links expiring within 48 hours
      — bookings still to be entered in Tape

        Where to go next the four things this console is for

        Nothing on this screen changes anything — it is a read of four other tabs. Every number links to the screen that owns it.

        Dialog shell P0.1 — not used by any shipped screen yet

        Activity feed P0.2 — mock data; bound to no table yet

        Filter bar & refresh P0.3 — narrows a mock list; reads nothing

        Tones & formatters P0.4 — pure additions; replacing nothing yet

        Appointment detail P2.2a — opened by no shipped screen until Move lands beside it

        Pending visit detail P2.2a — a visit is not a booking; a different modal on purpose

        Ticket detail & intake P2.4 — the same function for a new ticket and an old one

        Surveyor record P2.5 — a renderer: caps with provenance, three days, hours history