41 min readContent generation

Implementation Guide: Produce financial narratives and management commentary for monthly close packages

Step-by-step implementation guide for deploying AI to produce financial narratives and management commentary for monthly close packages for Accounting & Bookkeeping clients.

Hardware Procurement

Dual Monitor for Side-by-Side Narrative Review

DellDell P2425H 24" IPS MonitorQty: 2

$220 per unit MSP cost / $285 suggested resale (includes mount and cabling)

Enables accountants to view AI-generated narratives on one screen and source financials (trial balance, P&L, balance sheet) on the other during the mandatory human review step. Significantly accelerates the review-and-edit workflow compared to single-monitor alt-tabbing.

USB Headset for Training & Support Calls

JabraJabra Evolve2 40 UC Stereo USB-A (24089-989-20)Qty: 2

$100 per unit MSP cost / $135 suggested resale

For virtual training sessions, onboarding calls with Fathom/Reach Reporting support, and ongoing MSP support calls. Noise-canceling mic ensures clear communication during knowledge transfer.

Software Procurement

Fathom Pro (with Commentary Writer)

Fathom (The Access Group)SaaS — per-company-connection, monthlyQty: N/A

$44–$575/month depending on plan tier and number of company files. Pro plan at $192/month covers up to 20 companies. Commentary Writer AI is included at no extra cost.

Primary AI narrative generation engine. Connects directly to QuickBooks Online, Xero, or MYOB. Commentary Writer generates client-specific financial narratives with click-through verification of every cited number. Produces formatted management report PDFs with narrative sections.

Microsoft 365 Business Standard

MicrosoftPer-seat SaaS, monthly or annualQty: N/A

$12.50/user/month via CSP (Pax8/Sherweb). Resale at $15–$18/user/month.

Foundation platform providing Excel, Outlook, Teams, SharePoint, and OneDrive. Required prerequisite for Copilot for Finance add-on. Provides document storage, collaboration, and communication infrastructure for the close process.

Microsoft 365 Copilot for Finance

MicrosoftPer-seat SaaS add-on, monthlyQty: N/A

$30/user/month add-on via CSP. MSP margin 10–20% depending on volume tier. Resale at $35–$40/user/month.

In-Excel AI assistant that performs variance analysis between actuals and forecast/budget, identifies anomalies in financial performance, and drafts natural-language explanations of key drivers. Complements Fathom by providing real-time analytical capabilities within the spreadsheet environment.

OpenAI API (GPT-5.4 Mini)

OpenAIUsage-based APIQty: N/A

$0.15 per million input tokens / $0.60 per million output tokens. Estimated $20–$70/month for a 10-client accounting practice generating monthly narratives.

Powers the custom n8n narrative pipeline for firms requiring advanced customization beyond Fathom's built-in commentary. Used for generating tailored management commentary, board-ready executive summaries, and industry-specific narrative templates.

n8n Cloud (Pro Plan)

n8n GmbHSaaS, monthlyQty: N/A

$50/month (10,000 workflow executions). Self-hosted Community Edition is free if MSP prefers on-prem.

Workflow orchestration platform that connects accounting platform APIs to the OpenAI API, applies prompt templates, routes generated narratives for review, and delivers final output. Provides the automation backbone for the custom narrative pipeline.

ChatGPT Team Plan

OpenAIPer-seat SaaS, monthlyQty: N/A

$30/user/month (monthly billing) or $25/user/month (annual). Recommended for 2–3 review staff seats.

Provides a private, secure workspace for accountants to interactively refine AI-generated narratives, ask follow-up questions about financial data, and iterate on management commentary. Business data is contractually excluded from model training.

Prerequisites

  • Active QuickBooks Online (Plus or Advanced), Xero (Standard or Premium), or Sage Intacct subscription with admin-level API access credentials
  • Minimum 12 months of historical financial data loaded in the accounting platform for meaningful comparative and variance analysis
  • Budget and/or forecast data loaded into the accounting platform or available in Excel format for variance commentary generation
  • Clean, well-structured Chart of Accounts with consistent naming conventions and proper account categorization (revenue, COGS, operating expenses, etc.)
  • Microsoft 365 Business Standard or higher licenses assigned to all users who will use Copilot for Finance (minimum 2–3 seats for typical small firm)
  • Microsoft Entra ID (Azure AD) tenant configured with user accounts for SSO across all SaaS platforms
  • Stable business internet connection with minimum 25 Mbps download speed
  • Modern web browser (Chrome 120+, Edge 120+, or Safari 17+) on all workstations
  • Designated 'AI Narrative Review Lead' — a licensed CPA or senior accountant who will own the human review and approval workflow
  • Written engagement letter language approved by the firm's managing partner addressing AI tool usage in client deliverables
  • Credit card or payment method on file for OpenAI API account (only if implementing custom n8n pipeline)
  • SharePoint Online or OneDrive for Business document library created for storing generated narrative reports and maintaining version history

Installation Steps

Step 1: Establish Fathom Account and Connect Accounting Platform

Create the Fathom organization account, configure SSO, and connect the firm's accounting platform (QuickBooks Online or Xero). This establishes the data pipeline that feeds the AI narrative engine. Select the Fathom Pro plan which supports up to 20 company connections and includes the Commentary Writer feature at no additional cost.

1
Navigate to https://www.fathomhq.com and click 'Start Free Trial' or 'Sign Up'
2
Select 'Accountant / Bookkeeper' as firm type
3
Choose the Pro plan ($192/month for up to 20 companies)
4
Under Settings > Integrations, click 'Connect to QuickBooks Online' or 'Connect to Xero'
5
Authenticate with accounting platform admin credentials via OAuth2 flow
6
Select the first 2-3 pilot client companies to connect
7
Wait for initial data sync (typically 5-15 minutes per company depending on data volume)
Note

Fathom offers a free trial period — use this for the pilot phase before committing to paid plan. Ensure the person authenticating the QBO/Xero connection has full admin rights. Data sync imports up to 10 years of historical data automatically. If the firm uses Sage Intacct, Fathom does not have a native connector — you'll need the custom n8n pipeline approach instead (see Step 10).

Step 2: Configure Chart of Accounts Mapping and KPI Definitions in Fathom

Map the client's chart of accounts to Fathom's standardized financial categories. Define non-financial KPIs that should be referenced in management commentary (headcount, units sold, etc.). This step is critical because the AI Commentary Writer uses these mappings to generate accurate, contextual narratives.

1
In Fathom, navigate to each connected company > Settings > Chart of Accounts
2
Review auto-mapped accounts and correct any miscategorizations Common fixes: Ensure COGS accounts are not mapped to Operating Expenses
3
Ensure Owner's Draw is mapped to Equity, not Expenses
4
Navigate to KPIs > Add Custom KPI Add relevant non-financial metrics: Full-Time Employees, Revenue per Employee, Client Count, etc. For each KPI, set the data entry method: Manual, Formula, or Imported
5
Set budget/target values for each KPI to enable variance commentary
Note

Spend extra time here — garbage in, garbage out. The AI Commentary Writer will reference these categories and KPIs directly in its narratives. A miscategorized account will produce misleading commentary. Review with the client's lead accountant before proceeding. Budget data can be manually entered in Fathom or imported from QBO/Xero if budgets are maintained there.

Step 3: Enable and Configure Commentary Writer AI Feature

Activate Fathom's Commentary Writer within the report builder. Configure narrative preferences including tone, detail level, and specific metrics to highlight. Generate initial test narratives to establish a quality baseline.

1
In Fathom, navigate to Reports > Create New Report
2
Select 'Management Report' template
3
In the report builder, add a 'Commentary' content block to each financial section
4
Click the AI Commentary Writer icon (sparkle/wand icon) on each commentary block
5
Configure settings: - Comparison Period: 'Month vs. Prior Month' and 'Month vs. Budget' - Detail Level: 'Detailed' (includes specific account-level variance explanations) - Tone: 'Professional' (suitable for management/board consumption)
6
Click 'Generate Commentary' to produce initial AI narrative
7
Review the generated text — click any cited number to verify against source data Edit the report template layout: Company Logo, Financial Statements, Charts, Commentary sections Save as firm-wide template: Reports > Save as Template > 'Monthly Close Package - AI Commentary'
Note

Commentary Writer generates narratives specific to each company's actual data — not generic boilerplate. Every number cited is clickable and traceable back to the source GL data. The first generation may need editing to match the firm's preferred style. Refine the template over 2-3 iterations before using with clients. Save the finalized template so it can be applied across all connected companies.

Step 4: Deploy Microsoft 365 Copilot for Finance Licenses

Assign Microsoft 365 Copilot licenses to the designated finance users via the Microsoft 365 Admin Center. This enables in-Excel AI-powered variance analysis and narrative drafting that complements Fathom's report-level commentary with granular spreadsheet-level analysis.

1
Log in to https://admin.microsoft.com with Global Admin credentials
2
Navigate to Billing > Purchase Services
3
Search for 'Microsoft 365 Copilot' and purchase required seats ($30/user/month)
4
Navigate to Users > Active Users
5
Select each designated finance user > Licenses and apps
6
Check 'Microsoft 365 Copilot' and 'Microsoft 365 Copilot for Finance' toggles
7
Click 'Save Changes' Verify activation: User opens Excel > Home tab > Copilot button should appear in ribbon
8
In Excel with financial data open, click Copilot > 'Analyze variances' to test
Note

Copilot for Finance requires Microsoft 365 Business Standard or higher as a base license. Activation can take up to 24 hours after license assignment. Copilot for Finance works best when financial data is in structured Excel tables with clear headers. Train users to use the Copilot sidebar for prompts like 'Explain the top 3 expense variances this month compared to budget' — these outputs can be copy-pasted into close packages or used as review aids alongside Fathom narratives.

Step 5: Configure SharePoint Document Library for Narrative Storage and Version Control

Create a structured SharePoint Online document library to store AI-generated narratives, maintain version history, and support the review/approval workflow. This provides the audit trail required for compliance.

1
In SharePoint Admin Center, create a new site: 'AI Financial Narratives'
2
Create the following folder structure:
3
/Clients/{ClientName}/2025/
4
/01-January/
5
Draft-Narratives/
6
Reviewed/
7
Final-Approved/
8
/02-February/
9
... (repeat for each month) Enable versioning: Library Settings > Versioning Settings > 'Create major and minor versions'
10
Set 'Require content approval for submitted items' = Yes
11
Add metadata columns: - 'Narrative Status' (Choice: Draft, Under Review, Approved, Published) - 'AI Engine Used' (Choice: Fathom Commentary Writer, Copilot for Finance, GPT-5.4 Custom) - 'Reviewer' (Person) - 'Review Date' (Date) - 'Client Name' (Text)
12
Configure permissions: MSP team = Full Control, Client Review Lead = Contribute, Client Viewer = Read Enable audit logging: SharePoint Admin > Compliance > Audit log search = ON
Note

Version control is non-negotiable for compliance. The audit trail of draft → reviewed → approved states satisfies both SOX internal control documentation requirements (for public company clients) and AICPA professional standards. Set retention policy to 7 years minimum for financial working papers. Consider enabling Microsoft Purview Information Protection labels if handling sensitive financial data.

Step 6: Create OpenAI API Account and Configure API Keys

Set up the OpenAI platform account that will power the custom n8n narrative pipeline. Configure API keys with appropriate usage limits and security controls. This step is only required if implementing the advanced custom pipeline (Steps 10-12).

1
Navigate to https://platform.openai.com/signup
2
Create organization account using the MSP's business email
3
Navigate to Settings > Billing > Add payment method Set usage limit: Hard cap at $100/month initially (adjust based on volume)
4
Navigate to API Keys > Create new secret key Name: 'accounting-narrative-prod' Permissions: 'All' (or restrict to Chat Completions only for security)
5
Copy the API key immediately — it will not be shown again
6
Store the key securely in Azure Key Vault or a password manager (never in plaintext)
7
Test the key with a curl command: curl https://api.openai.com/v1/chat/completions -H 'Content-Type: application/json' -H 'Authorization: Bearer sk-YOUR_KEY_HERE' -d '{"model":"gpt-5.4-mini","messages":[{"role":"user","content":"Summarize: Revenue increased 12% YoY to $1.2M."}],"max_tokens":200}'
8
Verify response returns a 200 status with narrative text
Note

Use GPT-5.4 Mini for cost efficiency — it produces excellent financial narrative quality at 1/17th the cost of GPT-5.4. Set hard billing limits to prevent runaway costs during development. The API key is a sensitive credential — treat it like a password. Enable organization-level 2FA on the OpenAI account. If the client requires data residency guarantees, verify OpenAI's data processing regions in their DPA (available at https://openai.com/policies/data-processing-addendum).

Step 7: Deploy n8n Workflow Orchestration Platform

Deploy n8n as the workflow automation backbone that connects the accounting platform API, OpenAI API, and output delivery channels. Choose between n8n Cloud (recommended for simplicity) or self-hosted Community Edition (for maximum data control).

# OPTION A: n8n Cloud (Recommended)
# Navigate to https://app.n8n.cloud/register
# Select Pro plan ($50/month, 10,000 executions)
# Complete registration and access the workflow editor

# OPTION B: Self-Hosted via Docker (For data sovereignty requirements)
# On a Linux VM (Ubuntu 22.04 LTS, 4 vCPU, 8GB RAM):
sudo apt update && sudo apt install -y docker.io docker-compose
mkdir -p /opt/n8n && cd /opt/n8n

cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
  n8n:
    image: n8nio/n8n:latest
    restart: always
    ports:
      - '5678:5678'
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=CHANGE_THIS_STRONG_PASSWORD
      - N8N_ENCRYPTION_KEY=GENERATE_A_RANDOM_32_CHAR_KEY
      - WEBHOOK_URL=https://n8n.yourmspdomain.com/
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=CHANGE_THIS_DB_PASSWORD
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      - postgres
  postgres:
    image: postgres:16
    restart: always
    environment:
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=CHANGE_THIS_DB_PASSWORD
      - POSTGRES_DB=n8n
    volumes:
      - postgres_data:/var/lib/postgresql/data
volumes:
  n8n_data:
  postgres_data:
EOF

docker-compose up -d

# Verify n8n is running:
curl -s http://localhost:5678/healthz
Note

n8n Cloud is strongly recommended for MSPs without dedicated DevOps staff — it eliminates infrastructure management. If self-hosting, place behind a reverse proxy (nginx or Caddy) with SSL/TLS. The Community Edition is free and fully functional with 400+ integrations. Generate the N8N_ENCRYPTION_KEY with: openssl rand -hex 16. Ensure the VM is in a region compliant with the client's data residency requirements.

Step 8: Configure Identity, SSO, and Access Controls

Set up Single Sign-On using Microsoft Entra ID across all platforms (Fathom, n8n, ChatGPT Team). Configure role-based access controls to enforce the principle of least privilege. This is essential for compliance with GLBA Safeguards Rule and firm data security policies.

1
In Microsoft Entra Admin Center (https://entra.microsoft.com):
2
Navigate to Enterprise Applications > New Application Add Fathom: Search gallery or configure SAML manually Identifier (Entity ID): https://app.fathomhq.com Reply URL: https://app.fathomhq.com/auth/saml/callback Sign-on URL: https://app.fathomhq.com/login
3
Assign users/groups to the Fathom enterprise app
4
Configure Conditional Access Policy:
5
Entra > Security > Conditional Access > New Policy Name: 'AI Financial Tools - MFA Required' Users: All users assigned to AI narrative tools Cloud apps: Fathom, OpenAI, n8n (if cloud) Conditions: All locations Grant: Require MFA Session: Sign-in frequency = 8 hours In Fathom: Settings > Team > Invite members with role assignments: - Admin: MSP administrators only - Analyst: Senior accountants (can generate and edit narratives) - Viewer: Junior staff and client portal users (read-only)
Note

SSO enforcement via Entra ID provides centralized access management and audit logging. Conditional Access with MFA is a compliance requirement — GLBA Safeguards Rule mandates multi-factor authentication for access to customer financial data. If Fathom doesn't support SAML/OIDC on the selected plan tier, use Entra ID password-based SSO as a fallback. Document all access grants in the compliance audit trail.

Step 9: Build the Review and Approval Workflow

Establish the human-in-the-loop review and approval process that ensures every AI-generated narrative is verified by a qualified professional before inclusion in client deliverables. This is the most critical compliance step — AI-generated content in financial close packages MUST be reviewed by a CPA or senior accountant.

1
In Microsoft Teams, create a new Team: 'Monthly Close - AI Narratives'
2
Create channels: - General (announcements and SOPs) - #narrative-review (where AI drafts are posted for review) - #approved-narratives (final approved versions)
3
In Power Automate (https://make.powerautomate.com): Create new flow: 'AI Narrative Review Approval'
4
Trigger: 'When a file is created in a folder' (SharePoint > Draft-Narratives)
5
Action 1: 'Start and wait for an approval' Type: Approve/Reject - First to respond Title: 'Review AI Narrative: [Client Name] - [Month]' Assigned to: designated-reviewer@firmname.com Details: 'AI-generated financial narrative requires CPA review before client delivery.' Item link: [Dynamic content: File link]
6
Action 2 (If Approved): 'Move file' to Reviewed/ folder Update metadata: Status = 'Approved', Reviewer = [Approver name], Date = [now]
7
Post to Teams #approved-narratives channel
8
Action 3 (If Rejected): 'Send email' to narrative author with rejection reason
9
Move to Draft-Narratives/Needs-Revision/ subfolder
10
Save and test the flow
Note

This is not optional — AICPA standards and SOX compliance (for public company clients) require documented human review of all material financial commentary. The Power Automate flow creates an auditable approval record. Set SLA expectations: reviewers should approve/reject within 4 business hours during close periods. Consider adding a secondary reviewer for high-value or public-company clients. The approval record in Power Automate is retained and searchable for audit purposes.

Step 10: Build Custom n8n Narrative Generation Workflow

Create the advanced n8n workflow that pulls financial data from the accounting platform API, applies structured prompt templates, sends data to GPT-5.4 Mini for narrative generation, and routes the output for review. This provides maximum customization beyond what Fathom's built-in Commentary Writer offers.

1
In n8n workflow editor, create new workflow: 'Monthly Financial Narrative Generator' Node 1: Schedule Trigger - Cron expression: 0 9 5 * * (runs at 9 AM on the 5th of each month) - Or: Manual trigger for on-demand generation Node 2: HTTP Request — Fetch QBO P&L - Method: GET - URL: https://quickbooks.api.intuit.com/v3/company/{companyId}/reports/ProfitAndLoss - Authentication: OAuth2 - Query Parameters: start_date: {{$now.minus({months:1}).startOf('month').toFormat('yyyy-MM-dd')}} end_date: {{$now.minus({months:1}).endOf('month').toFormat('yyyy-MM-dd')}} accounting_method: Accrual minorversion: 75 Node 3: HTTP Request — Fetch QBO Balance Sheet - Method: GET - URL: https://quickbooks.api.intuit.com/v3/company/{companyId}/reports/BalanceSheet - Authentication: OAuth2 (same credentials) - Query Parameters: as_of: {{$now.minus({months:1}).endOf('month').toFormat('yyyy-MM-dd')}} Node 4: Code Node — Transform Financial Data - See custom_ai_components for full transformation code Node 5: OpenAI Chat Node - Model: gpt-5.4-mini - System Prompt: (see custom_ai_components 'Financial Narrative System Prompt') - User Prompt: (dynamically assembled from Node 4 output) - Temperature: 0.3 (low creativity, high factual consistency) - Max Tokens: 2000 Node 6: Code Node — Post-Processing and Formatting - Apply markdown-to-DOCX or markdown-to-PDF conversion - Add standard headers, footers, and firm branding Node 7: SharePoint Node — Save Draft - Upload generated narrative to SharePoint Draft-Narratives folder - Set metadata: Status=Draft, AI Engine=GPT-5.4-Mini, Date=now Node 8: Microsoft Teams Node — Notify Reviewer - Post message to #narrative-review channel - Include link to draft document and summary of key variances
2
Save and activate the workflow
Note

This workflow is the advanced/custom option — Fathom Commentary Writer handles this automatically for most use cases. Only build this if the client needs: (a) custom narrative templates beyond Fathom's capabilities, (b) integration with non-supported accounting platforms, (c) specialized industry commentary, or (d) the firm wants MSP-managed prompt engineering. The QBO OAuth2 credentials require a registered Intuit Developer app — set this up at https://developer.intuit.com. Token refresh is handled automatically by n8n's OAuth2 credential type.

Step 11: Configure Prompt Templates and Narrative Styles

Deploy the carefully engineered prompt templates that guide the LLM to produce accurate, professional financial narratives. These templates are the core intellectual property of the implementation and should be version-controlled.

1
Store all prompt templates in a dedicated SharePoint folder:
2
/AI Financial Narratives/Prompt-Templates/ - system-prompt-v1.md - monthly-pnl-commentary-v1.md - balance-sheet-commentary-v1.md - cash-flow-commentary-v1.md - executive-summary-v1.md - board-narrative-v1.md
3
In n8n, create a 'Credentials' entry for each prompt template
4
Or use a Code node to fetch templates from SharePoint at runtime
5
This enables template updates without modifying the workflow
6
Version control convention: - Major version (v1 → v2): Significant structural changes - Minor version (v1.0 → v1.1): Tone/style refinements - Date stamp each version in the file header
7
See custom_ai_components for complete prompt template contents
Note

Prompt templates are the most important tunable element of the system. Plan for 2-3 iterations during the pilot phase. Keep a log of what changes were made and why. Never edit prompts in production without testing on sample data first. Store the 'golden' prompt versions in SharePoint with version history enabled. The prompts provided in custom_ai_components have been engineered for accounting-specific accuracy including proper treatment of debits/credits, percentage calculations, and materiality thresholds.

Step 12: Pilot Testing with 2-3 Client Companies

Run the AI narrative generation system in parallel with the firm's existing manual narrative process for 2-3 selected pilot clients. Compare AI output quality, accuracy, and completeness against manually written commentary. This dual-run approach validates the system before full rollout.

1
Select 2-3 pilot clients with these characteristics: - At least 12 months of historical data - Active budget/forecast data loaded - Varying complexity (1 simple, 1 moderate, 1 complex) - Existing manually-written narratives available for comparison
2
For each pilot client, generate narratives using:
3
1. Fathom Commentary Writer (primary)
4
2. n8n custom pipeline (if implemented)
5
3. Copilot for Finance in Excel (supplementary)
6
Create comparison matrix in Excel: Columns: Section | Manual Narrative | AI Narrative | Accuracy Score (1-5) |
7
Completeness Score (1-5) | Tone Appropriate (Y/N) | Edits Needed Rows: Executive Summary, Revenue Commentary, Expense Commentary,
8
Balance Sheet Commentary, Cash Flow Commentary, KPI Discussion
9
Have the designated CPA reviewer score each section
10
Document all required edits and categorize: - Factual errors (numbers wrong) → investigate data mapping - Contextual errors (misinterpretation) → refine prompts - Style/tone issues → adjust prompt templates - Missing content → add data sources or prompt sections
Note

The pilot phase is critical — do not skip it. Expect the first round of AI narratives to be 70-80% usable with editing needed. By the second or third iteration of prompt refinement, quality typically reaches 90-95%. Never send AI-generated narratives to clients without completing this pilot phase. Track time savings: measure how long the manual process takes vs. AI generation + human review time. This data is essential for demonstrating ROI during client handoff.

Step 13: Production Rollout and Monthly Close Process Integration

Expand the AI narrative system to the full client base. Integrate narrative generation into the firm's existing monthly close workflow and checklist. Establish the production cadence and standard operating procedures.

1
In the firm's practice management tool (Karbon, Canopy, Jetpack, or equivalent):
2
Add new workflow steps to the 'Monthly Close' template:
3
Step X: 'Verify financials reconciled and ready for narrative generation'
4
Step X+1: 'Generate AI narratives in Fathom (or trigger n8n workflow)'
5
Step X+2: 'CPA review and approval of AI narratives'
6
Step X+3: 'Incorporate approved narratives into close package'
7
Step X+4: 'Deliver close package to client'
8
In Fathom, for each client company:
9
1. Apply the saved 'Monthly Close Package - AI Commentary' report template 2. Set report scheduling: Auto-generate on the 5th business day of each month 3. Configure email delivery: Send draft to reviewer, not directly to client
10
Enable Fathom Client Portal for each client:
11
Settings > Client Access > Enable portal > Set client user permissions to View Only
12
Clients can access their finalized reports through branded portal
13
For n8n custom pipeline:
14
Activate the scheduled workflow (cron trigger on 5th of month)
15
Verify error notification is configured (email or Teams alert on failure)
Note

Stagger the rollout — don't switch all clients at once. Roll out in batches of 5-10 clients per close cycle. This allows the review team to build confidence and identify any edge cases. Maintain the manual process as a backup for the first 2 full close cycles after go-live. After 2 successful cycles with AI narratives, the manual process can be retired. Document the final SOP and store in SharePoint.

Step 14: Compliance Documentation and Audit Trail Setup

Finalize all compliance documentation including the AI governance policy, updated engagement letters, data processing agreements, and audit trail procedures. This step ensures the firm meets AICPA, SOX, GLBA, and applicable privacy law requirements.

1
Create and store the following documents in SharePoint /Compliance/ folder:
2
1. AI Governance Policy (see custom_ai_components for template) - Approved AI tools and permitted use cases - Data handling and retention requirements - Human review mandate - Incident response procedures
3
2. Vendor Data Processing Agreements (DPAs): - Fathom DPA: Request from support@fathomhq.com - OpenAI DPA: https://openai.com/policies/data-processing-addendum - Microsoft DPA: Included in Microsoft Product Terms - Store executed copies in /Compliance/DPAs/
4
3. Updated Client Engagement Letter addendum: - Add paragraph disclosing AI tool usage in deliverable preparation - Specify that all AI outputs are reviewed by qualified professionals - Obtain client acknowledgment signature
5
4. Audit Trail Verification: - Verify SharePoint version history is capturing all document changes - Verify Power Automate approval flow is logging all decisions - Verify n8n execution logs are retained (n8n Cloud retains 30 days by default) - Export and archive n8n logs monthly to SharePoint for long-term retention
6
5. Run quarterly compliance review: - Sample 3-5 random client narratives - Verify each has documented human review approval - Verify AI engine identification metadata is present - Document findings in quarterly compliance report
Note

Compliance documentation is what protects both the firm and the MSP in the event of an audit or regulatory inquiry. The AI governance policy should be reviewed and signed by the firm's managing partner. Update engagement letters for all active clients — not just new ones. If the firm serves public company audit clients, consult with the audit team about PCAOB implications before deploying. GLBA Safeguards Rule requires a written information security plan that now must address AI tools handling customer financial data.

Custom AI Components

Financial Narrative System Prompt

Type: prompt

The master system prompt that instructs GPT-5.4 Mini to generate professional financial narratives from structured accounting data. This prompt enforces accuracy, appropriate tone, materiality thresholds, and accounting-specific language conventions. It is the core intellectual property of the custom narrative pipeline.

Implementation:

You are a senior financial analyst and CPA preparing management commentary for monthly close packages. You generate professional, accurate financial narratives based exclusively on the structured financial data provided to you.

CRITICAL RULES

1
NEVER fabricate, estimate, or hallucinate any numbers. Every figure you cite MUST appear in the provided data.
2
Express all dollar amounts with proper formatting: $1,234,567. Use (parentheses) for negative values per accounting convention.
3
Calculate all percentages yourself from the raw data. Show the percentage and the absolute dollar change. Example: 'Revenue increased 12.3% ($147,600) compared to the prior period.'
4
Apply a materiality threshold: Only discuss line items with variances exceeding 5% AND $1,000. Smaller variances should be grouped as 'Other immaterial variances totaled [varies] net.'
5
Use professional but accessible language. Avoid jargon that a non-financial board member would not understand. Define technical terms on first use.
6
Structure every narrative with: (a) Executive headline summary (1-2 sentences), (b) Key drivers and variances, (c) Notable trends, (d) Items requiring management attention.
7
When discussing expenses, always contextualize: 'As a percentage of revenue' or relative to budget.
8
Never provide forward-looking predictions, investment advice, or opinions on business strategy. State facts and trends only.
9
If data appears inconsistent or potentially erroneous (e.g., revenue is negative, assets don't balance), flag it explicitly: '[DATA NOTE: {description of anomaly} — verify with source records.]'
10
Use active voice. Say 'Revenue increased' not 'An increase in revenue was observed.'

OUTPUT FORMAT

Return the narrative in clean markdown with the following sections:

  • ### Executive Summary
  • ### Revenue & Gross Margin Analysis
  • ### Operating Expense Analysis
  • ### Balance Sheet Highlights
  • ### Cash Flow & Liquidity
  • ### Items Requiring Management Attention

Do not include any preamble, disclaimers about being an AI, or meta-commentary. Output only the narrative text.

Financial Data Transformation Function

Type: integration n8n Code node that transforms raw QuickBooks Online API JSON responses into a structured, LLM-friendly text format. This function extracts key financial metrics, calculates variances against prior period and budget, and assembles a data summary that serves as the user prompt for the narrative LLM.

Implementation:

javascript
// n8n Code Node: Transform QBO Financial Data for LLM Narrative Generation
// Input: Items from QBO P&L and Balance Sheet HTTP Request nodes
// Output: Structured text summary for LLM prompt

const pnlData = $('Fetch QBO PnL').item.json;
const bsData = $('Fetch QBO Balance Sheet').item.json;

// Helper function to extract row value from QBO report JSON
function getRowValue(report, rowName) {
  if (!report || !report.Rows || !report.Rows.Row) return null;
  for (const row of report.Rows.Row) {
    if (row.Summary && row.Summary.ColData) {
      if (row.Summary.ColData[0].value === rowName) {
        return row.Summary.ColData.map((col, idx) => idx === 0 ? col.value : parseFloat(col.value) || 0);
      }
    }
    if (row.Rows && row.Rows.Row) {
      for (const subRow of row.Rows.Row) {
        if (subRow.ColData && subRow.ColData[0].value === rowName) {
          return subRow.ColData.map((col, idx) => idx === 0 ? col.value : parseFloat(col.value) || 0);
        }
      }
    }
  }
  return null;
}

// Extract P&L columns (Current Month, Prior Month, Budget if available)
const columns = pnlData.Columns.Column.map(c => c.ColTitle);

// Build structured summary sections
let sections = [];
sections.push('# FINANCIAL DATA FOR NARRATIVE GENERATION');
sections.push(`## Report Period: ${pnlData.Header.StartPeriod} to ${pnlData.Header.EndPeriod}`);
sections.push(`## Company: ${pnlData.Header.ReportName}`);
sections.push(`## Columns: ${columns.join(' | ')}`);
sections.push('');

// Extract all P&L rows recursively
function extractRows(rows, indent = 0) {
  let results = [];
  if (!rows || !rows.Row) return results;
  for (const row of rows.Row) {
    if (row.ColData) {
      const label = row.ColData[0].value;
      const values = row.ColData.slice(1).map(c => c.value || '0');
      results.push(`${'  '.repeat(indent)}${label}: ${values.join(' | ')}`);
    }
    if (row.Header && row.Header.ColData) {
      results.push(`${'  '.repeat(indent)}**${row.Header.ColData[0].value}**`);
    }
    if (row.Rows) {
      results = results.concat(extractRows(row.Rows, indent + 1));
    }
    if (row.Summary && row.Summary.ColData) {
      const label = row.Summary.ColData[0].value;
      const values = row.Summary.ColData.slice(1).map(c => c.value || '0');
      results.push(`${'  '.repeat(indent)}**${label}: ${values.join(' | ')}**`);
    }
  }
  return results;
}

sections.push('## PROFIT & LOSS STATEMENT');
sections = sections.concat(extractRows(pnlData.Rows));
sections.push('');
sections.push('## BALANCE SHEET');
sections = sections.concat(extractRows(bsData.Rows));
sections.push('');
sections.push('## INSTRUCTIONS');
sections.push('Generate a management commentary narrative for this financial data following your system prompt guidelines.');
sections.push('Compare current period to prior period. Flag all material variances (>5% AND >$1,000).');
sections.push('If budget column is present, also compare actuals to budget.');

return [{ json: { prompt_text: sections.join('\n'), generated_at: new Date().toISOString() } }];

Monthly Narrative Generation Workflow

Type: workflow Complete n8n workflow definition that orchestrates the end-to-end monthly narrative generation process: scheduled trigger → data fetch from QBO → data transformation → LLM narrative generation → quality checks → SharePoint storage → Teams notification. This is exported as n8n JSON for direct import.

Implementation:

json
{
  "name": "Monthly Financial Narrative Generator",
  "nodes": [
    {
      "parameters": { "rule": { "interval": [{ "field": "cronExpression", "expression": "0 9 5 * *" }] } },
      "name": "Monthly Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [250, 300]
    },
    {
      "parameters": { "url": "https://quickbooks.api.intuit.com/v3/company/{{$json.companyId}}/reports/ProfitAndLoss", "authentication": "oAuth2", "method": "GET", "queryParameters": { "parameters": [{ "name": "start_date", "value": "={{$now.minus({months:1}).startOf('month').toFormat('yyyy-MM-dd')}}" }, { "name": "end_date", "value": "={{$now.minus({months:1}).endOf('month').toFormat('yyyy-MM-dd')}}" }, { "name": "accounting_method", "value": "Accrual" }] } },
      "name": "Fetch QBO PnL",
      "type": "n8n-nodes-base.httpRequest",
      "position": [470, 300]
    },
    {
      "parameters": { "url": "https://quickbooks.api.intuit.com/v3/company/{{$json.companyId}}/reports/BalanceSheet", "authentication": "oAuth2", "method": "GET", "queryParameters": { "parameters": [{ "name": "as_of", "value": "={{$now.minus({months:1}).endOf('month').toFormat('yyyy-MM-dd')}}" }] } },
      "name": "Fetch QBO Balance Sheet",
      "type": "n8n-nodes-base.httpRequest",
      "position": [470, 500]
    },
    {
      "parameters": { "jsCode": "// See Financial Data Transformation Function component for full code" },
      "name": "Transform Financial Data",
      "type": "n8n-nodes-base.code",
      "position": [690, 400]
    },
    {
      "parameters": { "model": "gpt-5.4-mini", "messages": { "values": [{ "role": "system", "content": "={{ $('Load System Prompt').item.json.prompt }}" }, { "role": "user", "content": "={{ $json.prompt_text }}" }] }, "options": { "temperature": 0.3, "maxTokens": 2500 } },
      "name": "Generate Narrative via GPT-5.4 Mini",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [910, 400]
    },
    {
      "parameters": { "jsCode": "// Post-processing: validate no hallucinated numbers\nconst narrative = $input.first().json.message.content;\nconst sourceData = $('Transform Financial Data').first().json.prompt_text;\n\n// Extract all dollar amounts from narrative\nconst narrativeNumbers = narrative.match(/\\$[\\d,]+\\.?\\d*/g) || [];\n\n// Flag any numbers not found in source data\nlet warnings = [];\nfor (const num of narrativeNumbers) {\n  const cleanNum = num.replace(/[$,]/g, '');\n  if (!sourceData.includes(cleanNum) && parseFloat(cleanNum) > 100) {\n    warnings.push(`WARNING: ${num} cited in narrative but not found in source data`);\n  }\n}\n\nreturn [{ json: { narrative, warnings, has_warnings: warnings.length > 0, generated_at: new Date().toISOString() } }];" },
      "name": "Validate Narrative Accuracy",
      "type": "n8n-nodes-base.code",
      "position": [1130, 400]
    },
    {
      "parameters": { "resource": "file", "operation": "upload", "siteId": "YOUR_SHAREPOINT_SITE_ID", "folderId": "YOUR_DRAFT_FOLDER_ID", "fileName": "={{$now.minus({months:1}).toFormat('yyyy-MM')}}-narrative-draft.md", "fileContent": "={{ $json.narrative }}" },
      "name": "Save to SharePoint",
      "type": "n8n-nodes-base.microsoftSharePoint",
      "position": [1350, 400]
    },
    {
      "parameters": { "resource": "chatMessage", "operation": "create", "teamId": "YOUR_TEAMS_TEAM_ID", "channelId": "YOUR_CHANNEL_ID", "message": "=📊 **AI Narrative Draft Ready for Review**\n\nPeriod: {{$now.minus({months:1}).toFormat('MMMM yyyy')}}\nWarnings: {{$json.has_warnings ? $json.warnings.join('; ') : 'None — all figures verified'}}\n\nPlease review and approve in SharePoint." },
      "name": "Notify Reviewer via Teams",
      "type": "n8n-nodes-base.microsoftTeams",
      "position": [1570, 400]
    }
  ],
  "connections": {
    "Monthly Schedule Trigger": { "main": [[{ "node": "Fetch QBO PnL" }, { "node": "Fetch QBO Balance Sheet" }]] },
    "Fetch QBO PnL": { "main": [[{ "node": "Transform Financial Data" }]] },
    "Fetch QBO Balance Sheet": { "main": [[{ "node": "Transform Financial Data" }]] },
    "Transform Financial Data": { "main": [[{ "node": "Generate Narrative via GPT-5.4 Mini" }]] },
    "Generate Narrative via GPT-5.4 Mini": { "main": [[{ "node": "Validate Narrative Accuracy" }]] },
    "Validate Narrative Accuracy": { "main": [[{ "node": "Save to SharePoint" }]] },
    "Save to SharePoint": { "main": [[{ "node": "Notify Reviewer via Teams" }]] }
  }
}

AI Governance Policy Template

Type: prompt A comprehensive AI governance policy document template tailored for accounting firms deploying AI-generated financial narratives. This document satisfies AICPA, GLBA, and SOX compliance requirements and should be customized and signed by the firm's managing partner.

Implementation:

markdown
# AI GOVERNANCE POLICY — [FIRM NAME]

Effective Date: [DATE] | Version: 1.0 | Approved by: [MANAGING PARTNER NAME]

1. PURPOSE

This policy governs the use of artificial intelligence tools in the preparation of client financial deliverables at [Firm Name]. It ensures all AI-assisted work products meet professional standards, protect client confidentiality, and comply with applicable regulations.

2. SCOPE

This policy applies to all firm personnel, contractors, and managed service providers who use AI tools in connection with client engagements, specifically:

  • AI-generated financial narratives and management commentary
  • AI-assisted variance analysis and trend identification
  • AI-powered report generation and formatting

3. APPROVED AI TOOLS

The following AI tools are approved for use with client financial data:

Fathom Commentary Writer

The Access Group

Narrative generation from connected GL data. SOC 2 Type 1, ISO 27001 certified. Data not used for model training.

Microsoft 365 Copilot for Finance

Microsoft

In-Excel variance analysis and draft narratives. Enterprise DPA. Data processed within Microsoft tenant boundary.

OpenAI API (GPT-5.4 Mini)

OpenAIGPT-5.4 Mini

Custom narrative pipeline via n8n workflow. Enterprise API — data not used for training per API Terms. DPA executed.

ChatGPT Team

OpenAI

Interactive narrative refinement. Private workspace. Data excluded from training per Team Terms.

Critical

PROHIBITED: Free-tier ChatGPT, Google Gemini free tier, any consumer AI tool, any AI tool not listed above. Firm personnel must NEVER paste client financial data into non-approved AI tools.

4. HUMAN REVIEW MANDATE

All AI-generated content intended for client deliverables MUST be reviewed and approved by a qualified professional (CPA, CMA, or senior accountant with 3+ years of experience) before delivery. AI output is a DRAFT until human-reviewed. Specific requirements:

  • Reviewer must verify all cited figures against source GL data
  • Reviewer must assess narrative accuracy, completeness, and appropriateness of conclusions
  • Reviewer must document their review via the SharePoint approval workflow
  • Reviewer's name and date must be recorded in the engagement file

5. DATA HANDLING

  • Client financial data may only be processed through approved tools with executed DPAs
  • No client data may be stored on personal devices or non-approved cloud services
  • All AI-processed data must comply with GLBA Safeguards Rule requirements
  • For EU-resident client data, GDPR data residency requirements must be verified

6. AUDIT TRAIL

The following records must be maintained for every AI-generated narrative:

  • Input data snapshot (what financial data was provided to the AI)
  • AI tool and model version used
  • Complete AI output (unedited)
  • Reviewer identity and approval/rejection decision
  • Final edited version delivered to client
  • Retention period: 7 years minimum

7. CLIENT DISCLOSURE

[Firm Name] will include the following language in all engagement letters: 'Our firm utilizes AI-assisted tools to support the preparation of financial analyses and management commentary. All AI-generated content is reviewed and approved by qualified professionals before delivery. Your data is processed only through enterprise-grade platforms with appropriate security certifications and data processing agreements.'

8. INCIDENT RESPONSE

If an AI tool produces materially incorrect content that is delivered to a client:

1
Immediately notify the Managing Partner and MSP support contact
2
Issue corrected deliverable within 24 hours
3
Document the incident including root cause analysis
4
Review and update prompts/templates to prevent recurrence
5
Report to professional liability insurance carrier if material

9. REVIEW CYCLE

This policy will be reviewed quarterly and updated as needed. Next review date: [DATE + 90 DAYS].

Signature: _________________________ Date: _____________ [MANAGING PARTNER NAME], [FIRM NAME]

Narrative Quality Scoring Agent

Type: agent

A quality assurance agent that evaluates AI-generated financial narratives against a scoring rubric before they reach the human reviewer. It catches common LLM errors like hallucinated numbers, incorrect percentage calculations, missing material variances, and inappropriate forward-looking statements. Runs as a second LLM call in the n8n pipeline.

Implementation:

javascript
// n8n Code Node: Quality Scoring Agent
// This node takes the generated narrative and source data, sends them to a second LLM call
// for quality assurance scoring, and flags issues for the human reviewer.

const narrative = $('Generate Narrative via GPT-5.4 Mini').first().json.message.content;
const sourceData = $('Transform Financial Data').first().json.prompt_text;

// QA System Prompt
const qaSystemPrompt = `You are a financial narrative quality assurance auditor. You receive two inputs:
1. SOURCE DATA: The raw financial data that was provided to the narrative generator
2. GENERATED NARRATIVE: The AI-generated management commentary

Your job is to score the narrative on the following rubric and flag any issues:

SCORING RUBRIC (1-5 scale for each)

1
Numerical Accuracy: Are all cited figures traceable to the source data? Are percentages calculated correctly?
2
Completeness: Are all material variances (>5% AND >$1,000) discussed? Are key financial statements covered?
3
Professional Tone: Is the language appropriate for board/management consumption? No casual language or AI disclaimers?
4
Objectivity: Are statements factual without forward-looking predictions or subjective opinions?
5
Structure: Does the narrative follow the required sections (Executive Summary, Revenue, Expenses, Balance Sheet, Cash Flow, Attention Items)?

OUTPUT FORMAT

Return ONLY a JSON object (no markdown fences):

json
{
  "scores": {
    "numerical_accuracy": <1-5>,
    "completeness": <1-5>,
    "professional_tone": <1-5>,
    "objectivity": <1-5>,
    "structure": <1-5>
  },
  "overall_score": <average of above, rounded to 1 decimal>,
  "pass": <true if overall >= 3.5, false otherwise>,
  "issues": [
    {"severity": "critical|warning|info", "description": "<specific issue description>", "location": "<which section>"}
  ],
  "suggested_edits": ["<specific suggested edit 1>", "<specific suggested edit 2>"]
}
javascript
const qaUserPrompt = `## SOURCE DATA\n${sourceData}\n\n## GENERATED NARRATIVE\n${narrative}`;

// Return the QA prompt for the next OpenAI node
return [{
  json: {
    qa_system_prompt: qaSystemPrompt,
    qa_user_prompt: qaUserPrompt,
    original_narrative: narrative
  }
}];

// After this Code node, add another OpenAI Chat node:
// Model: gpt-5.4-mini
// System: {{ $json.qa_system_prompt }}
// User: {{ $json.qa_user_prompt }}
// Temperature: 0.1 (maximum consistency for QA)
// Max Tokens: 1000
//
// Then add a Code node to parse the QA JSON response:
// const qaResult = JSON.parse($input.first().json.message.content);
// const narrative = $('Quality Scoring Agent').first().json.original_narrative;
// if (!qaResult.pass) {
//   // Route to 'Needs Revision' path — regenerate with issue context
//   return [{ json: { ...qaResult, narrative, action: 'revise' } }];
// }
// return [{ json: { ...qaResult, narrative, action: 'approve' } }];

Testing & Validation

  • NUMERICAL ACCURACY TEST: Generate a narrative for a pilot client. Independently calculate the top 5 variance percentages from the raw GL data using a calculator or Excel. Compare each percentage cited in the AI narrative — all must match within 0.1 percentage points. If any figure is wrong, check the data transformation function and prompt instructions.
  • COMPLETENESS TEST: Review the source P&L for the pilot month. Identify all line items with variances exceeding 5% AND $1,000 (the defined materiality threshold). Verify that every material item appears in the AI narrative. Count: AI should discuss at least 90% of material variances.
  • HALLUCINATION TEST: Search the AI-generated narrative for every dollar amount cited. Cross-reference each amount against the raw QBO/Xero data export. Flag any amount that cannot be traced to the source data. Zero hallucinated numbers is the passing threshold.
  • TONE AND COMPLIANCE TEST: Have a CPA read the narrative and flag any instances of: (a) forward-looking statements or predictions, (b) investment advice, (c) casual or unprofessional language, (d) AI self-references ('As an AI...'), (e) unsupported opinions about business strategy. The narrative must contain zero instances of any of these.
  • INTEGRATION TEST — FATHOM: In Fathom, disconnect and reconnect a test company. Generate Commentary Writer output. Verify that the narrative accurately reflects the most recent month's data and that prior period comparisons use the correct time frame. Click through every cited figure to verify it traces back to the GL.
  • INTEGRATION TEST — QBO API: In n8n, manually trigger the workflow for a test company. Verify the HTTP Request nodes return 200 status codes. Verify the P&L date range parameters correctly target the prior month. Verify the Balance Sheet as-of date is the last day of the prior month.
  • INTEGRATION TEST — SHAREPOINT: Verify that generated narrative documents appear in the correct SharePoint folder path (/Clients/{ClientName}/{Year}/{Month}/Draft-Narratives/). Verify version history is enabled and captures each upload. Verify the Power Automate approval flow triggers automatically when a new file is created.
  • INTEGRATION TEST — TEAMS NOTIFICATION: After a narrative is saved to SharePoint, verify that a notification appears in the #narrative-review Teams channel within 5 minutes. Verify the notification includes the correct client name, period, and a clickable link to the SharePoint document.
  • QUALITY SCORING AGENT TEST: Feed the QA agent a narrative with an intentionally wrong percentage (e.g., change a 12% increase to 22%). Verify the agent catches it and returns a 'critical' severity issue with numerical_accuracy score below 3. Then feed it a correct narrative and verify it passes with overall score >= 3.5.
  • END-TO-END TIMING TEST: Measure the complete cycle time from workflow trigger to Teams notification for 3 different clients. The entire automated pipeline should complete in under 5 minutes per client. Fathom Commentary Writer should generate in under 30 seconds.
  • PARALLEL COMPARISON TEST: For each pilot client, generate the AI narrative AND have the firm produce their traditional manual narrative. Present both (anonymized) to the lead CPA and ask them to rate quality on a 1-10 scale. The AI narrative should score within 2 points of the manual narrative to pass.
  • SECURITY TEST: Verify that the OpenAI API key is not visible in any n8n workflow export, log file, or SharePoint document. Verify it is stored only in n8n's encrypted credentials store or Azure Key Vault. Attempt to access the n8n instance without SSO credentials — access should be denied.

Client Handoff

The client handoff meeting should be a 90-minute session with the firm's managing partner, senior accountants (narrative reviewers), and any staff who will interact with the AI tools. Cover the following topics in order:

1
Solution Overview & Business Case (15 min): Walk through the architecture diagram showing data flow from GL → AI → Review → Client Delivery. Present the measured time savings from the pilot phase (expected: 60-80% reduction in narrative drafting time per client). Show the ROI calculation: hours saved × blended staff rate vs. monthly tool costs.
2
Live Demonstration (20 min): Generate a real narrative for one of the pilot clients in real-time using Fathom Commentary Writer. Show the click-through verification feature. Demonstrate Copilot for Finance in Excel for ad-hoc variance questions. If the n8n pipeline is implemented, trigger it manually and walk through each step.
3
Review Workflow Training (20 min): Walk through the complete review-and-approval workflow: Teams notification → SharePoint document → review checklist → Power Automate approval → final delivery. Each designated reviewer must complete one practice cycle during the session. Emphasize the compliance requirement: no narrative ships without documented CPA review.
4
AI Governance Policy Review (15 min): Present the finalized AI Governance Policy. Walk through each section. Obtain managing partner signature. Distribute the updated engagement letter addendum and timeline for rolling it out to clients.
5
Troubleshooting & Support Escalation (10 min): Cover common issues: what to do if the narrative cites an incorrect number (check data mapping first), what to do if the API is down (fall back to manual process), how to request prompt template changes (contact MSP). Provide the MSP support contact, SLA terms, and escalation matrix.
6
Documentation Handoff: Leave behind the following documents (stored in SharePoint /Documentation/ folder): (a) Solution Architecture Diagram, (b) Standard Operating Procedure for Monthly Narrative Generation, (c) AI Governance Policy (signed), (d) Prompt Template Library with version history, (e) Vendor Contact List (Fathom support, OpenAI support, MSP support), (f) Compliance Audit Checklist, (g) FAQ document addressing the top 20 anticipated staff questions.
7
Success Criteria Review (10 min): Jointly confirm the success metrics: narrative generation time < 15 minutes per client (vs. 2-6 hours manual), reviewer approval rate > 85% on first pass, zero factual errors in delivered narratives after review, 100% compliance with audit trail requirements. Schedule the 30-day and 90-day check-in meetings to assess these metrics.

Maintenance

Monthly Maintenance Tasks (MSP Responsibility):

  • Review n8n workflow execution logs for errors or anomalies. Check that all scheduled runs completed successfully. Investigate and resolve any failed executions within 4 business hours during close periods (1st-10th of each month).
  • Monitor OpenAI API usage and costs via the OpenAI dashboard. Verify costs are within the expected $20-70/month range for a 10-client practice. Alert the client if costs exceed 150% of baseline.
  • Verify Fathom data sync status for all connected companies. Re-authenticate OAuth connections if any have expired (QBO tokens expire every 100 days).
  • Export and archive n8n execution logs to SharePoint for long-term compliance retention (n8n Cloud only retains 30 days by default).

Quarterly Maintenance Tasks (MSP Responsibility):

  • Prompt Optimization Review: Sample 5-10 generated narratives from the quarter. Assess quality trends. Refine prompt templates based on recurring reviewer edits. Document all prompt changes with version numbers and rationale.
  • Compliance Audit: Sample 3-5 random client narratives and verify: (a) documented human review approval exists, (b) AI engine identification metadata is present, (c) SharePoint version history is intact, (d) all vendor DPAs are current. Produce a 1-page quarterly compliance summary.
  • Software Update Review: Check for Fathom feature updates, n8n version updates, and OpenAI model changes. Test any updates in a non-production environment before deploying. GPT-5.4 Mini model updates may change output characteristics — always re-test prompts after model updates.
  • Client Satisfaction Check: Brief survey or conversation with the lead reviewer — are narratives meeting quality expectations? Are there new report types or narrative sections they'd like to add?

Semi-Annual Tasks:

  • AI Governance Policy Review: Update the policy document to reflect any new tools, regulatory changes, or lessons learned. Obtain managing partner re-approval if material changes are made.
  • Engagement Letter Audit: Verify all active client engagement letters include the AI usage disclosure addendum.
  • Security Review: Rotate API keys (OpenAI, QBO OAuth). Review access permissions across all platforms. Remove access for any departed staff. Verify MFA enforcement.

Model Retraining / Update Triggers:

  • OpenAI announces a new GPT-5.4 Mini version → test all prompt templates against new model, compare output quality, update n8n model parameter if quality is maintained or improved.
  • Client adds a new service line or significant chart of accounts changes → update KPI definitions and prompt context.
  • Fathom releases Commentary Writer updates → test new features, update SOPs and training materials.
  • Regulatory changes (new AICPA guidance on AI, PCAOB requirements) → update governance policy and compliance procedures.

SLA Considerations:

  • During monthly close period (business days 1-10): 4-hour response time for critical issues (workflow failures, data sync errors), 8-hour response for non-critical.
  • Outside close period: Next business day response.
  • Severity 1 (narrative pipeline completely down): 2-hour response, 8-hour resolution target. Fallback: manual narrative process.
  • Severity 2 (quality degradation, partial functionality): 4-hour response, 24-hour resolution.
  • Severity 3 (cosmetic issues, feature requests): Next business day acknowledgment, scheduled for next quarterly optimization cycle.

Escalation Path:

1
MSP Tier 1: Basic troubleshooting (connectivity, login, data sync issues)
2
MSP Tier 2: Workflow debugging, prompt refinement, API configuration
3
MSP Tier 3 / Developer: n8n workflow modifications, API integration issues, custom code changes
4
Vendor Support: Fathom (support@fathomhq.com), OpenAI (enterprise support portal), Microsoft (CSP support channel via Pax8/Sherweb)

Want early access to the full toolkit?