Signed-in devices keep working for 7 days without internet.
Daily Audit Report
Open this in a browser to see the figures
Your phone is showing a quick preview, which is not allowed to run the code that fetches the figures. The file itself is fine — it needs a real browser.
On iPhone: tap the share icon (the square with an arrow) at the bottom, then choose Open in Safari or Open in Chrome. On Android: tap the ⋮ menu and choose Open in Chrome.
Saving the file to your phone first, then opening it from Files, also works.
Daily Audit Report
Retail Stores · Data cut-off
Prepared by
Auto-save on☁ Cloud off
View-only copy. Figures come from the audit team's shared sheet. Press 🔄 Refresh data for the latest, including any corrections made to earlier days.
Checklist
Score period
01Business Summary
02Audit ComplianceN/A rows are excluded from that store's score
03Cumulative Report Card—
Recurring Failuresmisses ÷ days the rule applied · in selected period
04Audit ObservationsPick a scenario, set the status, add detail
Observation
Status
Detail / stores
05Damage Verification
Store
Damage %
Evidence
Pictures
Status
06Corrective Actions
Action
Site
Severity
Owner
Raised
Due
Age
Status
07Sign-off
Audited by
Acknowledged by the client
Recorded when the manager or owner confirms they have seen the report.
It is a record of what was said, not a second signature.
🔒 This day is signed and locked. Nothing on it can be
changed until it is unlocked, and unlocking is recorded.
Clear this device and download again?
Set up this server
This creates the first administrator — you. It works once, and stops
working the moment your account exists.
Choose a new password
This link works once. Pick something you have not used elsewhere — at least
ten characters.
Items in “”
📷 Evidence picturesHeld on this device, and on the server when you are signed in
Pictures are shrunk on the device before they are
stored — a camera photo of several megabytes becomes about 120KB, which is plenty for an
audit and small enough to keep years of them. They are attached with the + beside a damage
row or a corrective action.
⬆ Import figuresNothing is written until you have seen exactly what changes
1 · Where the figures come from
Select the block in the ERP, copy it, and paste it here. A table copied from any screen, a CSV, or an Excel export all work.
or
2 · What each heading means
Matched automatically where the names are recognisable. Anything left on ignore is not imported. Mark one column as which site the row is for, and optionally one as date to bring in several days at once.
Columns
Rows
3 · What will change
⚑ Corrective actionsNothing closes itself — one good day is not a fix
💬 Share on WhatsApp
WhatsApp does not allow a web page to send on its own, so this prepares everything and hands it over. On a phone the picture goes straight into WhatsApp; on a computer, save the picture and attach it — the message is already written.
Send to
Send this report by email?
Sync now?
Which sections to print?
The heading, score cards and footer are always included.
Save these changes?
The report and the dashboard will be rebuilt with the new setup. Saved daily figures are not deleted.
⚙ SettingsChanges apply to the report only after you press Save
Which metric means what
Used for the automatic Damage % row, the damage verification section and the report card columns.
Grade thresholds (%)
Add, rename, reorder or remove stores. Each store keeps a short code — historical data stays attached to that code, so avoid changing it once data exists.
The tick shows a field on the entry sheet. Switching one off hides it but keeps everything already recorded — turn it back on later and the history is still there. The letters set which kinds of site it applies to: Outlet, Kitchen, Both, Warehouse, Franchise. Fields in Calculated are worked out from other fields and cannot be typed into.
Rows of the Business Summary table. The key is what past data is stored under — leave it alone for existing rows.
Link a check to a figure and it marks itself as the Business Summary is filled in — useful for “Sales posted” or “No negative stock”, which simply restate what the numbers already show. Linked checks appear with a ⚙ and cannot be clicked.
Severity sets the weight — Critical 20, Major 10, Minor 5 — so nobody has to invent numbers. The letters set which kinds of site the check applies to; a kitchen never sees Counter closing and an outlet never sees Production.
Validations and their weights. A store's score = weight earned ÷ weight applicable (N/A rows excluded). Weights apply to past days too, so cumulative scores recalculate when you change them.
Observation scenarios
Status options
Severity controls the row colour: OK is plain, Review is amber, Investigate is red.
These settings only affect the management dashboard. The client report is untouched by anything on this tab.
Which validation means what
The dashboard counts negative-stock and late-submission incidents from these two validations.
Targets & alerts
Older days are kept as compact summaries once they are safely in the sheet. Every dashboard figure still covers the whole history; opening one of those dates fetches the full record back. Minimum 60.
Managers are assigned per store on the Stores tab — the dashboard rolls scores up by manager automatically.
Only a super admin sees this. Roles are enforced on the server, so a sign-in cannot give itself more rights by changing this page.
People
Loading…
Add a sign-in
Clients
Loading…
Add a client
Create a blank Google spreadsheet for the client first, share it with the account this gateway runs under, then paste its id here. The tabs are prepared automatically.
My password
Sends the report by email through your own Gmail account, so there is nothing to pay for. A Workspace account allows about 1,500 messages a day; a plain gmail account 100 — far more than a daily report needs. The Google Sheet connection must be working first.
Who receives it
Separate several addresses with commas.
What it says
Write {date} where the report date should appear.
WhatsApp
WhatsApp charges for automatic sending, so this stays free by preparing the message and picture for you to send. Add the numbers you use most — one per line, with the country code, and an optional name after a |.
Groups cannot be addressed directly by any app — use Choose a chat or group and pick it in WhatsApp.
When it goes
Automatic sending runs on Google's servers, so it works with this file closed. It needs a one-time trigger: in the Apps Script editor open Triggers ▸ Add trigger, choose dailyEmail, Time-driven, Day timer, and pick the hour.
A failed check becomes a task. Critical and major checks raise one automatically; minor ones can be raised by hand from the Actions panel. Each check's behaviour is set in Compliance rules.
Nothing closes itself. A check passing tomorrow does not close its action — one good day is not a fix. Done means the site says it is fixed; Verified means you confirmed it. Only the verified figure is reported as closed.
Days allowed to fix
Counted from the day the check failed. Used to set the due date when an action is raised.
Owner
A new action is assigned to the site's accountant from the Stores tab, unless you type someone else on the action itself.
A checklist is a named selection from the library you
already have — not a separate set of fields. That is deliberate: the field key is what
every stored day, every archived summary and every corrective action is filed under, so
keeping them means your whole history stays exactly where it is.
Leave a checklist with nothing ticked and it uses everything, which is
what the daily audit wants. Switch checklists off and the app behaves
exactly as it did before they existed.
Checklists
File backup
Saves every stored day plus all settings into one JSON file you keep yourself. Use it before clearing browser data, when moving to another computer, or as a routine safety copy. Works with no internet. The cloud URL and token are left out of the file on purpose.
Companies
One company, one Google Sheet. Each company keeps its own settings, its own saved days on this device and its own Apps Script link, so nothing can leak from one client's books into another's. Paste the Web App URL and token generated from that company's sheet, press Save companies, then pick the company from the selector at the top of the report.
Google Sheet sync
These two values belong to the company in use right now — editing them here also updates that company's entry in the list above. Backs the audit up to a Google Sheet through a Google Apps Script, so another computer can pick up the same data. The report keeps working with no internet — days are queued and go up on their own once the connection returns. Follow CLOUD-SETUP-GUIDE.md once to get the two values below.
You are signed in, so the
connection is handled for you. Your work goes to the audit server as you
make it, and this device keeps working without internet.
Leave on Automatic. Switch to Compatibility if uploads keep timing out.
Daily data
Sends only the days you have changed on this device, then brings back anything changed elsewhere. This is all you normally need.
Start fresh on this device
Wipes everything this browser has stored for the audit — days, archive and settings — then downloads it all again from the Google Sheet. Useful when you open a new version of the file in a browser that still holds older data. Anything not yet synced is lost, so sync or take a file backup first.
Occasional jobs
Use these on a new device, or if you suspect the sheet and this device have drifted apart.