Fixed Rate Loans

Fixed rate loans between employer and employee can be useful in a variety of scenarios; where the employer wishes to recover the loan through payroll the FixedRateLoanPayInstruction can be used.

The tax treament of loans varies depending on the exact purpose of the loan. Some loans are considered a Benefit in Kind and are therefore subject to tax but not NI, others such as season ticket loan are tax exempt by HMRC. The default PayCode used by the FixedRateLoanPayInstruction if an override is not speicified is LOAN, which is configured by default as taxable but not niable.

Reducing Balance Loan

A loan instruction without a specified LoanAmount will make the deduction at the given RepaymentRate indefinitely. In most cases it is likey that a loan will have a known amount, setting the LoanAmount will automatically stop the deductions once the loan is fully repaid.

Using an employee season ticket loan as an example, first ensure that your employer has the correct paycode configured.

Code Type Description Niable Taxable Default Nominal
STL Deduction Season Ticket Loan no no Other Payroll Deductions
curl -X POST \
  'https://api.test.payrun.io/Employer/ER001/PayCodes' \
  -H 'Accept: application/xml' \
  -H 'Api-Version: default' \
  -H 'Authorization: {OAuthHeader}' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-type: application/xml' \
  -d '<?xml version="1.0"?>
<PayCode xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <EffectiveDate>2018-04-06</EffectiveDate>
  <Revision>1</Revision>
  <Code>STL</Code>
  <DescriptionSeason Ticket Loan</Description>
  <Niable>false</Niable>
  <Taxable>false</Taxable>
  <Territory>UnitedKingdom</Territory>
  <Region>NotSet</Region>
  <Type>Deduction</Type>
  <Benefit>false</Benefit>
  <Readonly>false</Readonly>
  <NominalCode href="/Employer/ER001/NominalCode/NOM004" />
</PayCode>'
curl -X PUT \
  'https://api.test.payrun.io/Employers' \
  -H 'Accept: application/json' \
  -H 'Api-Version: default' \
  -H 'Authorization: {OAuthHeader}' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-type: application/json' \
  -d '{
  "PayCode": {
    "EffectiveDate": "2018-04-06",
    "Revision": "1",
    "Code": "STL",
    "Description": "Seaon Ticket Loan",
    "Niable": "false",
    "Taxable": "false",
    "Territory": "UnitedKingdom",
    "Region": "NotSet",
    "Type": "Deduction",
    "Benefit": "false",
    "Readonly": "false",
    "NominalCode": {
      "@href": "/Employer/ER001/NominalCode/NOM004"
    }
  }
}'

Given the loan is for £2400 and it should be repaid within 12 months, the instruction setup would be as follows.

Loan Identifiers The idenfifier field on the FixedRateLoanPayInstruction is arbitrary, however it is used to group related loan instructions so you should ensure it is unique the employer to avoid confusion.

curl -X POST \
  'https://api.test.payrun.io/Employer/ER001/Employee/EE001/PayInstructions' \
  -H 'Accept: application/xml' \
  -H 'Api-Version: default' \
  -H 'Authorization: {OAuthHeader}' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-type: application/xml' \
  -d '<?xml version="1.0"?>
<FixedRateLoanPayInstruction xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <StartDate>2018-04-06</StartDate>
  <EndDate>2019-04-05</EndDate>
  <Identifier>EE001-STL-18-19</Identifier>
  <Code>STL</Code>
  <RepaymentRate>200.00</RepaymentRate>
  <LoanAmount>2400.00</LoanAmount>
  <AccountingMethod>PAYE</AccountingMethod>
</FixedRateLoanPayInstruction>'
curl -X POST \
  'https://api.test.payrun.io/Employer/ER001/Employee/EE001/PayInstructions' \
  -H 'Accept: application/json' \
  -H 'Api-Version: default' \
  -H 'Authorization: {OAuthHeader}' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-type: application/json' \
  -d '{
  "FixedRateLoanPayInstruction": {
    "StartDate": "2018-04-06",
    "EndDate": "2019-04-05",
    "Identifier": "EE001-STL-18-19"
    "Code": "STL",
    "RepaymentRate": "200.00",
    "LoanAmount": "2400.00",
    "AccountingMethod": "PAYE"
  }
}'

Adjusting the Loan

To adjust the properties of a loan, you will need to supercede the existing loan instruction with an updated one. Continuing the season ticket loan example above, let's assume in month 7 it's realised that there was a mistake and the actual loan amount should have been £2520. In order to pay off the loan in the same period the repayment rate will also need to be adjusted to £220.

First we must end the exitsing loan instruction.

curl -X PATCH \
  'https://api.test.payrun.io/Employer/ER001/Employee/EE001/PayInstruction/STL001' \
  -H 'Accept: application/xml' \
  -H 'Api-Version: default' \
  -H 'Authorization: {OAuthHeader}' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-type: application/xml' \
  -d '<?xml version="1.0"?>
<FixedRateLoanPayInstruction xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <EndDate>2018-09-05</EndDate>
</FixedRateLoanPayInstruction>'
curl -X PATCH \
  'https://api.test.payrun.io/Employer/ER001/Employee/EE001/PayInstruction/STL001' \
  -H 'Accept: application/json' \
  -H 'Api-Version: default' \
  -H 'Authorization: {OAuthHeader}' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-type: application/json' \
  -d '{
  "FixedRateLoanPayInstruction": {
    "EndDate": "2018-09-05"
  }
}'

Then add the updated loan instruction.

To ensure the correct balance is applied to the loan it is critial that you use the same identifier.

curl -X POST \
  'https://api.test.payrun.io/Employer/ER001/Employee/EE001/PayInstructions' \
  -H 'Accept: application/xml' \
  -H 'Api-Version: default' \
  -H 'Authorization: {OAuthHeader}' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-type: application/xml' \
  -d '<?xml version="1.0"?>
<FixedRateLoanPayInstruction xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <StartDate>2018-09-06</StartDate>
  <EndDate>2019-04-05</EndDate>
  <Identifier>EE001-STL-18-19</Identifier>
  <Code>STL</Code>
  <RepaymentRate>220.00</RepaymentRate>
  <LoanAmount>2520.00</LoanAmount>
  <AccountingMethod>PAYE</AccountingMethod>
</FixedRateLoanPayInstruction>'
curl -X POST \
  'https://api.test.payrun.io/Employer/ER001/Employee/EE001/PayInstructions' \
  -H 'Accept: application/json' \
  -H 'Api-Version: default' \
  -H 'Authorization: {OAuthHeader}' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-type: application/json' \
  -d '{
  "FixedRateLoanPayInstruction": {
    "StartDate": "2018-09-06",
    "EndDate": "2019-04-05",
    "Identifier": "EE001-STL-18-19"
    "Code": "STL",
    "RepaymentRate": "220.00",
    "LoanAmount": "2520.00",
    "AccountingMethod": "PAYE"
  }
}'

Protected Earnings

The ProtectedEarnings property of the FixedRateLoanPayInstruction can be used to "protect" an employee's ney pay against the loan deduction. Where the loan deduction would decrease the net pay below the protected earning amount, the dedcution is automatically adjusted to the maximum allowed.

Where ProtectedEarnings is in use with a LoanAmount figure it is not recommeneded to set an end date on the loan instruction as the repayment deductions will not be predictable and the instruction could therefore end before the loan is fully repaid.

YTD

If you are onboarding an employee mid-year or migrating onto PayRun.io you can use the FixedRateLoanYtdPayInstruction to import the history of an exitsing employee loan.

Similar to the example above, if we onboard the employee in month 7, the previous 6 months of the loan can be added as YTD values using this instruction.

curl -X POST \
  'https://api.test.payrun.io/Employer/ER001/Employee/EE001/PayInstructions' \
  -H 'Accept: application/xml' \
  -H 'Api-Version: default' \
  -H 'Authorization: {OAuthHeader}' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-type: application/xml' \
  -d '<?xml version="1.0"?>
<FixedRateLoanYtdPayInstruction xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <StartDate>2018-04-06</StartDate>
  <Identifier>EE001-STL-18-19</Identifier>
  <Code>STL</Code>
  <Value>-1200.00</Value>
  <AccountingMethod>PAYE</AccountingMethod>
</FixedRateLoanYtdPayInstruction>'
curl -X POST \
  'https://api.test.payrun.io/Employer/ER001/Employee/EE001/PayInstructions' \
  -H 'Accept: application/json' \
  -H 'Api-Version: default' \
  -H 'Authorization: {OAuthHeader}' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-type: application/json' \
  -d '{
  "FixedRateLoanYtdPayInstruction": {
    "StartDate": "2018-04-06",
    "Identifier": "EE001-STL-18-19"
    "Code": "STL",
    "Value": "-1200.00",
    "AccountingMethod": "PAYE"
  }
}'