Month-End Report Pack
Catches the pack that is missing a schedule at 7am, not at 4pm in partner review.
What it does
Reads your ClosePack Google Sheet — one row per report you expect to exist, per client, per period — and checks the matching folder on disk:
<CLOSE_PACK_ROOT>/<client_name>/<period>/<expected_filename>
Then it reports two lists: packs still incomplete, worst deadline first, naming each missing report and who owns it; and packs where every expected file is present and which are ready for review.
What it does NOT do
It does not open a single file. This is a presence-and-naming check. "Present" means a file with that exact name exists in that folder — not that it covers the right period, not that it reconciles, not that it is this month's rather than a copy of last month's.
That boundary is the point. A check that claims to verify content and does it badly is worse than one that honestly checks existence, because the partner stops looking. This tells you what is missing; you still review what is there.
It also does not build the reports. Whatever produces your P&L — QuickBooks export, your write-up software, another workflow — keeps producing it and dropping it in the folder.
Setup
1. Google Sheet
Tab ClosePack with this header:
| client_id | client_name | period | report_name | expected_filename | owner | deliver_by | status |
|---|---|---|---|---|---|---|---|
- One row per expected report. Four reports for one client is four rows
client_nameandperiodmust match the folder names on disk exactlystatus=skipexcludes a row without deleting it — use it for a client who does not take that reportdeliver_byinYYYY-MM-DD; drives the ordering and the LATE flag
2. Folder layout
Create <<CLOSE_PACK_ROOT>> and one folder per client, per period, readable by the InTouch server. Nothing is written — read access is enough.
3. Credential + contact
Replace the placeholders:
- <<GOOGLE_WORKSPACE_CREDENTIAL>> — Google Workspace credential with Sheets read scope
- <<CLOSE_PACK_SHEET_ID>> — the sheet ID from its URL
- <<CLOSE_PACK_ROOT>> — the folder root, e.g. /srv/clients/close
- <<CLOSE_OWNER_PUBLISHER>> — who runs the close
4. Schedule
Daily through the close window (working days 1–10), then stop. Running it all month trains people to ignore it.
Customization
- Period naming. The workflow compares strings, so
2026-07,Jul-2026andFY26-P07all work as long as sheet and folder agree. - Rolling the period. Simplest is a
periodcolumn you update once a month. To automate, add a first task that computes last month and rewrite the sheet range, or keep 12 rows per client and filter on the current period incompose. - Minimum file size. A zero-byte export is a failed export. Add a
os.path.getsize(target) > 0test alongsideos.path.isfileincomposeto catch it. - Second folder. Firms that stage to a portal can point a second run at the portal folder to confirm delivery actually happened.
Source
workflow.iml