Skip to main content

Available schemes

Supported pay periods

Applies to ordinario and integral. Under split_monthly the dependency graph runs over the monthly figures and the result is split afterwards, so every bracket, floor and ceiling is evaluated exactly where the law defines it. The two fortnights add up to the month per line, which is what makes them reconcile against the monthly filing. period.days takes no part in the split — the factor comes from period.type. If days is not 15, the response carries a PERIOD_DAYS_IGNORED warning. weekly is rejected because a month does not contain a whole number of weeks, so four weeks cannot be made to add up to the monthly filing. See Pay periods for the full model and the cost of the naive shortcut.

Example request — biweekly

The response reports period_basis.sequence: 1, periods_in_month: 2 and a monthly_equivalent you can reconcile the month against.

Ordinario

The ordinario scheme covers standard employees under Colombian labor law (Codigo Sustantivo del Trabajo). Includes all mandatory social security contributions and income tax withholding.

What it calculates

Employee deductions:
  • Salud — Health contribution (4% employee share)
  • Pension — Pension contribution (4% employee share)
  • Fondo de Solidaridad Pensional — Solidarity fund for salaries >= 4 SMMLV
  • Retencion en la fuente — Income tax withholding using UVT-based progressive brackets
Employer contributions:
  • Salud patronal — Employer health (8.5%)
  • Pension patronal — Employer pension (12%)
  • ARL — Occupational risk insurance
  • Parafiscales — SENA, ICBF, Caja de Compensacion

Employee inputs

risk_class_rate has no default. A request for Colombia that omits it is rejected with 422 VALIDATION_ERROR on employee.risk_class_rate; in a batch, the path is employees.{i}.risk_class_rate and the whole batch is rejected before any row runs.

ARL risk classes (Decreto 1607/2002)

The class is assigned by the ARL, never by Clevis. This table is reference material: the engine receives the rate already resolved and never a class label, because mapping an economic activity (CIIU) to a risk class would require the activity catalogue of every country. Clevis does not validate that the rate matches the employer’s activity.

Horas extra y recargos

The client classifies the hours; the engine does not. Clevis receives hours already sorted into the seven buckets above. Deciding whether an hour is nocturna, dominical or festiva needs a holiday calendar and a shift clock, both of which live in your system. There is no holiday calendar in this API.
Hours accept fractional values. The 0-400 validation bound is a guard against garbage input, not the legal cap — Clevis does not enforce CST Art. 167 (2 h/day, 12 h/week). The distinction that matters: for an ordinary hour worked at night or on a Sunday the 100% is already inside the monthly salary, so only the surcharge is settled. For an overtime hour the hour itself is not in the salary, so it is paid in full plus the surcharge. Surcharges add, they do not compound. A nocturnal Sunday overtime hour is 1 + 0.90 + 0.75, not 1 x 1.90 x 1.75. Horas extra and recargos are salary (CST Art. 127), so they feed the IBC and the prima and cesantias bases.

Ley 2466 de 2025 — rates resolve by date

The recargo dominical is modelled as a time series, not a constant. The rate is resolved from period.start_date, so a June 2026 period resolves 0.80 and a July 2026 period resolves 0.90. The 2027 step is already loaded — a July 2027 period resolves the right rate with no change on your side. The night band also starts at 7:00 p.m. (previously 9:00 p.m.) from 25 Dec 2025, also under Ley 2466.

Exoneracion parafiscal (ET Art. 114-1)

overrides.aplica_exoneracion_114_1 exempts employer salud, SENA and ICBF. It does not cover CCF or pension. The flag is per employee, not per company: the same company exonerates a worker earning 3 SMMLV and pays in full for one earning 12. Clevis receives the flag already resolved, because the exoneration also requires the employer to be a corporate income tax filer — an attribute of the company that never arrives in a request.

Threshold warnings

Two flags are checked against the salary that gates them. A mismatch produces an entry in warnings and never changes an amount — the calculation honours the flag as sent. Both are measured on salario_basico, not on total earnings. Each warning message states exactly what it compared, so a payroll officer who disagrees can see the criterion rather than guess it. aplica_exoneracion_114_1 only warns when it is on above the threshold, not when it is off. Warning on the off case would fire on almost every legitimate ordinary request, which is how an integrator learns to ignore the channel altogether.

Key reference values

Example request

Response bases

Two bases in the response were separated, which is visible if you already parse it: The employer table prestaciones_prima_vacaciones_patron was likewise split into prestaciones_prima_patron and prestaciones_vacaciones_patron. Both changes show up in the response and in the audit trail.
The integral scheme does not settle surcharges separately — the 30% prestational factor absorbs them. The seven hour fields apply to ordinario only.

Integral

The integral scheme applies to employees earning >= 13 SMMLV (salario integral). Social security contributions are calculated on 70% of the salary, and the remaining 30% is considered a prestational component.

What it calculates

  • Salud and pension — Calculated on 70% of salary (IBC)
  • Fondo de Solidaridad Pensional — Progressive rates based on salary in SMMLV
  • Retencion en la fuente — UVT-based progressive brackets (Procedimiento 1)

Key differences from ordinario

Example request