Schedule · Payments for Programmers

Payments for Programmers

Schedule

600 words 3 minutes

Data type representing a payment Schedule.

When specifying a Schedule for payment, either use the full datatype or a string containing the Frequency as defined in the “frequency” field.
Examples for the Divisor, the Offset and multiple Schedules are defined below.

Schedule

Property Type Description
frequency Frequency Frequency of the payment
divisor `number [number,number]`
offset `number [number,number]`

Frequency

For frequency only these specific strings are allowed:

"daily" | "weekly" | "monthly" | "quarterly" | "yearly"

Divisor

The divisor defines how often to apply the payment. Thus, a payment on every even (Iso)week would specify "frequency":"weekly" and "divisor":2.

If the billing is supposed to happen at a specific time inside of the payment period, this can be done using a more complex divisor.
For example to bill every 5 days, but always on the third day of the period, specify "frequency":"daily" and "divisor":[3,5].

All numbers in the divisor have to be positive and in case of a tuple, the second number of the tuple has to be larger than the first number.
It should also be considered that divisors use the modulo division and divisors that are not dividends of the timeframe that they divide can lead to much larger effective payment intervals.

For example, with "frequency":"monthly" and "divisor":7 there will only be a single payment a year, which will happen in July. When using the divisor with “weekly” frequencies also consider that an ISO year has either 53 or 52 weeks. The “daily” frequency uses the day of the month for the divisor.

Offset

To always bill at a specific point of time in the frequency, an offset can be specified.
As such, to bill always on a specific day of the week, for a “weekly” frequency, specify an integer value between 0 and 6, with 0 indicating a sunday and 6 indicating a saturday.

For a “monthly” frequency, the offset specifies the zero-indexed day of the month, ranging from 0 to 30. If this number is larger than the number of days of the month, it will default to the last day of the month. If you specify an integer of -1 it will take the last day of the month, -2 the second to last and -3 the third to last day.

A “quarterly” frequency can either specify the month of the quarter, with 0 being the first and 2 the last day of the quarter, or specify both the month of the quarter and the day of the month.
In the later case, the first tuple element has to be the month of the quarter and the second element the day of the month.

For a “yearly” frequency, the offset can specify the month of year with 0 indicating january and 11 indicating december. To also specify the day of the month, set a tuple similar to the quarterly case, with the first tuple element as the month of the year and the second element as the day of the month.

An offset cannot be applied to a “daily” frequency.

Schedule Examples

Every month:
{
    "frequency":"monthly"
}
The first day of every even month (February, April, ..., December):
{
    "frequency":"monthly",
    "divisor":2,
    "offset":1
}
The last day of every quarter:
{
    "frequency":"quarterly",
    "offset":[2,-1]
}
Payment period of every third (Iso)week of the year, paying on wednesday in the middle week:
{
    "frequency":"weekly",
    "divisor":[1,3],
    "offset":3
}
Every even year on the 13th of december:
{
    "frequency":"yearly",
    "divisor":2,
    "offset":[11,13]
}