CCNL Components¶
Every CCNL is built from a standard set of components. Understanding them is essential for interpreting the library's input types and output fields.
1. Job levels (livelli di inquadramento)¶
Workers are classified into a hierarchy of levels (livelli), each corresponding to a skill and responsibility band. Levels are typically grouped into categories:
| Category | Description |
|---|---|
| Operaio | Blue-collar worker |
| Impiegato | White-collar employee |
| Quadro | Middle management (not quite dirigente) |
| Dirigente | Senior executive |
Classification is determined at hire and may change through vertical progression. Minimum salaries are non-decreasing across levels: a higher level always carries a higher minimum than the one below it.
2. Base salary (minimo tabellare)¶
The base salary is the statutory floor for each level. It is set by the CCNL and cannot be reduced by individual contract.
Because CCNLs are renewed in tranches, the minimum changes at scheduled dates.
The library models these as a time series: every call passes an as_of date and
the engine resolves the correct value.
Example — Metalmeccanico C3 level (monthly, gross):
| Effective date | Base salary (EUR/month) |
|---|---|
| 2024-06-01 | 2,133 |
| 2025-01-01 | 2,172 |
| 2026-01-01 | 2,211 |
3. Historical allowances (indennità storiche)¶
Three frozen elements appear in many CCNLs:
| Allowance | Description | Value |
|---|---|---|
| Contingenza | Cost-of-living supplement, frozen Nov 1993 (L. 438/1992) | Level-specific |
| EDR | Elemento Distinto della Retribuzione, added in 1993 | €10.33/month |
| Terzo elemento | Sector-specific third element | Varies |
Conglobamento vs. separated: Many modern CCNLs conglobate (merge) contingenza and EDR into the base salary figure, so the published minimum already includes them and no separate rows appear. Others keep them as distinct allowance rows. The library handles both: when allowances are listed separately, the engine sums them; when conglobated, the base salary column already reflects the merged value.
4. Seniority increments (scatti di anzianità)¶
Workers accumulate a pay increment — scatto di anzianità — at regular intervals of service. Key parameters:
- Cadence: how many months between increments (e.g. 24 months for Metalmeccanico, 36 months for Commercio).
- Amount: a fixed EUR amount per level, defined in the CCNL.
- Maximum: the number of increments that can be accumulated (e.g. 5 for most).
Seniority is based on company tenure, not age. It is distinct from career progression, which involves a change of level.
Some CCNLs use a tiered model: the cadence changes after a certain number of increments (e.g. the first 4 increments every 24 months, then every 36 months).
5. Additional months and hourly divisor¶
Additional months¶
All Italian workers receive a thirteenth month (tredicesima) paid in December.
Many CCNLs add a fourteenth month (quattordicesima), usually in June. The
engine accounts for both via the parameters.additional_months time series.
additional_months is an entitlement in equivalent months of pay, not a count
of payslips. Cooperative Sociali grants 13.5: a full tredicesima and half a
quattordicesima. The engine keeps three values apart:
| Concept | Type | Cooperative Sociali |
|---|---|---|
| Equivalent months of pay | ExtraMonthEntitlement |
13.5 |
| Payslips in the year | PayrollRunCount |
14 |
| IRPEF withholding slots | WithholdingSchedule |
14, the June quattordicesima carrying 0.5 |
The IRPEF projection and the year-end conguaglio run on the withholding schedule. Each upcoming slot is projected at the pay its run kind carries (a regular month, or the extra-month pay scaled by its fraction), and the last slot settles the tax on the final taxable income. A value strictly between 12 and 13 (a partial tredicesima) is rejected.
These counts are for a full year. With an employment period, only the runs of months the employment overlaps exist, and an extra month has a run only when its payment month is one of them. The withholding schedule follows the payments actually made in the tax year. Each extra month pays one twelfth per qualifying month of its window (at least 15 accruing days), and the ratei of an extra month not paid before the termination are paid on the last regular run.
Hourly divisor (divisore orario)¶
The hourly divisor converts a monthly salary into an hourly rate. It is derived from
the standard weekly hours defined in the CCNL (see parameters.hourly_divisor in the
contract's JSON file). Each CCNL defines its own value; never copy one contract's
divisor into another.
6. Apprenticeship (apprendistato professionalizzante)¶
The apprendistato professionalizzante (D.lgs. 81/2015, Art. 41–47) is a fixed-term training contract that allows reduced labour costs. Key features:
- Duration: up to 36 months (can extend to 60 in some sectors).
- Employer can terminate without notice at the end of the period.
- Reduced INPS employer contributions (often ~10% for employers with < 9 employees).
Two distinct salary models exist:
Percentage track (percentuale)¶
The apprentice's pay is expressed as a percentage of the destination level's minimum, increasing at preset thresholds.
Example — Metalmeccanico:
| Phase | Months elapsed | % of destination level |
|---|---|---|
| 1 | 0–11 | 70% |
| 2 | 12–23 | 80% |
| 3 | 24+ | 90% |
Used in: Metalmeccanico, Chimica, Edilizia, and most industrial CCNLs.
What the percentage reduces. The percentage applies to the base salary
(minimo tabellare), to the seniority and to each fixed allowance whose
apprenticeship_pct_relevant flag is true. An allowance with the flag
false is paid at its full contractual value. The flag defaults to true,
so an allowance is reduced unless the contract data exempts it.
Many CCNLs list the elements the percentage applies to, and whatever is not listed is paid in full. Example: Trasporto Aereo, Gestori Aeroportuali, Art. G14 c. 16 applies the percentage to "minimi tabellari in vigore, indennità di contingenza"; the EDR (Art. G22) is not listed and is paid in full to apprentices.
| Level 4, 36-month track, month 0 (75%) | Full value | Apprentice |
|---|---|---|
| Minimo tabellare | 1307.47 | 980.60 |
| Indennità di contingenza | 522.19 | 391.64 |
EDR (apprenticeship_pct_relevant: false) |
41.85 | 41.85 |
| Gross | 1871.51 | 1414.09 |
Each component is rounded to the cent after the percentage. The run records
an apprenticeship_scaling decision with the percentage, the scaled
components (base_salary, seniority when due, allowance codes) and the
unscaled allowance codes. Part-time scaling, when it applies, follows the
apprenticeship percentage.
Bundled CCNLs that exempt allowances: Trasporto Aereo (EDR), Energia e Petrolio (EDR IPCA, indennità di funzione), Igiene Ambientale Utilitalia (EDR, indennità integrativa). Vetro Meccanizzato flags its TER but models no apprenticeship track, so the flag has no effect there.
Under-classification track (sottoinquadramento)¶
The apprentice is formally assigned to a level two steps below the destination, then moves up at scheduled months.
Example — Commercio:
| Phase | Months elapsed | Effective level |
|---|---|---|
| 1 | 0–11 | Destination − 2 |
| 2 | 12–23 | Destination − 1 |
| 3 | 24+ | Destination |
Used in: Commercio, Turismo, and most tertiary-sector CCNLs.
7. Part-time¶
Part-time contracts scale base pay, seniority, and most allowances proportionally to the agreed ratio of full-time hours. Individual frozen elements (ad personam amounts agreed outside the CCNL table) are not scaled.
8. Fixed-term (tempo determinato)¶
Remuneration is identical to a permanent contract. The only difference is an additional NASpI addizionale charged to the employer on the INPS base: 1.40%, plus 0.50% for each renewal of the contract (Art. 2, c. 28, L. 92/2012). It is not due for replacement, seasonal, apprenticeship and public administration contracts (c. 29) nor for the operai agricoli (c. 3); see Employment types.
9. Social contributions (INPS)¶
Percentage-based (all sectors except domestic work)¶
Both employee and employer contribute a percentage of gross salary, up to an annual
ceiling (massimale IVS). Rates vary by sector, employer size, and contract type.
The sector/ files bundled with the library carry the precise rates for each year
and sector.
Public employees contribute to the fund of INPS Gestione Dipendenti Pubblici their
CCNL names (meta.public_pension_fund): CTPS for the State (8.80% employee, 24.20%
employer), CPDEL for the enti locali and the health service, CPS for its doctors and
veterinarians (8.85% and 23.80%).
They also finance the end-of-service fund of the Gestione on 80% of the pay: ENPAS
for the State (the tredicesima left out), INADEL for the others (the tredicesima
included). State the regime in Employment.public_end_of_service:
tfs: the worker pays 2.50%, the administration 7.10% (ENPAS) or 3.60% (INADEL); no TFR accrues;tfr_inps: the administration pays 9.60% or 6.10% and the gross is reduced by the 2.50% the worker no longer pays, a negative earningpublic_tfr_reductionoutside the INPS and TFR bases (DPCM 20 dicembre 1999 art. 1 c. 3), so net, taxable and the cost of the administration equal those of the TFS; INPS accrues the TFR notionally, the run posts none. A fixed term or a member of Perseo Sirio or Espero is on the TFR:tfsraisesInvalidInputError;tfr_employer: enti pubblici non economici and enti di ricerca accrue the TFR themselves and pay the Gestione nothing.
Left None, the run leaves these contributions out with the issue
public_end_of_service_unknown.
Every public employee also pays the credit contribution of the Gestione: 0.35% of the
pension base (L. 662/1996 art. 1 c. 242), the component credit_employee. The
employees of an ente di diritto pubblico other than the State, the Province and the
Comuni also pay the Assicurazione Sociale Vita, ex ENPDEP (INPS circ. 104/2014):
0.027% of the worker and 0.093% of the employer on the pension base. State it in
EmployerProfile.public_life_insurance; the CCNL of the State school and of the
forze di polizia fix it as not owed, the others leave the run incomplete with the
issue public_life_insurance_unknown until it is stated. The permanent teachers of
the scuola dell'infanzia and primaria (CCNLParameters.enam_levels) pay the ENAM:
1% of 80% of the stipendio (L. 93/1957 art. 3), the component enam_employee; the
stipendio leaves out the IIS conglobata, which the bundle does not give apart, so the
run has the open limitation enam_base.
Flat hourly rate (domestic work)¶
Domestic workers (lavoro domestico) use a different system: INPS publishes tables of fixed per-hour contributions by wage bracket. No percentage of gross applies.
Contribution base¶
The INPS base is the gross pay of the run with the events that enter it; a fixed
allowance is never taken out of it, so the contract data rejects
contribution_relevant = false. The TFR base leaves out the allowances flagged
tfr_relevant = false (art. 2120 c. 2 c.c.: "salvo diversa previsione dei contratti
collettivi"), and so do the bases built on it: the pension funds on the TFR base and
the end-of-service base of a public employee.
10. IRPEF and surcharges¶
IRPEF¶
Italian personal income tax is progressive, computed on reddito imponibile (taxable
income = gross − INPS employee contributions). Rates and brackets are set by law
annually; values for each year are in the bundled sector/ files.
Workers earning from employment receive a work income deduction (detrazione da lavoro dipendente, Art. 13 TUIR): a credit that decreases as income rises and reaches zero around €50,000.
Workers with taxable income between €8,500 and €28,000 receive the trattamento integrativo (Art. 1 D.L. 3/2020): €1,200/year, paid on the payslip by the employer as withholding agent (art. 1 c. 3) and offset against the taxes it pays over.
Addizionale regionale¶
A regional surcharge on taxable income, with rates set by each region. Rates are
in the bundled surtax/regional/ files.
Addizionale comunale¶
A municipal surcharge on taxable income, identified by the municipality's codice
catastale. Rates are in the bundled surtax/municipal/ files.
Domestic work exception¶
A household employer is not a sostituto d'imposta: it is not among the withholding agents of art. 23 c. 1 DPR 600/1973 (art. 33 c. 1 D.Lgs. 33/2025 from 2027). Its payslips withhold no IRPEF and no surcharges, and pay no trattamento integrativo, somma esente or ulteriore detrazione, since those are recognized by the withholding agent (D.L. 3/2020 art. 1 c. 3; L. 207/2024 art. 1 c. 7). The worker declares the income and pays the tax directly. See Engine: Domestic work.
11. TFR (Trattamento di Fine Rapporto)¶
The severance fund accrues annually at 1/13.5 of the TFR-relevant remuneration
(Art. 2120 c.c.). The TFR base is gross pay minus elements flagged
tfr_relevant = false in the contract data.
L. 297/1982 art. 3 cc. 15-16 raised the employer IVS rate by 0.50% of the INPS taxable pay and has the employer deduct that contribution from the TFR quota of the same period, or from the TFR paid to a pension fund. The 0.50% is already inside the employer IVS rate (23.81% in industria), so the employer cost counts it once: the INPS contributions include it and the TFR accrued is net of it. The deduction is charged on the IVS base of the run, events outside the TFR base included, and never exceeds the quota. The bundle applies the deduction in industria, terziario, artigianato, credito and edilizia. It does not apply it, and the quota accrues whole, in public administration (not insured with the FPLD), in domestic work (named by c. 15, but paid by flat hourly contributions with no percentage IVS base) and in agricoltura (the composition of its employer rate is not sourced). For apprentices the 0.50% is not due (INPS circ. 70/2007, note 5): the quota accrues whole.
The TFR not destined to a pension fund goes to the Fondo Tesoreria INPS
(L. 296/2006 art. 1 cc. 755-756) when the employer is obliged: at least 50
employees on the yearly average of 2006, or of the year the activity
started (DM 30 gennaio 2007 art. 1 c. 6); from 2026 also an employer that
reaches the threshold later, on the average of the year before, with at
least 60 employees in 2026 and 2027 (c. 756 as in force from 12 August
2026). Some workers are excluded (DM art. 1 c. 8), and so are domestic
employers and the public administrations. The Fondo takes the quota net of
the 0.50%. The headcount of the run is not the test: the caller states the
outcome as Employment.tfr_treasury_fund.
The fund, excluding the quota accrued in the year, is revalued at 31 December by 1.5% plus 75% of the yearly increase of the ISTAT FOI index without tobacco (art. 2120 c. 4 c.c.; L. 81/1992 art. 4 c. 1); the revaluation bears a 17% substitute tax charged to the fund (D.Lgs. 47/2000 art. 11 cc. 3-4, paid by the employer: acconto by 16 December, saldo by 16 February). See Pay components: TFR.
12. Second-level bargaining (contrattazione di secondo livello)¶
Company or territorial agreements may supplement the national CCNL with additional allowances: productivity bonuses, shift premiums, welfare. Each supplementary element can be independently configured for INPS, TFR, and apprenticeship scaling.
The 5% preferential tax rate on premi di risultato (Art. 1 c. 182 L. 208/2015) is not computed by the engine.
→ Guide: How to use the library
→ Contracts: all 85 supported CCNLs