← All white papersBuild plan · October 2026

The Admin Role on Microsoft 365

The daytime desk and the cash path each have their own plan. This one is the five small lists that let them hear each other: your hours, your owners, and the complaint that has to reach the invoice.

8 min read·Free to implement·Published by AI Pathway

Used by

  • Office Manager
  • Business Systems Analyst
  • Operations Manager

Build the daytime desk and the cash path from their own plans first. Then the gaps show up in a week: a customer who rang the after-hours line and the day line has two jobs, and a complaint taken at ten is a note nobody reads before the invoice flow runs at three. This plan adds three reads and one list a day, and nothing else.

In short

  • What this is

    A build plan for the virtual admin standard on Microsoft 365. Five lists and three small changes to flows that already exist in the desk and cash path plans.

  • The core rule

    A complaint taken on a call becomes a Holds row on the job id. The invoice and chase flows filter Holds on that job id first and stop on an open row.

  • What it does not do

    It does not hard-code business hours in a flow condition, and it does not hold a job, a call log or an invoice. Each half keeps its own.

  • The hard part

    Getting the after-hours line and the day line to run the same open-job read, and getting a spoken complaint into a row the invoice flow filters on.

Take the spec to Claude, ChatGPT or Copilot. The sentence to paste is one click away.

Want the whole thing by email?

This paper, plus the rest of the library. One click to stop them.

1. Before you start

Read the virtual admin build standard first. It defines its objects, and the lists below are those objects with SharePoint types on them. Shared conventions are in building the standards on Microsoft 365.

Get both halves running from their own plans: the daytime desk and the cash path. This plan does not replace either. It adds a read of Hours to the call flow, a read of Holds to the invoice and chase flows, and one flow at the close.

Then fill Hours, Holidays and Owners. Holidays is the one people forget: a public holiday you close on is after hours, and a flow that only knows weekdays will answer it as the day desk.

One thing to check before you build: do both of your lines call the same caller lookup?If the after-hours line writes jobs through one flow and the day line through another, the first fix is to point both at the daytime desk plan’s Flow 1.

2. The lists, with their columns

For your developer. Show the fields for your developer
Site: VirtualAdmin

LIST  Hours                 (one row per open day, 0 = Sunday)
  Weekday         Number          indexed, UNIQUE, REQUIRED
  Opens           Text            REQUIRED. 07:00
  Closes          Text            REQUIRED. 17:00

LIST  Holidays              (one row per day closed. Closed is after hours.)
  ClosedOn        DateTime        indexed, UNIQUE, REQUIRED
  Reason          Text

LIST  Owners                (one row per area. A person fills this once.)
  Area            Choice          UNIQUE, REQUIRED. desk | complaint | invoice
                                  | chase
  Owner           Person          REQUIRED

LIST  Holds                 (one per complaint or dispute taken on a call, or a failed write)
  JobId           Text            indexed, REQUIRED
  CallId          Text            the call it was taken on, if any
  Reason          Choice          REQUIRED. complaint | dispute
                                  | invoice_write_failed
  Owner           Person          REQUIRED. from Owners, never typed
  Status          Choice          indexed. open | closed
  ClosedBy        Person

LIST  DailyLists            (one per day, published at the close)
  ListDate        DateTime        indexed, UNIQUE
  Lines           Note            job id, reason and owner for every open hold and callback
  PublishedAt     DateTime

Nothing in this site holds a job, a call log or an invoice. Each half keeps its own; this site only holds what one half has to tell the other.

Holds.JobId is indexed because the invoice and chase flows filter on it every run. DailyLists.ListDate is unique, so a second list for the same day fails to save.

3. Every rule, and what enforces it

The ruleEnforced byHow
The business's own hours decide which desk answersHours and HolidaysThe call flow reads both at the time of the call. No flow has a condition with a time typed into it.
A customer who rings both desks has one jobThe daytime desk plan's Flow 1Both lines call the same open-job lookup before anything is written, so the second call attaches to the first job.
A complaint taken on a call stops the invoice and the chaseHolds.JobId and Holds.StatusThe call flow writes a Holds row when the caller complains or disputes. The invoice and chase flows filter Holds on the job id and stop on an open row.
The job-done message and the invoice come from the same eventThe job_completed triggerThe desk's status message and the cash path's invoice flow both trigger on job completed and read the job by the id the event carried. Neither searches by name.
Every contact is on the job's timelineNotes on the job, in the job systemEach flow, in both halves, writes its note to the job by id. Nothing keeps a separate contact log in SharePoint.
One list for the owner, with an owner on every lineDailyLists.ListDate and Holds.OwnerOne flow at the close reads open Holds and open Callbacks and writes one row. Owner is a required Person on both lists, copied from Owners or the Roster.

4. The three changes and one flow

For your developer. Show the fields for your developer
CHANGE 1  The call flow                (both lines)
  add      read Hours and Holidays at the time of the call
           pick the desk from them
           call the daytime desk plan's caller lookup
  add      complaint or dispute -> write Holds
             (JobId, CallId, Reason, Owner = Owners[complaint])

CHANGE 2  The invoice flow             (cash path, Flow 3)
  add      before anything: filter Holds on the job id
             open row -> stop, note it on the job

CHANGE 3  The chase flow               (cash path, Flow 4)
  add      for each overdue invoice: filter Holds on its job id
             open row -> skip

FLOW 4    End of day                   (schedule, at Closes)
  logic    read open Holds and open Callbacks
           write one DailyLists row: job id, reason, owner
           send it to the owner
  never    a second list, or a line with no owner

Three reads added to flows that already exist, and one new flow. If the change to your build is bigger than that, one of the halves is not running to its own plan yet.

5. The order to build it in

  1. Run the daytime desk and the cash path from their own plans until each passes its own pass test.
  2. Fill Hours, Holidays and Owners. Add Change 1 and ring at a time either side of closing and on a holiday.
  3. Point both lines at the one caller lookup. Ring after hours, then in the morning, and confirm one job.
  4. Add Changes 2 and 3. Complain on a call, complete the job, and confirm no invoice.
  5. Add Flow 4 and read the first list with the owner.

6. Three traps specific to this build

Business hours in a flow condition

It works until the first public holiday or the first late night. Hours and Holidays are lists the business can change without opening a flow.

A complaint written as a note on the job

The note is on the right record and nothing reads it. The invoice flow filters Holds, so the complaint has to be a Holds row.

A list from each half

The desk sends its callbacks and the ledger sends its holds, and the owner reads one of them. Flow 4 reads both and writes one row.

7. Where the automation stops

  • Every complaint and dispute, by the owner in Owners.
  • Every line on the end-of-day list, by its owner.
  • Setting Hours, Holidays and Owners.
  • Being the person the customer knows.

The pass test. On your own number, job system and ledger. Ring after hours about a new problem, then ring from the same phone in business hours and complain about the work. Mark the job complete and let the close run. The job system must hold one job with both calls noted on it. A Holds row must name the complaints owner. The ledger must hold no invoice for the job and nothing may have been chased. DailyLists must hold one row for the day, with the complaint and its owner on it.

Related reading