DFD — Outsourced Payroll Bureau
Level-1 model of a bureau running payroll for client employers, drawing the bureau processing zone, HMRC's gateway and the BACS submission path as separate trust zones around special-category pay data.
Make it your own.
title "Payroll bureau — timesheet to payslip"
level 1
entity "Client HR team"
entity Employee
entity "HMRC gateway"
entity "BACS sponsor bank"
entity "Pension provider"
process 1 "Import timesheets"
process 2 "Calculate gross to net"
process 3 "Submit real-time information"
process 4 "Build BACS payment file"
process 5 "Publish payslips"
process 6 "Post pension contributions"
store D1 "Employee master"
store D2 "Pay run results"
store D3 "RTI submission log"
store D4 "Payslip archive"
boundary "Client network" { "Client HR team" }
boundary "Bureau processing zone" { 1, 2, 3, 4, 6, D1, D2, D3 }
boundary "Employee self-service (public)" { Employee, 5, D4 }
boundary "Government and banking" { "HMRC gateway", "BACS sponsor bank", "Pension provider" }
"Client HR team" -> 1 : "timesheets + starters and leavers"
1 -> D1 : "employee record changes"
1 -> D2 : "period input hours"
D1 -> 2 : "tax code, NI category, salary"
D2 -> 2 : "period input hours"
2 -> D2 : "gross, deductions, net pay"
D2 -> 3 : "pay run totals"
3 -> "HMRC gateway" : "FPS and EPS submission"
"HMRC gateway" -> 3 : "tax code notice + acceptance"
3 -> D3 : "submission receipt"
D3 -> 1 : "tax code notice for next period"
D2 -> 4 : "net pay per employee"
4 -> "BACS sponsor bank" : "signed BACS file"
"BACS sponsor bank" -> 4 : "settlement confirmation"
4 -> D2 : "payment status"
D2 -> 5 : "payslip lines"
5 -> D4 : "rendered payslip PDF"
Employee -> 5 : "authenticated payslip request"
5 -> Employee : "payslip and P60"
D4 -> 5 : "historic payslip"
D2 -> 6 : "employee and employer contributions"
6 -> "Pension provider" : "contribution schedule"
"Pension provider" -> 6 : "reconciliation exceptions"
6 -> D2 : "contribution posting flag"
D1 -> 5 : "employee contact details"