When to issue a payroll CFDI
Issue a payroll CFDI for every payment you make to a worker for wages, salaries, or income assimilated to salaries. The voucher usesCfdiType: "N" and carries the payroll complement 1.2 inside the Complemento.Payroll node.
The current payroll complement is version 1.2 (revision C). It applies both to
subordinate workers (regime
02 Wages) and to income assimilated to salaries
(regimes 05 through 11).Differences from an income invoice
Endpoint
Payroll CFDI structure
Full example
Biweekly receipt for a subordinate worker with salary and grocery vouchers:Considerations for the general node in a payroll CFDI:
CfdiTypemust be"N".- Do not include
Items. - Do not include
PaymentForm: per Anexo 20, this attribute is not registered when the voucher type isN. Currencymust be"MXN".- In the
Receivernode,CfdiUsemust be"CN01". - In the
Receivernode,FiscalRegimeis normally605(Wages and Salaries and Income Assimilated to Salaries).
Payroll complement elements
Payroll node
string
required
Payroll type. Use
O for ordinary payroll and E for extraordinary payroll.string
required
Effective payment date, in
YYYY-MM-DD format.string
required
Start date of the payment period.
string
required
End date of the payment period. Must be the same as or later than
InitialPaymentDate.number
required
Number of days or fraction covered by the payment. Accepts up to three decimals.
object
Employer data. See Issuer node.
object
required
Worker data. See Employee node.
object
Perceptions for the period. See Perceptions node.
object
Deductions applied to the worker. See Deductions node.
array
Payments that are not considered wage income, such as the employment subsidy or per diem paid to the worker.
array
Incapacities that apply during the period.
Issuer node
string
Employer registration with the IMSS. Required when the worker is subject to the mandatory social security regime.
string
RFC of the origin employer. Registered in labor subcontracting cases or when you pay on behalf of another employer.
string
CURP of the employer when it is an individual. Must be 18 characters.
object
Node for entities and agencies under the National Fiscal Coordination System. Contains
OriginSource (IP, IM, or IF) and AmountOriginSource.Employee node
string
required
Worker’s CURP. Exactly 18 characters.
string
required
Contract type code per the
c_TipoContrato catalog.string
required
Hiring regime code per the
c_TipoRegimen catalog.string
required
Internal worker number. Up to 15 characters, without the
| character.string
required
Payment frequency per the
c_PeriodicidadPago catalog.string
required
Code of the federal entity where the worker provided services, per the
c_Estado catalog.string
Worker’s social security number. Required when the regime is
02 Wages.string
Start date of the labor relationship, in
YYYY-MM-DD format.boolean
Indicates whether the worker is unionized.
string
Work schedule type per the
c_TipoJornada catalog.string
Worker’s department or area. Up to 100 characters.
string
Position assigned to the worker. Up to 100 characters.
string
Occupational risk class per the
c_RiesgoPuesto catalog.string
Code of the bank where you deposit the payroll, per the banks catalog.
string
Account number or CLABE. Between 10 and 18 digits.
number
Base contribution salary.
number
Integrated daily salary.
array
Node for labor subcontracting. Each element contains
RfcContractor and PercentageTime (between 0.001 and 100).Perceptions node
array
List of perceptions for the period.
string
Perception type code per the
c_TipoPercepcion catalog.string
Internal control code for the perception. Between 3 and 15 characters.
string
Perception concept. Up to 100 characters.
number
required
Taxed amount of the perception.
number
required
Exempt amount of the perception.
array
Overtime detail. Each element contains
Days, HoursType, ExtraHours, and PaidAmount.object
Node for income in shares or securities. Contains
MarketValue and PriceWhenGranting.object
Node for retirement, pensions, or retirement benefits. Contains
TotalASinglePayment, TotalParciality, DailyAmount, AccumulatedIncome, and NonAccumulatedIncome.object
Node for separation payments. Contains
TotalPaid, YearsOfService, LastMonthlySalaryOrd, AccumulatedIncome, and NonAccumulatedIncome.Deductions node
string
required
Deduction type code per the
c_TipoDeduccion catalog.string
required
Internal control code for the deduction. Between 3 and 15 characters.
string
required
Deduction concept. Up to 100 characters.
number
required
Deduction amount. The minimum value is
0.01.OtherPayments node
string
required
Other payment type code per the
c_TipoOtroPago catalog.string
required
Internal control code for the payment. Between 3 and 15 characters.
string
required
Payment concept. Up to 100 characters.
number
required
Payment amount.
object
Node required when
OtherPaymentType is 002. Contains Amount with the accrued subsidy.object
Node required when
OtherPaymentType is 004. Contains PositiveBalance, Year, and RemainingPositiveBalance.Incapacities node
integer
required
Days of incapacity in the period.
string
required
Incapacity type code per the
c_TipoIncapacidad catalog.number
Amount discounted for the incapacity.
Special cases
Overtime
Register overtime as a perception of type019 with the detail of days, hours type, and amount paid:
HoursType uses 01 for double hours, 02 for triple, and 03 for single.
Incapacities
When the worker has days of incapacity, add theIncapacities node and the matching 006 deduction:
Employment subsidy
The subsidy is registered inOtherPayments with code 002 and the EmploymentSubsidy node:
Positive balance from annual compensation
Use code004 in OtherPayments together with the Compensation node:
Separation payments
A settlement or severance is extraordinary payroll (Type: "E"). Add perception 025 and the Indemnification node:
Retirement and pensions
For retirement, pensions, or retirement benefits, use perception039 (single payment) or 044 (installments) together with the Retirement node:
Labor subcontracting
When the worker provides services through subcontracting, register the contractors inEmployee.Outsourcing:
PercentageTime across all contractors must equal 100.
Payroll catalogs
The SAT defines these catalogs and they may change. Verify the current values
in the official
catCFDI catalog published by the SAT before releasing to
Production.Payroll type (Type)
Payroll type (Type)
Contract type (ContractType)
Contract type (ContractType)
Regime type (RegimeType)
Regime type (RegimeType)
Payment frequency (FrequencyPayment)
Payment frequency (FrequencyPayment)
Work schedule type (TypeOfJourney)
Work schedule type (TypeOfJourney)
Occupational risk (PositionRisk)
Occupational risk (PositionRisk)
Most used perception types (PerceptionType)
Most used perception types (PerceptionType)
The full
c_TipoPercepcion catalog contains more than 40 codes.Most used deduction types (DeduccionType)
Most used deduction types (DeduccionType)
The full
c_TipoDeduccion catalog contains more than 100 codes.Other payment types (OtherPaymentType)
Other payment types (OtherPaymentType)
The full
c_TipoOtroPago catalog contains 10 codes.Incapacity type (Incapacities.Type)
Incapacity type (Incapacities.Type)
Query the banks catalog
c_Banco catalog contains more than 100 codes.
Query and download the receipt
Payroll CFDIs use thepayroll type instead of issued:
Querying with
type=issued does not return payroll receipts. See
Consult CFDI and
Download documents.Common errors
Next steps
Cancel CFDI
Cancel a payroll receipt stamped by mistake.
Download documents
Get the PDF and XML of the receipt to deliver to the worker.
SAT catalogs
Query the current codes directly from the API.
CFDI types
Understand when each CFDI type applies.