BlackStone Mechanical
OFFICE PORTAL
BILLING DEADLINE
—
Checking...
No projects
Checking sign-in status...
Construction Project Dashboard
—
Company performance and charts
Company Performance Viewing:
ⓘ
This Month Billing (gross, QuickBooks)
—
Not read yet: click here to read the QuickBooks invoices
ⓘ
This month margin
—
Margin %
ⓘ
Backlog
—
Contract + Approved COs − Billed to Date
Sales, margin and holdback by period (by fiscal quarter or year, by PM and department; open to read it)
Not read yet.
ⓘ
This Month Costs
—
Job Profitability, else QuickBooks cost lines + posted hours
ⓘ
Portfolio margin %
—
From QuickBooks Job Profitability
ⓘ
Holdback still owed to us (to date)
—
Not read yet: click here to read the QuickBooks invoices
ⓘ
New Projects
—
This period
ⓘ
Completed Projects
—
This period
ⓘ
Overdue Billing
—
Past deadline, not billed · as of today, not the month selected above
ⓘ
Missing Estimate
—
Projects with no estimate on file (open and closed)
Register items overdue / due this week
…
Not read yet.
12-Month Billing & Margin % Trend ● Actual   ○ - - - Estimated (hover for details)
Backlog Over Time
Effective contract value (base + approved COs, as they stood each month) minus cumulative billed-to-date · currently-tracked projects only
Biggest Spend on Subcontractors
QuickBooks cost lines tagged "Subcontractor" in the Vendor Registry
Busiest General Contractors
Total billed to date, active projects only
PM
GC billing portal
Status
ⓘ Checks: Intake imported · Estimate loaded · In QuickBooks
Go to Admin Settings to import your project list.
Invoice Management
Assign to project · Confirm · Flag for review
ⓘ
0
Confirmed Invoices
ⓘ
0
Needs review
ⓘ
0
Action Required
ⓘ
0
Total loaded
0 selected
Invoices already in SharePoint load automatically when you sign in.
To look for new emails in admin@blackstonemechanical.ca, use Invoice inbox scan in Admin Settings (Invoices)
Flag Invoice for Review
Tick the reasons. They are saved with the invoice in SharePoint.
Other notes
Data Source
Billing Worksheet
Select a project to begin
Select PM
All
Harry
Marcel
Gord
Ross
Jason
Shawn
Select Project
Select a project from the list to open the billing worksheet.
Project Hub
Select a project to begin
Select PM
All
Select Project
Pick a project on the left, or see your projects below.
Company Schedule
People: where everyone is planned and has been, by day. Jobs: every open job, the next few weeks (read-only). Map: where the jobs are. Attendance and School: only for the roles that may see them.
Project Performance
Select a project to review its performance
Select PM
All
Select Project
Select a project from the list to review its performance.
GC Progress Billing Breakdown
Select a project to set up or download its GC billing report
Select PM
All
Select Project
Select a project from the list to build or generate a billing report.
HR
People, hire dates, probation and review months, wages, and the review form. HR, admin and accounting only: the server checks your role on every read and save.
Tickets
Certifications copied from SiteDocs: who holds what, and what expires. SiteDocs stays the master for expiry alerts.
Insurance policies
The company's policies and when each expires. Admin and accounting only. Renewal reminders appear on the To-do 60 days before a policy ends.
Vehicles
The company fleet: who drives what, leases, mileage and the best time to replace each unit. Everyone sees who has which vehicle; lease costs, book values and the replacement calculator are for admin, accounting, HR and the Fleet editors (the server decides).
To-do
What needs doing, worked out from the live data each time: billing first. An item clears itself when it is done.
Accounting & audit
This month's claims, billing reconciled against QuickBooks, cost and margin findings, the context behind any flagged job, and the data export.
1. Month claim status
2. Billing reconciliation
5. Data export
6. QuickBooks Time hours with no job
Time entries whose QuickBooks Time jobcode names no job in the portal, one line per jobcode. Say which job a jobcode is, or mark it as service work so it stops showing here.
Reads the unlinked entries and the job list. Writes nothing.
7. Wrong job — fix in QuickBooks Time
Time entries clocked to the wrong job: each with the person, date, hours, note, the job it is on and the job it belongs on. Move each one in QuickBooks Time (payroll posts from there).
Reads every waiting time entry. Writes nothing.
Roadmap
Planned and in-progress changes to the Office Portal and Field Portal. Gordon's notes are read by the developers and never changed by them.
Admin Settings
Company settings, people and the data tools. Pick a tile: it opens in the panel beside the tiles. You see only the tiles your role may use.
Status
Sign in to access inbox scanning and SharePoint data
Not signed in
Tools — admin only; click a group to open it
QuickBooks — is the synced data right, and the Web Connector that fills it
QuickBooks check — is the synced data right? Compare does not change data
1. Health today is QuickBooks data flowing? Hover or click a word for its reasons
2. Monthly compare after month end, once the overnight run has finished
3. Needs your decision the differences the last Compare could not explain
The lines to decide show here after Compare everything.
4. Other compares Previously billed, contract and change orders, one report file
Two other Compares, each with its own Compare button on its own page: Previously billed, before switching where previously billed comes from to QuickBooks; Contract and change orders, when a job's contract or change orders in QuickBooks may differ from the portal or Epic.
Compare a QuickBooks report with the synced lines
Choose a Transaction Detail by Account, Time by Job Detail or Job Profitability Summary file. It is compared with what the sync stored for its own days and saved nowhere. How it works: 8. Help and troubleshooting.
Nothing chosen
5. Where the portal reads QuickBooks from rare: build the synced lines, the switches, the way back
Opens Build the synced cost lines, the costs and bills switches, and the one-click way back to the uploaded data. Building does not need Compare first; switching on does.
6. History pull and re-pulls rare: progress, requests per run, the hours re-pull, invoice history
July 2025 to September 2026, fetched by the Web Connector by itself, a few requests on each full run, for the comparison; and the hours are pulled again after each pay day.
7. Upload a report by hand fallback, only if the Web Connector stops
Not read yet: what a file does depends on where job costs come from (Admin Settings > QuickBooks > QuickBooks check).
You no longer need to upload these each month: the Web Connector syncs QuickBooks. Use this to bring in a report while a switch is back on the uploaded data.
  1. Job Profitability Summary. Compared with the synced months and saved nowhere. Saved only if that switch is back on the uploads.
  2. Transaction Detail by Account. Compared with the synced lines for its own dates and saved nowhere; the result and a download appear above. Saved only if costs are back on the uploads.
  3. Time by Job Detail (posted hours). Compared with the synced hours and saved nowhere. Saved only if that switch is back on the uploads.
File names and how it works: 8. Help and troubleshooting.
Job Profitability Summary, Transaction Detail by Account, Time by Job Detail
Upload required
8. Help and troubleshooting how the check works; clear this browser's copy
Does the sync give what the uploads gave, for every job and month from June to September 2026?
How this works
Monthly compare. Every uploaded Transaction Detail line is matched with a synced QuickBooks line on job, type, date, number, name and amount to the cent (two identical lines are two lines). Each line left over gets one reason: later (entered or changed in QuickBooks after the upload), changed (a correction), gone (voided or deleted), stale copy (the upload kept an old version), other name or account, trade tag (only the upload tagged the vendor), or unexplained. Every cost already billed on a T&M claim must still be recognised. Hours and Job Profitability are compared where the history pull holds an answer; elsewhere they say "not fetched yet". The history pull is started once below and the Web Connector fetches one month or fortnight on each full run by itself; what it fetches is kept for comparison, and was put into the posted hours and Job Profitability on 23 Oct 2026 by Apply the history pull (under Build and switch). Each area gets MATCHED, ALL NAMED or NOT READY.
Compare one report file (4. Other compares). A Transaction Detail account with a damaged row (no date or no amount) or lines that do not add up to its own Total row is left out of the comparison, and the result says so. Time by Job Detail and Job Profitability are compared because their switches read the synced rows; if one is switched back to the uploads, a file for it is saved instead (7. Upload a report by hand).
File names (4 and 7). The portal recognises each report by its file name, so keep the words "Profit", "Transaction" or "Time" in it. Name a Job Profitability Summary with the ONE month it covers, e.g. "Job Profitability Summary - September 2026.xlsx". A one-month file whose name gives a date range is refused; use the multi-month export for a range. Re-uploading a month replaces that month; other months are kept. Hours only appear once payroll has posted them, so they trail the calendar. That is expected.
Only if this page shows figures you know are old. Afterwards the page reloads QuickBooks data before you can compare.
QuickBooks sync — the Web Connector and the synced QuickBooks lines
Synced data consistency
Reads the last 28 days of synced lines once: does every transaction balance, and is any line stored twice? Read-only; a few minutes.
How this worksQuickBooks posts double entry, so a transaction's lines net to zero: one that does not has a line missing or doubled. A line stored twice is one an older sync run left behind, or one repeated inside a transaction that does not balance. A transaction with a repeated line gets a Remove the repeated line button; it asks first, and only the synced copy changes, never QuickBooks.
New jobs in QuickBooks
Compare QuickBooks invoices with Epic
for every job: invoices dated in that month against Epic's month-end. Read-only.
Repair
one row per QuickBooks invoice, by job (needs the BSM_QBInvoices list). Safe to run again; it only re-derives.
Contract and change orders: QuickBooks vs portal vs Epic — Compare does not change any contract or billing figure
Every open job: the QuickBooks estimate and its "CO n" lines against the portal's contract and change-order register, and Epic. Change orders are matched by CO number; each difference is named, with an Open link to the CO document.
Reads the QuickBooks estimates, the projects, the change-order register and its filed documents. Writes nothing but your decisions; never changes a contract.
Previously billed: QuickBooks vs Epic vs the portal — Compare does not change any billing figure
Before previously billed can come from QuickBooks instead of the project record: for every job and month from June 2026, do QuickBooks invoices, the Epic list and what the portal recorded agree?
How this worksEach job and month gets QuickBooks gross (before holdback and GST; credit memos taken off; holdback releases kept apart), Epic's billed figure and the portal's recorded month, plus one row for the opening to 31 May 2026 and one for the job to date. Within $1 is matched. Every other difference needs a named reason (an invoice dated early next month, a holdback release in Epic's month, a credit memo, not recorded in the portal while running in parallel, recorded in the portal but not yet invoiced, an Epic month not imported, an invoice on no PO) or your "Accept: QuickBooks is right". Some things are NOT READY whatever is decided: a sub-job invoice filed under its parent, QuickBooks equal to Epic less the holdback, an invoice with lines the portal did not understand, and a job whose billing before June QuickBooks does not hold yet. The result is MATCHED, ALL NAMED or NOT READY. Previously billed is still read from the project record. The switch at the foot of this tile moves it to QuickBooks only when the saved verdict is MATCHED or ALL NAMED, the opening before the synced invoice list is covered for every job and sub-job invoices are on their own jobs.
Reads QuickBooks invoices, the Epic history, the claims, the closed months and the projects. Writes nothing but your decisions.
Uploads from accounting — Epic list, Vendor Registry
Epic Final Invoicing List
The monthly Excel workbook from accounting, with one tab per month.
How this worksThe newest month tab that contains projects is read. You see every new, changed and removed project before anything is saved. Projects missing from this month's tab are only closed if you tick them.
Last import not checked yet (it is read from the audit log once you are signed in)
Not checked
Vendor Registry — auto-categorizes incoming invoices by trade
Upload the vendor list (BSM_Vendor_Registry.xlsx), or download it, edit it in Excel and upload it back.
How this worksVendors in the file are added or updated; vendors not in the file are kept. The download is read from SharePoint at the moment you press it; leave its last column (VendorKey) as it is. Review and edit vendors changes one vendor at a time and re-tags its QuickBooks lines straight away. Invoice emails are matched to vendors by sender domain and tagged with trade category, cost type, and QuoteToMe status when the inbox is scanned.
No vendor registry loaded yet
Upload required
Invoices — the invoice scanner and reader
Remembered senders
The senders the invoice scanner has seen, and the projects their invoices were confirmed to. This is history only: a supplier's past jobs never choose a job for a new invoice. Forget a sender here if it was learned wrong.
HIGH link accuracy
Read-only: of the links marked HIGH, how many a PM confirmed as linked and how many a PM moved, per week.
Backlog vs QuickBooks
Read-only: every invoice on file against the QuickBooks data, by what QuickBooks shows for it. Admin, PM and accounting.
Archive invoices already in QuickBooks
Archives the invoices a PM has confirmed that QuickBooks already shows. It asks first, and saves to SharePoint.
Invoice inbox scan
The hourly scan of admin@ for new invoice emails: when it last ran, what it saved, and whether the mailbox works. Run the scan now does the same scan once. Invoices it finds are on the Invoices page.
Not read yet. Press Refresh status.
File saved invoice PDFs
Moves saved invoice PDFs out of Invoice Records > Pending Assignment, using the job QuickBooks has them on.
How this worksA saved invoice PDF only leaves Pending Assignment when someone confirms its job in the portal, and jobs are assigned in QuickBooks, so most never move. The dry run looks up each pending invoice's number in QuickBooks (the bills the Web Connector has synced, and the Web Connector's lines read a day at a time), with the same rules the Invoices page uses: the number must match and the vendor must agree. One QuickBooks job and an amount that agrees (or no amount to compare) means it can be filed under that job; an amount that disagrees, or a bill on several jobs, is left for a person. The job the scanner guessed is never used. Archived rows (statements, not invoices) go to an Archived folder, and invoices a person confirmed whose move failed are moved again. Apply moves only the groups you tick: each row is read again first, and a filed row gets the QuickBooks job and one Notes line but is NOT confirmed. Download CSV saves the full list. The Web Connector lines are read a day at a time; the progress bar counts the days.
Reads every invoice and the QuickBooks bills the portal holds (synced by the Web Connector). Writes nothing.
Company and people — company details, users and roles, Field Portal access, trade roster
Configuration
Company and province are fixed. The labour rate comes from each project's estimate (see below).
The labour rate is set per project by the estimate import.
How this works The labour rate is set per project by the estimate import — the estimating workbook generates it, and importing an estimate updates that project's rate.
$39/hr is only a placeholder for projects with no estimate rate yet, and any figure calculated on it is marked ⚠ $39 placeholder where it appears. To correct a project's rate, re-import its estimate.
Users & Permissions
Assign each person's role here.
How this worksAll users sign in with their BlackStone M365 account. Assign roles here. Admins have full access including database management and project imports. PMs and Coordinators have full access to billing and forecasting. Read-only sees what a PM sees and changes nothing. HR edits the trade roster and sees no financial pages. Accounting sees what a PM sees except the Roadmap, and saves only billing claims (marking an invoice sent) and invoice-match decisions. Fleet Manager sees and edits only Vehicles (every tab, with the vehicle costs) and Insurance: no projects, billing, company figures, HR or Admin Settings. Anyone with no role here is read-only. These are screen rules, not locks: SharePoint itself still lets any site member edit the lists.
Not loaded yet — press Refresh to read the current users.
Add New User
Sign-ins — who opened the portal, and alerts for the people you choose
Each sign-in is recorded once per browser session: who, their role, when, and the first page they saw. Recording began on 10 Oct 2026.
Last seen, per person
Everyone with a portal role, plus anyone else in the audit log: their last sign-in, and the last thing the audit log shows them doing (which goes back further than sign-ins).
Not loaded yet — press Last seen.
Sign-in history
Not loaded yet — press Sign-ins.
Tell me when these people sign in
You get one email when someone on your list signs in, at most once per person every 4 hours. Your list is yours alone: other admins do not see it, and the people on it are not told.
Not loaded yet — press Refresh my list.
Field Portal Access
Who can see which job in the Field Portal
Project access lasts for the life of the job. Global sees every project. Every change is checked by the server (company email, a real project number, no duplicates) and recorded in the audit log.
Not loaded yet — press Refresh.
Grant Access
Field Portal Access from Timesheets — adds access rows for people who work a job; never removes any, never Global
When this is ON, people who log time on a job get Field Portal access to it, checked once an hour.
How this worksEach hour, when this is ON, a person who has matched time on a job, is on the trade roster with a company email and has a Microsoft sign-in gets a Field Portal access row for that job if they have none. A row alone does not open anything: they also need SharePoint permission on the Operations site. Use Preview now to read what it would add before turning anything on; the preview writes nothing.
Not loaded yet — press Refresh to read the switch and the last run.
Trade Roster — classifies employees by trade for labour hour breakdowns
Lists everyone who logs hours, with their trade, so labour can be split by trade. This list is read-only. Add, rename, change trade or company email, and mark as left on the HR page.
No employees loaded yet.
Checks — read-only: nothing here changes data
List Health Check — read-only checks for problems that break things quietly. Nothing here changes data.
Looks for problems in the SharePoint lists that break things quietly.
How this worksLooks for the things that break quietly: lists approaching SharePoint's 5,000-row limit (the failure that stopped the labour sync for 17 days), duplicate people on the roster, change orders carrying a retired status that silently drops them from billing math, projects with no estimate imported, and learned task mappings pointing at tasks that no longer exist. Nothing here changes any data.
Click Run to check the lists. Reads only — takes a few seconds.
Labour Sequence Check — read-only. Nothing here changes data.
Measures, per job and trade, whether timesheet dates follow the order of the estimate lines.
How this worksMeasures, per job and trade, how often an earlier timesheet sits on an earlier estimate line, using only entries a person or a keyword placed (never the AI's). Where date order follows build order a fill by sequence could place the entries with no notes; where it does not, it would only be guesswork. Takes a minute: it reads the actuals, the budget lines and the review list.
Click Measure. Reads only.
Unallocated Labour by Trade — read-only. Nothing here changes data.
Hours waiting in the review queue with no field notes, by job and by the person's trade.
How this worksWith no notes nothing says which estimate line the work belongs to, so none is chosen: these hours are shown as unallocated, split by whether the job has an estimate.
Reads the review queue and the task budgets. Reads only.
Estimate Import Check — read-only. Nothing here changes data.
After an estimate is imported, checks that SharePoint holds what the estimate says. Runs automatically on every import (for that job, in the import's own message); use this to re-check jobs.
How this worksAfter an estimate is imported, reads each job and says whether SharePoint holds what the estimate says: the task budgets, labour pointing at keys with no budget, the worksheet's previously billed against what was billed (a low one means the next claim bills the same work again), the committed subs, and the contract value. Leave the box empty for every job with an estimate, or type PO numbers.
Reads every job that has an estimate. Writes nothing.
Submittals in review: stage vs dates vs verdict
Lists every submittal out with the GC or consultant, its dates and verdict side by side, and flags the ones that need a look.
How this worksLists every submittal whose stage says it is with the GC or consultant, with the date it was sent, the date it was resubmitted, the review outcome and the approval date side by side, and how long it has been out (in working days, from the resubmission if there is one, otherwise from the send date: the same clock as the Registers tab). Flags: has a verdict but stage not moved (the consultant has answered, so the stage needs moving by hand), no send date, and older than 60 working days. These are the rows the weekly overdue-submittal email could chase wrongly. Each job links to its registers, where the stage is changed. Download Excel saves the same list. This card writes nothing.
Reads every submittal. Writes nothing.
Overhead Time (Admin / Break / Shop / STAT)
Hours logged in QuickBooks Time to Admin, Break, Shop and STAT (not to a job), per person per month. Updated hourly by the QuickBooks Time sync. Use it to spot trends, e.g. shop time creeping up.
Not loaded yet — press Refresh Overhead Time.
Estimates — batch import: dry run, then apply
Estimate Preflight — check many estimate workbooks at once. Nothing here changes data.
Checks many v4.94 estimate workbooks at once and says, for each, whether an import would go ahead. Runs automatically on every import; use this to check workbooks before importing.
How this worksPick the v4.94 estimate workbooks. For each one this reads the PO the workbook states, finds that job in the portal, and says whether an import would go ahead, would replace an estimate already on file, or is refused and why. Older formats are converted to v4.94 first. It imports nothing.
Choose files to check them. Reads only.
Batch import: dry run — Applying comes next; this screen changes nothing until you press Apply ticked imports.
Pick several v4.94 estimate workbooks to see what a batch import would do with each, then apply the ticked ones.
How this worksPick several v4.94 estimate workbooks. They stay in this browser. For each one this finds the job its PO names, reads that job's billing and the import log, and says what a batch would do: Import, Skip (this exact file was already imported) or Refuse, with every reason and the figures it compared (previously billed on the worksheet against what was billed, contract against bid, committed subs that would be held). Refused rows are locked. The dry run writes nothing. Then "Apply ticked imports" (below the table) imports the ticked rows one at a time, checks each again first, reads each job back and logs it in BSM_ImportLog; it stops at the first file that does not save or read back exactly.
Choose the v4.94 workbooks above. They are read in this browser and not uploaded. Reads only.
Maintenance — SharePoint lists, unlinked hours, review queue, AI connection, audit log
Database Management
For troubleshooting only. Normal work saves automatically. Ask an admin before using these.
Reload every list re-reads everything. For the invoices alone, use Reload invoices on the Invoices page.
Restore estimate fields from the saved estimate
Puts back the estimate columns (budgets, rates, subcontracts, format) that the Epic list import blanked on 8 and 13 Oct, from each job's newest saved estimate.
How this worksEvery estimate import also saves the estimate as a snapshot. Preview reads the snapshots and the audit log and lists, per job, the columns it would put back, worked out by the same rule the import uses. A job is refused when its newest snapshot is not its last import, when a line of the snapshot is no longer on the job, or when its estimate was removed. Restore writes only those columns on the ticked jobs, reads each one back and records it in the audit log; Undo puts the old values back. It is not a re-import: billing, committed subs and schedules of values are not touched.
Reads the saved estimates and the audit log. Writes nothing.
Restore billing history from the close records
Puts back the months recorded as billed that the Epic list import blanked from each job's billing history on 8 and 13 Oct, from the records each close left.
How this worksEvery Record as billed wrote a line in the audit log (the month, the amount to the dollar, the new previously billed) and closed the month's billing record (the amount to the cent). Preview reads both, and any later correction of previously billed, and lists per job the history now, the rebuilt one and every source, with a link to each billing record. A job is refused when the sources disagree, with the reason. Only months the history lacks are added; an entry already there is never changed. Restore writes only the billing history of the ticked jobs, reads each one back and records it in the audit log; Undo puts the old history back. Previously billed, the billing records and the claims are not touched.
Reads the audit log and the billing records. Writes nothing.
Record last month as billed
Records a month as billed for open jobs where Epic and QuickBooks agree, so the next claim starts right. Preview lists them with the QuickBooks invoice to open, and the jobs left out with why. Ticked jobs are recorded as Record as billed would.
Reads the open jobs, Epic, QuickBooks and the billing records. Writes nothing.
Billing history from GC draw breakdowns
Rebuilds a job's past months from the GC's monthly draw breakdown workbooks in its Internal/Billing folder, checked against the schedule of values, the change orders and QuickBooks. Preview shows every month and line against what the portal holds, with a link to each draw.
Pick the job, then Preview. Reads the job's Internal/Billing folder, its records and QuickBooks. Writes nothing.
Review queue: archive rows that do not belong
Archives the rows that do not belong in the labour review list, which is past SharePoint's 5,000-row limit.
How this worksThe labour review list is past SharePoint's 5,000-row limit. Three kinds of row should not be in it: entries on an overhead jobcode (Admin Time, Break, Shop Time, STAT), whose hours belong in the overhead list; entries still waiting on a job that is closed; and open entries with no field notes. Preview counts them by cause and hours. Archive adds any overhead hours not yet in the overhead list (an hour already there is never added twice), copies each row to the review archive, reads the copy back, and only then takes the row out of the live list, 150 rows per press. Archive all repeats that, reading the list again before each batch, until the ticked causes are empty, a row fails, or you press Stop. The status bar shows the progress.
Not counted yet · press Preview to count the rows to archive.
Reads the review list, the overhead list, the job list and the archive. Writes nothing.
AI Assistant connection
Checks that the AI Assistant can answer. The key is held on the server, never in your browser.
Audit Log
Permanent record of every significant action — who changed what and when, newest first, a week at a time. Old rows move to the audit log archive every hour, so the live log stays under SharePoint's 5,000-row limit; "Older" reads both.
Press "Show this week's actions" to read recent activity and the archive's state.
Rarely used — tools to retire once their dry run shows nothing left to do: repair shared PDFs, invoice folder names
Invoice folder names
Takes contract dollar figures out of Invoice Records folder names, and points invoice rows back at their PDFs.
How this worksInvoice Records folders were named "{PO} - {job name}", and some job names carried the contract figure typed into the Epic list. New folders no longer get it. The dry run lists every folder with a "$" in its name, the name it would get (the same rule that took the figures out of the job names), and how many invoice rows link to a file inside it by its folder path: those links break when the folder is renamed, so Apply rewrites them. A folder whose new name another folder already has is refused. Apply renames each ticked folder, reads the name back, then gives each of its rows its file's new address (the short link when the address is too long). If a row fails, the folder stays renamed and every file keeps its id: Relink rows finds each file by its id and fixes the link. Relink rows is safe to press any time; Check writes nothing.
Reads the Invoice Records folders and every invoice row. Writes nothing.
Relink rows Points each invoice row back at its PDF when its stored link no longer matches where the file is. (writes nothing)
Repair shared or mismatched PDFs
Gives invoice rows whose saved PDF is another email's their own PDF back, and files it where QuickBooks has their own invoice.
How this worksUntil 14 Oct the Scan inbox button saved a sender's same-day attachments under one file name, each replacing the last, so several emails ended up pointing at one PDF that is only one of them. The same scan could also save an email over another email's row, and the PDF reader then kept the other email's reading on it. On 13 Oct, File saved invoice PDFs filed some rows by those readings. The dry run lists every row affected, what its OWN invoice number is (from its subject, with its own sender), where QuickBooks has that invoice, and whether the 13 Oct filing put it there. Apply, for the rows you tick: saves the row's own attachment again from its email (a new file, never replacing one), moves it to the job QuickBooks says (or Overhead, Archived, or back to Pending Assignment when that is not known), takes the other email's reading off its Notes (one Notes line keeps what was taken off), and has the PDF reader read the row again. Each row is read again first and left alone if it changed since the dry run. A Confirmed row's job is never changed; when QuickBooks disagrees it is listed for a person. Nothing is confirmed and no file is deleted.
Reads every invoice and the QuickBooks bills the portal holds (synced by the Web Connector). Writes nothing.
Upcoming holidays and billing deadlines
AI Assistant
Answers questions about the project open on the Billing Worksheet.
How this worksSees: the project open on the Billing Worksheet, plus counts of projects and invoices. Does not see: other projects' figures, holdback, labour forecasts or the invoice list. Check any number against the page it comes from.
Hello — I'm the BlackStone Mechanical billing assistant. I can answer questions about the project open on the Billing Worksheet. What do you need?
Settings
Your sign-in and personal choices
Microsoft 365
Not signed in
Use the Sign in / Sign out button in the top bar.
Your saved choices
Not read yet.
Company settings, the trade roster and the audit log are on Admin Settings.
Epic Final Invoicing List — review changes before saving
Nothing is saved until you press Save these changes
0
New Projects
0
Changed
0
Removed
0
Unchanged
Status PO# Project Name PM Contract Previously billed This month GC billing portal
Saving will write 0 projects. Existing check states (estimates, QB reports) are kept.
QuickBooks — New PO#s Found
These PO#s appeared in a QB upload but don't match an existing project
0
Check the ones that are real projects — they'll be created as minimal entries, then filled in automatically (PM, contract, GC billing portal) the next time the Epic Final Invoicing List import includes that PO#. Uncheck and use "Not a Project" for anything that isn't.
PO# Job Name (from QB) GC Cost Revenue Found In
Nothing is saved until you choose. "Not a project" is remembered on this computer only.
Remembered senders
Review Estimate Import
Confirm the parsed data before writing to this project
Line Items — confirm these match your estimate
Once confirmed, this estimate is saved to the project.
Record this claim as billed
Adds this claim to Previously billed and starts next month's worksheet.
This action:
  • Saves this month's worksheet to SharePoint as a record of the claim
  • Moves each line's CTD % into Last claim %, ready for next month
  • Adds the amount above to Previously billed on this project
  • Sets this project's Epic "This Period" figure to $0 until the next Epic import
This cannot be undone from the app. If the amount is wrong, ask an admin to correct Previously billed.
Split this PDF by invoice
Reassign Invoice
Move this invoice to a different project