Skip to content

CCNL Logistica, Trasporto Merci e Spedizione (Confetra) - Personale viaggiante

CNEL code I100
Sector logistica
Tax sector industria
Last renewal 2024-12-06
Workers (est.) ~430k
Ruleset version 2026.2
Readiness 👁 Reviewed

← Contracts index

Signatories
  • AITI
  • ASSOESPRESSI
  • ASSOLOGISTICA
  • FEDESPEDI
  • FEDIT
  • FISI
  • TRASPORTOUNITO FIAP
  • ANITA
  • Confetra
  • FILT-CGIL
  • FIT-CISL
  • UILTrasporti

Coverage

Derived from the capability registry. The scenario features and the ones outside the input are the same for every contract: see the capability matrix.

Core payroll path of a contract
✅ Every core capability is computed from bundled rules and request facts
⚠️ The contract's data leave a core capability partial: see Limits
Core payroll path ⚠️
Limits of this contract base_salary, seniority

2 documented simplification(s) and 0 missing feature(s): see Known simplifications.

Assurance

Axis Value What it says
Extraction method 🤖 AI-assisted How the values were read from the sources
Extraction review 🔴 Unverified Whether a person checked the extracted file against its sources
Rule provenance 53 verified / 30 derived / 0 assumed / 0 missing Payable rules of the file by the evidence behind each value (statuses)
Ruleset confidence 🟢 Verified The confidence the ruleset declares as a whole
Readiness 👁 Reviewed Whether runs of this contract can be paid in operational mode (tiers)

Freshness

Last renewal 2024-12-06
Last review 2026-10-16
Latest salary tranche 2027-06-01

Review history

Date Reviewer Scope Outcome Findings
2026-10-11 claude-opus-5-5 (ai) Inherited from logistica-trasporto-confetra, of which this file is a copy: the review covered that file's levels; here it stands for the shared rules (work rules, parameters) only. Every payable rule of the file (55 records) read again in the signed testo unico of the renewal of 6 December 2024 (Verbale di accordo 25 September 2025), published by Confetra; the URLs the file cited return 404. corrected Corrected: every one of the 36 salary periods. The base salary is the minimo plus the EPA of the tables of pp. 80-81 for non-travelling staff; the file held values about 88-110 EUR too high. The printed Totale of the 1 January 2027 table already includes the minimo increase of 1 June 2027; the Legacoop circular of 19 December 2024 (p. 2) confirms that January 2027 is an EPA-only step, so the period holds minimo plus EPA.
Corrected: the Quadri receive the indennità di funzione of 51.65 EUR a month (Art. 6 c. 4, p. 17), which the file lacked.
Corrected: the daily quota is 1/22 (Art. 61 c. 3, Sezione prima, p. 86), not 1/26, which applies to a six-day week of non-travelling staff and to Sezione seconda (Art. 73 c. 5).
Verified: 14 monthly payments (Artt. 18-19), the accrual of fractions over 15 days (Art. 18 c. 2, Art. 19 c. 2), seniority (Art. 17) and 22 days of leave (Art. 24). Pages are PDF page numbers, equal to the printed ones.
Assumed: sickness. Art. 63 A) c. 7-12 keeps the job 245 or 365 days and pays 3 months in full and 5 at half (up to 5 years of service) or 5 and 7, counted over 24 or 30 months; the cumulation model holds one window in whole years for every band, so the rule is not expressible and the file's 100% for 180 days is wrong.
Left derived: the overtime rates (30%, 50%, 65%, 75%, Art. 13 c. 6) match, but their start of 2023-05-01 is not stated; the level descriptions are paraphrases.
Not modelled: the EDR of Art. 60 c. 8 (10 EUR at level 3S, re-parametrised) for workers in service on 26 January 2011, which affects every entitlement, and level 6J and travelling staff.
2026-10-12 claude-opus-5-5 (ai) Inherited from logistica-trasporto-confetra, of which this file is a copy: the review covered that file's levels; here it stands for the shared rules (work rules, parameters) only. Sickness rule of art. 63 A), now expressible with a window and steps per seniority band; readiness of the file. corrected The sickness rule was assumed (100% for 180 days, not the CCNL's): it is now 90 days in full and 150 at half within 24 months, comporto 245 days, up to 5 years of seniority; 150 in full and 210 at half within 30 months, comporto 365 days, above.
With no assumed or missing payable rule left and the salary tables, additional months, divisor and seniority verified on 2026-10-11, the file is promoted to reviewed.
2026-10-12 claude-opus-5-5 (ai) Travelling staff: levels, salary tables of the four tranches, seniority, EDR 2011 and 2021, apprenticeship, overtime, against the signed testo unico (Verbale 25 September 2025). corrected This file was created from logistica-trasporto-confetra for the travelling staff, which that file left out: same rules and review history, with the travelling levels, seniority amounts, EDR and apprenticeship tracks.
51 of the 52 salary values equal minimo plus EPA and the printed Totale of pp. 81-82; F2 prints a Totale 0.06 above the sum at every tranche. The Legacoop circular of December 2024 confirms the F2 minimo (1.791,51 + 87,63), so the Totale is the misprint: F2 takes the sum and stays derived.
Saturday and Sunday overtime of the travelling staff is 30% (art. 13 c. 6); the engine has one holiday band, left as a limitation.
Tabella B (p. 75) reads by year: drivers A3-C3 over 5 years and D2-F2 over 4, 90% the first year, 95% the second, 100% after.
2026-10-12 claude-opus-5-5 (ai) Weekend overtime and working time of the travelling staff (artt. 11, 11 bis, 13). corrected Sunday overtime of the travelling staff is 30% (art. 13 c. 6), not the 65% of the holiday band: new band OT_RIPOSO on the rest_day overtime kind.
The 47-hour regime of art. 11 bis changes the overtime threshold, not the pay: the hourly divisor is 168 under every regime (art. 13 c. 8); the limitation travelling_working_time is closed.
2026-10-12 claude-opus-5-5 (ai) Malattie particolarmente gravi (art. 63 cc. 8 and 12). corrected The serious illnesses of INPS circ. 95/2016 were a limitation (grave_illness): now paid in full for 18 months and left out of the comporto when SicknessEpisode.serious_illness says so.
2026-10-12 claude-opus-5-5 (ai) Indennità di trasferta of the travelling staff (art. 62). corrected The allowance amounts of art. 62 c. 3 from 1.1.2025 and the TFR rule of c. 7 are now CCNL data: a TravelAllowanceEvent without daily_amount takes the amount of its hours away.
2026-10-16 claude-opus-5-5 (ai) The employer INPS rate of the personale viaggiante in the cost table of the Ministry of Labour (DD 135 of 19 December 2025) against the INPS rate tables and the classes of the bundle. flagged DD 135/2025 prints 'Inps (30,68%)' on every table of the personale viaggiante, with no composition, no class of employer and no number of employees.
30.68% is, to the cent, the employer rate of an INPS class industria employer up to 15 employees for operai and intermedi: IVS 23.81 + NASpI 1.61 + CUAF 0.68 + CIG ordinaria 1.70 + Fondo garanzia TFR 0.20 + malattia 2.22 + maternità 0.46 (INPS tables of January 2023 reproduced by GIA Parma, row 'Industria, aziende fino a 15 dipendenti, Operai - Intermedi'). The engine applies the same 30.68% to an operaio viaggiante of an employer up to 15 employees, and 31.28% from 16 to 50 and 31.58% above (CIG straordinaria 0.90 and the higher CIG ordinaria): match for the smallest band, no evidence for the others.
Not established: whether the Ministry assumes an employer up to 15 employees or a class other than industria. A press article (Euroconference, 24 November 2021) classifies a road haulage employer in the INPS sector terziario, CSC 7.04.01, which would give other rates; the class is a fact of the employer, so it is not decided here.

Salary table

Latest effective values per level (monthly gross, EUR).

Level Description Base salary (monthly) Effective from
C3 Qualifica 3, lettera C (parametro 133.5): driver of the highest qualification € 2,131.65 2027-06-01
B3 Qualifica 3, lettera B (parametro 133): driver € 2,100.37 2027-06-01
A3 Qualifica 3, lettera A (parametro 132.5): driver € 2,079.11 2027-06-01
F2 Qualifica 2, lettera F (parametro 129.5): driver € 2,017.83 2027-06-01
E2 Qualifica 2, lettera E (parametro 129): driver € 2,016.61 2027-06-01
D2 Qualifica 2, lettera D (parametro 128.5): driver € 2,015.34 2027-06-01
H1 Qualifica 1, lettera H (parametro 124.5): driver € 1,951.23 2027-06-01
G1 Qualifica 1, lettera G (parametro 124): driver € 1,938.72 2027-06-01
L119 Lettera L, parametro 119: rider on a moped or motorcycle, after further 9 months € 1,821.92 2027-06-01
L116 Lettera L, parametro 116: rider on a moped or motorcycle, after 6 months € 1,777.23 2027-06-01
I116 Lettera I, parametro 116: rider on a bicycle, after 6 months € 1,757.24 2027-06-01
L110 Lettera L, parametro 110: rider on a moped or motorcycle, first 6 months € 1,687.91 2027-06-01
I110 Lettera I, parametro 110: rider on a bicycle, first 6 months € 1,667.91 2027-06-01

Seniority increments

Cadence: every 24 months
Maximum: 5 increments

Level Increment (monthly)
C3 € 24.79
B3 € 24.79
A3 € 24.79
F2 € 24.27
E2 € 24.27
D2 € 24.27
H1 € 23.24
G1 € 23.14
I110 € 22.18
I116 € 22.18
L110 € 21.62
L116 € 21.62
L119 € 21.62

Apprenticeship

drivers_g_h (type: percentage)
Destination levels: H1, G1
percentage: 1.00

drivers_a_f (type: percentage)
Destination levels: C3, B3, A3, F2, E2, D2
percentage: 1.00

riders (type: percentage)
Destination levels: I110, I116, L110, L116, L119
percentage: 1.00

Known simplifications

Each simplification below is a model limitation of the registry. An open limitation with a monetary impact (yes or unknown) makes every result it applies to not payable, with an open_limitation blocker; the result lists every applicable limitation in assurance.limitations.

logistica-trasporto-confetra-viaggiante/travelling_allowances · base_salary · impact yes · open

NOT MODELLED: the night allowance of art. 16 for a trasferta under 18 hours overlapping the night hours (paid only from 18 hours), the 50% on the Sunday and holiday work within the ordinary hours (art. 12 c. 4), and the 4.5 days of paid leave of art. 11 c. 11. The trasferta of art. 62 and the night allowance of a trasferta of 18-24 hours are paid by TravelAllowanceEvent.

Applies when: a fact the request cannot express: never recorded on a run.

Remediation: Pay the night allowance of art. 16 and the Sunday or holiday work within the ordinary hours outside the engine.

logistica-trasporto-confetra-viaggiante/apprentice_seniority · seniority · impact unknown · open

APPRENTICE SENIORITY: the CCNL text read for this ruleset does not state whether apprentices accrue the level seniority increments or an amount of their own, and no apprentice amount is modelled. The engine pays no increment during the apprenticeship (provisional); the run is affected when the apprentice has matured increments the level pays.

Applies when: seniority applies; the run takes the engine code path; contract type in apprentice.

Remediation: Source the CCNL clause on apprentice seniority and model it as seniority_increments.apprentice_amount (zero when apprentices accrue none), then remove this note.

apprentice_seniority_simplified · seniority · impact unknown · resolved

Apprentices accrue only the CCNL apprentice-specific seniority increment, paid in full: the apprenticeship percentage no longer reduces it a second time. A CCNL that declares no apprentice amount pays none and carries its own open limitation /apprentice_seniority, recorded when the level pays matured increments.

Applies when: seniority applies; the run takes the engine code path; contract type in apprentice.

Remediation: Resolved: the remaining CCNLs are tracked by their own apprentice_seniority limitation.

apprenticeship_pct_undeclared_components · base_salary · impact unknown · open

A percentage apprenticeship reduces every fixed allowance whose apprenticeship_pct_relevant flag the data leaves at its default, together with the base salary. Whether the CCNL applies the percentage to that allowance (an EDR, a contingenza, a function allowance) was not sourced. The run is affected when such an allowance is in the apprentice's pay.

Applies when: base_salary applies; the run takes the engine code path; contract type in apprentice.

Remediation: Source, for each CCNL, the elements the apprenticeship percentage applies to and set apprenticeship_pct_relevant on every allowance; the limitation then no longer applies to its runs.

sickness_inps_daily_base · sickness · impact unknown · open

The INPS share of a sick day is the INPS rate times the CCNL daily quota of the current month, counted on the CCNL payable days. INPS computes it on its own daily base (retribuzione media globale giornaliera of the month before) and on calendar days. The worker's total for the day is the same; the split between INPS indemnity (outside the contribution base) and employer integration may differ, and with it the contributions.

Applies when: sickness applies; the run takes the engine code path.

Remediation: Compute the INPS indemnity on the INPS daily base and calendar days of the INPS rules, with the pay of the month before, then resolve this limitation.

sickness_cumulation_window · sickness · impact unknown · open

The CCNL tier and the comporto are counted on the days of one episode and the relapses it continues. A CCNL that sums the sickness of separate episodes over a window (a calendar year, the last three years) can reach a lower tier or the end of the comporto earlier than the engine shows. The run is affected when an earlier episode outside the relapse chain is recorded.

Applies when: sickness applies; the run takes the engine code path.

Remediation: Add the cumulation window of each CCNL to its sickness rule, with the source, and count the tier and the comporto over it.

provisional_ruleset · irpef · impact unknown · open

The run reads a tax ruleset marked provisional: the sources of its year are not published yet (budget law of the year; regional and municipal surtax resolutions), so the values are those of the year before, carried over. Rules in force by statute (the IRPEF brackets of art. 11 and the deductions of art. 13 of the testo unico of D.Lgs. 117/2026) carry over unchanged; any change of the budget law is not applied.

Applies when: irpef applies; the run takes the engine code path.

Remediation: Replace each provisional ruleset of the year with the values of its published sources, drop its provisional flag, then resolve this limitation.

provisional_inps_ruleset · inps_employer · impact unknown · open

The run reads an INPS ruleset marked provisional: the INPS circulars of its year are not published yet, so the rates, the massimale and the minimale (and the hourly contributions of domestic work) are those of the year before, carried over. The indexed amounts change every January: the carried-over values understate them.

Applies when: inps_employer applies; the run takes the engine code path.

Remediation: Replace each provisional INPS ruleset of the year with the values of the INPS circulars of the year, drop its provisional flag, then resolve this limitation.

tfr_compensation_apprentice_guarantee_fund · inps_employer · impact yes · open

An apprentice whose TFR goes to a pension fund or to the Fondo Tesoreria takes the 0.28-point relief of D.L. 203/2005 art. 8, but not the exemption from the 0.20% Fondo di garanzia contribution of D.Lgs. 252/2005 art. 10 c. 2: no source found says whether the apprentice rate (10% of L. 296/2006 art. 1 c. 773 plus NASpI and the integration funds) holds a Fondo di garanzia share to exempt. The employer contributions of the run may be overstated by 0.20% of the INPS base.

Applies when: inps_employer applies; the run takes the engine code path; contract type in apprentice.

Remediation: Find an INPS source on the Fondo di garanzia share of the apprentice rate, then exempt it with the other workers or record that none is due.

Sources

Document Kind Date URL
— — 2024-12-06 ↗
Coverage notes

STAFF: travelling staff (personale viaggiante) of the CCNL Logistica: drivers of qualifiche 3 (C, B, A), 2 (F, E, D) and 1 (H, G) and riders of letters I (bicycle) and L (moped or motorcycle), art. 2 pp. 25-26, tables pp. 81-82. The non-travelling staff is logistica-trasporto-confetra. Every level is an operaio.

RIDER PARAMETERS: letter I starts at parametro 110 and moves to 116 after 6 months; letter L starts at 110, moves to 116 after 6 months and to 119 after further 9 months (art. 2, p. 26). Each parametro is a level (I110, I116, L110, L116, L119): the request names the parametro reached, the engine does not move the worker.

TRANCHES: four tranches: 1.1.2025, 1.1.2026, 1.1.2027 (EPA), 1.6.2027 (minimo and EPA), +260.00 at B3 in all (140 minimo, 120 EPA, p. 82). base_salary is minimo plus EPA.

SENIORITY INCREMENTS: biennial, at most 5 bienni, amounts of the travelling column of art. 17 c. 2 (p. 41).

APPRENTICESHIP: Tabella A (p. 75): drivers G1 and H1 75%, 85%, then 100%; riders I and L 100% throughout. Tabella B: drivers A3, B3, C3 (5 years) and D2, E2, F2 (4 years) 90%, 95%, then 100%.

WORKING TIME: drivers work 39 hours a week (art. 11 c. 1) over up to 6 days, averaged over 4 weeks; the discontinuous drivers of art. 11 bis (qualifiche 3 A-C and 2 D-F, after the verification procedure) work 47 hours ordinary. The regime moves only the threshold beyond which an hour is overtime: the monthly pay is the same and the hourly pay divides it by 168 under every regime (art. 13 c. 8), so the request declares the overtime hours beyond the worker's own regime.

TRAVELLING WEEKEND OVERTIME: Saturday and Sunday overtime of the travelling staff is 30% (art. 13 c. 6, p. 39): Saturday as weekday overtime, Sunday as rest_day overtime (OT_RIPOSO). Overtime on the festività of artt. 60 and 71 is holiday overtime at 65%, 75% at night. The rates do not add up and the higher absorbs the lower (c. 7): a weekend overtime hour at night is night overtime (50%), reported as night.

CONGLOBATED MINIMUMS: base_salary values are the conglobated monthly minimum pay (minimum pay table + contingenza per Art. 61 note + EPA). Primary check: Art. 61 of the consolidated text September 2025 — 'From 1.1.2001 the indennità di contingenza has been conglobated into the minimum pay tables together with the EDR of EUR 10.33 per month'. fixed_allowances is empty for all levels.

HOURLY DIVISOR: 168 hours/month. Primary source: Art. 61 para. 3 consolidated text September 2025 — 'The hourly pay is obtained by dividing the monthly pay by 168'.

ICE: the Indennità di Copertura Economica (ICE) was a provisional element in force until 31.12.2024. It ceases from 1.1.2025 with the renewal taking effect. base_salary values do not include ICE (ceased element). The consolidated text cites net increases of EUR 230 at 3S compared to the previous pay including ICE — the difference from the algebraic sum of the tranches (EUR 290 from base without ICE) corresponds to the pre-existing ICE value for that level.

ADDITIONAL MONTHS: 14 (tredicesima Art. 18 + quattordicesima Art. 19 consolidated text September 2025).

EPA: Elemento Professionale d'Area, a component introduced by the 6.12.2024 renewal. Included in base_salary values from 1.1.2025. Not shown separately because it forms an integral part of the minimum pay (it affects all contractual and statutory entitlements) — see Confetra circ283-2024.

EDR: the EDR of EUR 10.33/month (agreement 26 Jan 2001) is conglobated into the minimum pay tables (Art. 61 note). The EDR of art. 60 c. 8 (workers in service on 26 January 2011) and the EDR of the agreement of 18 May 2021 (13 mensilità, no effect on other institutes) are paid as allowances; the 2021 EDR may still enter the daily base of absences and sickness, which 'nessuna incidenza su alcun istituto contrattuale' excludes.

INPS: uses 2026-industria.json (TaxSector.INDUSTRIA). File already present — no changes to the tax file.

Raw data

The contract file this page is generated from: agreement/logistica-trasporto-confetra-viaggiante.json.

Usage example

"""Usage example: logistica-trasporto-confetra-viaggiante (I100).

CCNL Logistica, Trasporto Merci e Spedizione (Confetra) - Personale
viaggiante.

Generated by scripts/documentation/contract_example/generate.py from the
bundled data; edit the generator, not this file.

Level H1 (middle of the level list), regular run of September 2026,
full-time permanent employment, 50 employees, worker resident in Milan
(region IT-25, municipality F205), seniority recognised from 1 September
2026.
"""

from datetime import date

from ccnl_engine import (
    EmployerProfile,
    Employment,
    Headcount,
    PayrollEngine,
    PayrollRun,
    PeriodFacts,
    PeriodInput,
)
from ccnl_engine.inputs import (
    Permanent,
    SeniorityFact,
    SenioritySource,
)

CCNL = "logistica-trasporto-confetra-viaggiante.json"
LEVEL = "H1"
SENIORITY = SeniorityFact.since(date(2026, 9, 1), SenioritySource.EMPLOYER_RECORDS)

engine = PayrollEngine.bundled()
result = engine.calculate_period(
    PeriodInput(
        run=PayrollRun.regular(year=2026, month=9),
        payment_date=date(2026, 9, 25),
        employment=Employment(
            ccnl_slug=CCNL,
            level_code=LEVEL,
            contract_type=Permanent(),
            seniority=SENIORITY,
        ),
        employer=EmployerProfile(headcount=Headcount(50)),
        facts=PeriodFacts(
            regione="IT-25",
            comune_belfiore="F205",
        ),
    )
)

issues = ", ".join(sorted(issue.code for issue in result.issues)) or "none"
blockers = ", ".join(sorted({b.code.value for b in result.blockers})) or "none"
readiness = engine.inspect_ruleset(CCNL.removesuffix(".json")).readiness
print(f"Gross:         {result.period_gross} EUR")
print(f"Contributions: {result.contribution_breakdown.employee} EUR")
print(f"IRPEF:         {result.tax_computation.ordinary_tax} EUR")
print(f"Net:           {result.period_net} EUR")
print(f"Payable:       {result.is_payable}")
print(f"Net payable:   {result.is_net_pay_payable}")
print(f"Cost complete: {result.is_employer_cost_complete}")
print(f"Readiness:     {readiness}")
print(f"Blockers:      {blockers}")
print(f"Issues:        {issues}")