# banking.bacs-processing-date
The three days of the Bacs cycle a payment file joins: the input day (day 1,
the file is accepted), the processing day (day 2) and the entry day (day 3,
when a Direct Credit lands in the recipient's account and a Direct Debit is
taken). Payroll and supplier runs are planned backwards from day 3, and a bank
holiday in the middle moves it.
## The rules
Bacs describes the cycle for Direct Credit as: "Input day is the latest day a
business user/bureau may submit a payment file to Bacs for a processing
cycle. Payment files must be transmitted to Bacs between 07.00 and 22.30";
on day 2 files are delivered to the receiving banks; on day 3 "payments are
simultaneously credited to the recipients' accounts and debited from your
account". Source: Bacs, "Bacs Direct Credit",
https://www.bacs.co.uk/bacs-schemes/getting-started/bacs-direct-credit/
(read 2026-09-23).
The days are Bacs processing days: Monday to Friday, excluding bank holidays
in England and Wales, which Bacs uses as its non-processing days for the whole
of the UK (Scotland's and Northern Ireland's extra holidays do not stop
Bacs). The published Bacs processing calendar is the authority; the bank
holidays here come from `dates.bank-holidays` (gov.uk data, region
`england-and-wales`), and the working-day steps from
`dates.add-business-days`.
So:
- input day = the submission date if it is a processing day and the file was
sent by 22:30 (`afterCutoff` false); otherwise the next processing day.
A file sent at a weekend or on a bank holiday joins the next processing day
whatever the time;
- processing day = the next processing day after the input day;
- entry day = the processing day after that.
## Why `afterCutoff` is a flag
The time of day is the caller's to read (this capability never reads a clock),
and comparing a timestamp with 22:30 is simpler at the call site than passing
a time zone in. The 22:30 deadline is the one Bacs publishes (quoted above); a bureau or bank may set an earlier internal deadline, in which
case pass `afterCutoff` against that.
## Limits
The bank holiday data covers the years gov.uk publishes (2019 to 2028 in
`dates.bank-holidays@1.0.0`). A cycle that needs a year outside it fails with
that capability's error rather than treating an unknown Christmas as a working
day. Next year's calendar is only consulted when the cycle actually runs into
next year, so a December cycle in the last published year still works.
This gives the cycle for a submission. It does not work backwards from a
required arrival date; for that, step back two processing days from the entry
day with `dates.add-business-days` and the same holiday list.