| name | ideal-direct-sop-assistant |
| description | Automate Ideal Direct finance and supply chain SOPs with browser-based workflow guidance. Handles payroll, working hours, purchase orders, and audits using Playwright MCP. |
Ideal Direct SOP Assistant
Core Principle
GUIDE, AUTOMATE, VALIDATE - Walk users through Ideal Direct business processes with browser automation, data validation, and audit trail creation.
When to Activate
Activate when user mentions:
- "payroll" + "joiners" or "leavers" or "A4G"
- "working hours" + "summary" or "payroll"
- "purchase order" or "PO" + "CU"
- "PDM audit" or "finance audit"
- "WorkSmarter" + any finance task
- "ideal direct" + any SOP reference
Also activate for:
- SOP numbers: F.4.B, F.4.E, F.18.A, SC.15.A
- Keywords: "new starter", "leaver", "A4G template", "fortnightly payroll"
MCP Integration
This skill requires:
- playwright: Browser automation (WorkSmarter, SharePoint Excel, ClickUp)
- filesystem: Save reports, screenshots, audit files
- mcp-response-optimization: Token management (MUST be active)
Critical: MCP efficiency skill must be installed and active before using this skill to prevent token overflow from browser operations.
Available SOPs
SOP F.4.B: Add Joiners/Leavers to Payroll
Purpose: Update A4G payroll template with new starters and leavers from WorkSmarter
When to use: Fortnightly payroll processing, employee status changes
Trigger phrases:
- "Process payroll joiners and leavers"
- "Add new starter to payroll"
- "Update leaver in A4G template"
- "Run SOP F.4.B"
SOP F.4.E: Summarise All Working Hours
Purpose: Collate hours and holidays from WorkSmarter into A4G template
When to use: Fortnightly payroll period, hours reconciliation
Trigger phrases:
- "Summarise working hours"
- "Collate hours and holidays"
- "Process payroll hours"
- "Run SOP F.4.E"
SOP SC.15.A: Add Purchase Order to CU
Purpose: Add purchase orders to CU system (supply chain)
When to use: New purchase order processing
Trigger phrases:
- "Add purchase order"
- "Process PO in CU"
- "Run SOP SC.15.A"
SOP F.18.A: PDM Audit
Purpose: Finance audit process for PDM
When to use: Regular audit cycles
Trigger phrases:
- "Run PDM audit"
- "Process finance audit"
- "Run SOP F.18.A"
SOP F.4.B Workflow: Payroll Joiners/Leavers
Step 1: Download WorkSmarter Report
Action: Retrieve joiners and leavers report
Playwright Automation:
// Navigate to WorkSmarter
browser_navigate("https://worksmarter.com")
browser_click("Reports")
browser_click("Joiners and Leavers")
browser_click("Download")
User Prompt: "I've automated opening WorkSmarter and downloading the joiners/leavers report. The file should now be in your Downloads folder. Let me know when you see it."
Data to Extract:
- New starters: Name, start date, salary, pay frequency
- Leavers: Name, leave date, length of service
Validation:
- Check if start date falls in current payroll period
- Verify leaver has termination date populated
Step 2: Open SharePoint Payroll Template
Action: Navigate to Ideal Direct Finance folder and open A4G template
Playwright Automation:
// Open SharePoint payroll template
browser_navigate("https://idealdirectuk.sharepoint.com/:x:/s/IdealDirectFinance/EUYMq4IOBGhEvkrT_4njTiwBVdMlgLbi0zaascp_Z0nKnw?e=KRWmZd")
// Wait for Excel Online to load
browser_wait_for({ text: "Ideal Direct Limited - Fortnightly Payroll Template" })
User Instructions:
- Save as new copy
- Rename for current fortnight (e.g., "Fortnight 8")
- Confirm when template is open
MCP Efficiency Rule:
- DON'T extract full spreadsheet
- Only query specific cells when needed
Step 3: Update Leaver Information
Action: Find leaver row and update status
Playwright Automation:
// User provides leaver name (e.g., "Roy Keane")
// Search for employee in template
browser_click({ element: "Search box", ref: "employee_search" })
browser_type("Roy Keane")
// Navigate to Starter/Leaver field
browser_click({ element: "Starter/Leaver dropdown", ref: "status_dropdown" })
browser_select_option({ values: ["Leaver"] })
// Input leave date
browser_type("27/05/2025", { element: "Leave date field", ref: "leave_date" })
Validation Checklist:
- ✅ Leave date matches WorkSmarter report
- ✅ Status changed to "Leaver"
- ✅ Employee row found in template
Screenshot Audit:
browser_take_screenshot({ path: "/outputs/leaver_updated.png" })
Step 4: Add New Starter
Action: Insert new row and populate starter information
Playwright Automation:
// Find last employee row
browser_click({ element: "Last employee row", ref: "last_row" })
// Insert new row
browser_click("Insert row below")
// Copy last employee format
browser_click("Copy row format")
// Input new starter details
browser_type("Juan Sebastien Veron", { element: "Employee name", ref: "name_field" })
browser_type("£12.50", { element: "Hourly rate", ref: "rate_field" })
browser_select_option({ element: "Pay type", values: ["Hourly"] })
browser_select_option({ element: "Status", values: ["Starter"] })
browser_type("27/05/2025", { element: "Start date", ref: "start_date" })
Validation Checklist:
- ✅ All fields populated from WorkSmarter report
- ✅ Pay type set correctly (Hourly/Salary)
- ✅ Start date matches payroll period
Step 5: Verify Formula Ranges
Action: Ensure totals include new starter row
Playwright Automation:
// Click total row at bottom
browser_click({ element: "Total hours cell", ref: "total_cell" })
// Verify formula includes new row
const formula = browser_evaluate("document.activeElement.value")
// Expected: =SUM(B2:B51) after adding Juan
// Check each total column
const columns_to_check = ["Hours", "Gross Pay", "Deductions"]
for (const col of columns_to_check) {
browser_click({ element: `${col} total`, ref: `${col}_total` })
// Verify formula range
}
User Instructions: "Double-click each total cell to verify the formula includes the new row. The range should extend from B2 to B51 (or your last employee row)."
Validation:
- ✅ All total formulas updated
- ✅ New row included in calculations
- ✅ Gross total matches expected
Screenshot Audit:
browser_take_screenshot({ path: "/outputs/formulas_verified.png" })
Step 6: Save and Create ClickUp Task
Action: Save template and assign for manager review
Playwright Automation:
// Save Excel template
browser_click("File → Save As")
// Open ClickUp
browser_navigate("https://app.clickup.com")
browser_click("New Task")
// Create review task
browser_type("Payroll Joiners/Leavers - Fortnight 8", { element: "Task name", ref: "task_name" })
browser_type("Ready for manager review. Template updated with:\n- Leaver: Roy Keane (27/05/25)\n- Starter: Juan Sebastien Veron (£12.50/hr)", { element: "Description", ref: "task_desc" })
browser_click("Attach link")
browser_type("sharepoint_template_url", { element: "Link URL", ref: "link_url" })
browser_click("Assign to: Line Manager")
browser_click("Create Task")
Completion Message:
✅ SOP F.4.B Complete
Updated:
- Leaver: Roy Keane (leave date: 27/05/25)
- New starter: Juan Sebastien Veron (£12.50/hr, start: 27/05/25)
- Formulas verified and updated
- ClickUp task created for manager review
Audit trail saved:
- /outputs/leaver_updated.png
- /outputs/formulas_verified.png
Next: Manager reviews and approves for A4G submission
SOP F.4.E Workflow: Working Hours Summary
Step 1: Download All Reports
Action: Retrieve hours, holidays, and absences from WorkSmarter
Playwright Automation:
// Download approved hours
browser_navigate("https://worksmarter.com/reports/hours")
browser_click("Approved Hours")
browser_click("Download")
// Download holidays
browser_navigate("https://worksmarter.com/reports/holidays")
browser_click("Download")
// Download absences (if applicable)
browser_navigate("https://worksmarter.com/reports/absences")
browser_click("Download")
User Prompt: "I've downloaded all three reports from WorkSmarter. Check your Downloads folder for:
- Approved hours report
- Holidays report
- Absences report (if any)
Open each file to verify data is for the correct payroll period."
Step 2: Collate Data in Excel
Action: Combine reports into single summary sheet
Playwright Automation:
// Open new Excel workbook in SharePoint
browser_navigate("sharepoint_working_hours_location")
browser_click("New → Excel Workbook")
// Create tabs
browser_click("Add Sheet")
browser_type("Hours", { element: "Sheet name", ref: "sheet_name" })
browser_click("Add Sheet")
browser_type("Holidays", { element: "Sheet name", ref: "sheet_name" })
// User pastes data from downloads into respective tabs
User Instructions:
- Open downloaded Hours report
- Copy data to "Hours" tab
- Open downloaded Holidays report
- Copy data to "Holidays" tab
- Create "Total" column: =Hours + Holidays
Validation:
- ✅ All employee hours accounted for
- ✅ Holiday hours separated
- ✅ No absences to process (or processed if applicable)
Step 3: Create Total Column
Action: Calculate combined hours + holidays
Playwright Automation:
// Navigate to Summary tab
browser_click({ element: "Summary tab", ref: "summary_tab" })
// Create Total column header
browser_click("Cell C1")
browser_type("Total (Hours + Holidays)")
// Add formula for first employee
browser_click("Cell C2")
browser_type("=Hours!B2+Holidays!B2")
// Copy formula down for all employees
browser_click("C2")
browser_click("Copy")
browser_click("C2:C50")
browser_click("Paste")
User Verification: "Check the Total column. It should show combined hours + holidays for each employee. Spot-check a few rows to ensure calculations are correct."
Step 4: Update A4G Payroll Template
Action: Transfer totals to official payroll template
Playwright Automation:
// Open previous week's A4G template
browser_navigate("sharepoint_a4g_template_location")
// Navigate to "Hours worked in pay period" column
browser_click({ element: "Column B header", ref: "hours_column" })
// User overwrites with new data from summary
User Instructions:
- Copy Total column from summary sheet
- Paste into "Hours worked in pay period" column (Column B) in A4G template
- Verify totals match at bottom of template
Validation:
// Compare summary total to template total
const summary_total = browser_locator(".summary-total").textContent()
const template_total = browser_locator(".template-total").textContent()
if (summary_total === template_total) {
console.log("✅ Totals match - ready to save")
} else {
console.log("❌ Totals don't match - check data entry")
}
Step 5: Save and Send for Review
Action: Save template and notify line manager
Playwright Automation:
// Save template
browser_click("File → Save")
// Take screenshot of totals for audit
browser_take_screenshot({ path: "/outputs/hours_summary_totals.png" })
// Create ClickUp task
browser_navigate("https://app.clickup.com")
browser_click("New Task")
browser_type("Working Hours Summary - Fortnight 8 - Ready for Review", { element: "Task name" })
browser_click("Assign to: Line Manager")
browser_click("Create Task")
Completion Message:
✅ SOP F.4.E Complete
Processed:
- Approved hours: [total hours]
- Holidays: [total holiday hours]
- Total combined: [total]
Verified:
- Summary totals match A4G template
- All employees accounted for
- Ready for manager review
Audit trail:
- /outputs/hours_summary_totals.png
Next: Manager reviews and approves for A4G submission
Token Management Rules
CRITICAL: This skill generates browser automation commands that can produce massive token responses. Follow these rules strictly.
Rule 1: Never Display Full Page Content
// ❌ NEVER:
const page_html = browser_snapshot() // 50,000+ tokens
// ✅ ALWAYS:
browser_click({ element: "Employee name field", ref: "A45" })
// Returns: "Clicked cell A45" (10 tokens)
Rule 2: Screenshots Save Only, Never Display
// ❌ NEVER:
const screenshot = browser_take_screenshot()
// Returns base64 image = 125,000+ tokens
// ✅ ALWAYS:
browser_take_screenshot({ path: "/outputs/audit.png" })
// Returns: "Screenshot saved: /outputs/audit.png" (20 tokens)
Rule 3: Target Specific Elements
// ✅ Good - specific cell reference
browser_type("£12.50", { element: "Hourly rate", ref: "B45" })
// ❌ Bad - full table query
const table = browser_locator("table").innerHTML()
// 10,000+ tokens
Rule 4: Limit Data Extraction
// Only extract what you need to validate
const employee_count = browser_locator(".employee-row").count()
console.log(`Found ${employee_count} employees`)
// DON'T extract full employee list
Rule 5: Save Large Responses to Files
// If WorkSmarter returns large report
const report = browser_locator(".report-data").textContent()
// Save, don't display
filesystem.write_file({
path: "/outputs/worksmarter_report.txt",
content: report
})
return "Report saved: /outputs/worksmarter_report.txt"
Token Budget per SOP
| SOP | Steps | Est. Tokens | Status |
|---|---|---|---|
| F.4.B Payroll Joiners/Leavers | 6 | 1,500 | ✅ Safe |
| F.4.E Working Hours Summary | 5 | 1,800 | ✅ Safe |
| SC.15.A Purchase Order | TBD | <2,000 | Pending |
| F.18.A PDM Audit | TBD | <2,000 | Pending |
Safe limit: <2,000 tokens per complete SOP workflow
Pre-Execution Checklist
Before starting any SOP:
- ✅ MCP efficiency skill active?
- ✅ User logged into WorkSmarter?
- ✅ SharePoint access available?
- ✅ ClickUp account accessible?
- ✅ Downloads folder empty/organized?
If all YES → Proceed with SOP
Error Handling
If WorkSmarter Login Fails
"I couldn't access WorkSmarter. Please:
1. Open WorkSmarter manually
2. Log in
3. Tell me when you're logged in
Then I'll continue with the report download."
If Excel Formula Doesn't Update
"The formula range didn't update automatically. Let's fix it manually:
1. Double-click the total cell
2. Update the range from B50 to B51 (or your last row)
3. Press Enter
4. Verify the new total includes all employees"
If Totals Don't Match
"❌ Totals don't match:
- Summary: [X] hours
- Template: [Y] hours
- Difference: [Z] hours
Check:
1. All employees copied from summary?
2. Any duplicate entries?
3. Formula errors in Total column?
I can help investigate once you identify which employees are missing."
Success Checklist
SOP completion is successful when:
- ✅ All data transferred from WorkSmarter
- ✅ Excel formulas updated correctly
- ✅ Totals verified and match
- ✅ Screenshots saved for audit
- ✅ ClickUp task created
- ✅ Manager notified
- ✅ Token usage stayed under 2,000
Post-Execution
After SOP completion:
- Review audit screenshots in /outputs/
- Verify ClickUp task assigned correctly
- Confirm manager received notification
- Archive WorkSmarter downloads
- Document any errors or edge cases
Integration with Other Skills
Works best with:
- mcp-response-optimization (REQUIRED) - Token management
- concise-execution-mode - Minimal explanations for experienced users
System Requirements
- Windows PC (tested environment)
- Chrome/Edge browser
- Active sessions:
- WorkSmarter
- SharePoint (Ideal Direct Finance folder)
- ClickUp
Definitions
New Starter - Person who has commenced employment with Ideal Direct Leaver - Person who has ceased employment with Ideal Direct WorkSmarter - Online HR system for hours, holidays, absences A4G Payroll Template - Excel file sent to A4G for external payroll processing Fortnight - Two-week payroll period
Training Recommendations
For new users:
- Run SOP F.4.B once with supervision
- Verify understanding of formula validation
- Practice ClickUp task creation
- Review audit screenshots for completeness
For experienced users:
- Activate concise-execution-mode skill
- Reduce step-by-step explanations
- Focus on validation only
Deployment: Import .zip to Claude Desktop → Settings → Skills Prerequisites: MCP efficiency skill must be active Impact: Automates 4 critical finance/supply chain SOPs Result: Consistent, auditable, error-free SOP execution