Registry entry
Mexico Individual Annual Income Tax Return — Salaries and Wages Regime (Declaración Anual, Régimen de Sueldos y Salarios e Ingresos Asimilados a Salarios)
Annual individual income tax return (Declaración Anual) filed through SAT's (Servicio de Administración Tributaria) Declaraciones y Pagos online service, scoped to filers under the Régimen de Sueldos y Salarios e Ingresos Asimilados a Salarios (salaries/wages and assimilated-to-salary income). Covers the declaration's configuration (fiscal year, declaration type, period), the Ingresos section (salary income by withholding agent, assimilated-to-salary income, retirement-insurance income, and the aggregate income/exemption/withholding totals the system computes), the Deducciones personales section (the personal-deduction CFDI record and the system-computed deductible totals/cap), the Determinación section (the ISR computation chain and the informational-data questions on other exempt income, other informative data, and reportable tax schemes), and the Pago section (balance due/in favor handling, refund CLABE, compensations, instalment payment, and the e.firma requirement triggered by a large refund). Does not model: the SAT portal login/authentication step (RFC + Contraseña + captcha, or e.firma) that precedes the wizard, since it is a separate, already-authenticated prerequisite; the detailed field sets for Indemnización, Jubilación en parcialidades, and Jubilación pago único income (the guide names these three tabs but, unlike Asimilados a salarios and Ingresos del seguro de retiro, does not walk a worked example of their own input fields — only their downstream effect on the aggregate Ingresos no acumulables and ISR de ingresos no acumulables fields is modelled); repeating per-withholding-agent income records and repeating per-CFDI personal-deduction records beyond one bounded instance each (GovSchema v0.3 has no native repeating-group field type, GSP-0009); the per-record sub-dialog for registering source declarations when applying a saldo a favor compensation (its own field labels are not itemized in the source beyond a generic description); the read-only Vista previa/Revisar/Enviar declaración review-and-submit screens and the Acuse de recibo receipt output; and every other SAT income regime (Actividad Empresarial y Servicios Profesionales, Plataformas Tecnológicas Digitales, Arrendamiento, Decreto Plan México, etc.), each of which SAT publishes as its own sibling guide. See VERIFICATION.md for the full list of interpretive judgment calls. The live Declaraciones y Pagos tool itself (sat.gob.mx/declaracion) is always authoritative; this document does not submit anything.
Registry entry
mx/sat/declaracion-anual-sueldos-salarios
Authoritative source SAT ‘Guía de llenado — Declaración Anual, Régimen de Sueldos y Salarios e Ingresos Asimilados a Salarios’ (ejercicio fiscal 2025)
Machine access
- Schema document
registry/mx/sat/declaracion-anual-sueldos-salarios/1.0.0/schema.jsonapplication/schema+json- Verification record
registry/mx/sat/declaracion-anual-sueldos-salarios/1.0.0/VERIFICATION.mdtext/markdown- Registry catalog
registry/index.jsonone record per schema id
Field reference
74 fields across 7 steps, read from the published schema.json, with names, types, requiredness, and validation as the document states them. The live government form remains the authoritative source.
Configuración de la declaración
-
taxYearinteger requiredEjercicio
range: 2020–2100 -
declarationTypeenum requiredNormal for a first-time annual return for the fiscal year, or Complementaria to correct/replace a previously-filed one. The guide names these two top-level options but does not itemize Complementaria's own sub-reason catalog (e.g. correction type), if any.
enum: normal | complementaria -
periodstring requiredDropdown selected alongside Ejercicio and Tipo de declaración; the guide names the field but does not render its option list on screen, so no enum is asserted.
length: 0–50 -
hasForeignIncomeOrPendingCreditboolean required¿Obtuviste ingresos y pagaste impuestos en el extranjero o tienes impuesto pendiente de acreditar?
Ingresos
-
acceptsSalaryIncomePrecargaboolean optionalShown only when the system has pre-loaded third-party-reported (CFDI de nómina) salary income for review; not shown when no precarga exists.
-
withholdingAgentRfcstring requiredRFC of the employer/withholding agent, captured when manually adding a salary-income record. Bounded to a single record for v1.0.0 — the live wizard supports adding one record per employer/retenedor in the fiscal year; see VERIFICATION.md.
patternclassification: sensitive-pii -
withholdingAgentNamestring requiredNombre, denominación o razón social
length: 0–300 -
salaryIncomeFromWithholdingAgentnumber requiredIngresos por salarios
range: 0–∞ -
exemptIncomeFromWithholdingAgentnumber requiredIngresos exentos
range: 0–∞ -
declaresAsimiladosASalariosboolean requiredWhether the filer received income taxed as 'Asimilados a salarios' during the fiscal year. Modelled as a gating flag inferred from the wizard's own 'Asimilados a salarios' tab (p.16/19); the guide does not render the full 'Ingresos a declarar' checkbox list from the Configuración step on screen, so this flag is an interpretive stand-in for that checkbox — see VERIFICATION.md.
-
isFishingForestryCooperativeMemberboolean optional¿Eres integrante de una sociedad cooperativa de producción dedicada exclusivamente a actividades pesqueras o silvícolas que cuente con concesión o permiso del Gobierno Federal?
-
assimilatedIncomenumber optionalEditable only when no third-party precarga exists for this income; otherwise shows the precargado amount, which can still be modified.
range: 0–∞ -
assimilatedIncomeTaxWithheldnumber optionalImpuesto retenido (Asimilados a salarios)
range: 0–∞ -
exemptIncomeFishingForestryCooperativenumber optionalIngresos exentos por ser integrante de una sociedad cooperativa de producción dedicada exclusivamente a actividades pesqueras o silvícolas
range: 0–∞ -
declaresIngresosSeguroRetiroboolean requiredWhether the filer received retirement-insurance income during the fiscal year. Same interpretive-flag caveat as declaresAsimiladosASalarios — see VERIFICATION.md.
-
retirementInsuranceIncomenumber optionalIngresos (seguro de retiro)
range: 0–∞ -
retirementInsuranceExemptIncomenumber optionalIngresos exentos (seguro de retiro)
range: 0–∞ -
retirementInsuranceYearsOfServiceinteger optionalNúmero de años de servicio
range: 0–80 -
retirementInsuranceTaxWithheldnumber optionalImpuesto retenido (seguro de retiro)
range: 0–∞ -
declaresIndemnizacionOrJubilacionboolean requiredWhether the filer received any of these three income types. The guide names all three tabs (p.16/19) but, unlike Asimilados a salarios and Ingresos del seguro de retiro, does not walk a worked example itemizing their own input fields — only their downstream effect on the aggregate Ingresos no acumulables (p.25) and ISR de sueldos y salarios por ingresos no acumulables (p.45) fields is modelled here. Each sub-type's own detailed fields are out of scope for v1.0.0 — see VERIFICATION.md.
-
annualIncomenumber requiredSystem-aggregated total of the filer's salary/assimilated income for the fiscal year, built from the retenedor records above (precargado and/or manually added).
range: 0–∞ -
exemptIncomenumber requiredSystem-calculated per the exemption limits in the Ley del Impuesto sobre la Renta.
range: 0–∞ -
accruableIncomenumber requiredSystem-calculated.
range: 0–∞ -
nonAccruableIncomenumber optionalResult of reducing the annual income from indemnización/jubilación pago único by the corresponding exempt income and the último salario mensual ordinario (USMO); system-calculated.
range: 0–∞ -
employmentSubsidynumber optionalShown when the withholding agent(s) calculated an employment subsidy during the fiscal year.
range: 0–∞ -
incomeTaxWithheldnumber requiredSystem-calculated total ISR withheld for the fiscal year.
range: 0–∞
Deducciones personales
-
personalDeductionTypestring requiredDropdown of personal-deduction categories; the guide names honorarios médicos/dentales y gastos hospitalarios, gastos funerales, and colegiaturas as examples (plus the 2025-new 'Sin clasificación' bucket for non-conforming CFDI) but does not render the dropdown's full option list on screen, so no closed enum is asserted.
length: 0–150 -
deductionIssuerRfcstring requiredCaptured when manually adding a personal-deduction CFDI record. Bounded to a single record for v1.0.0 — see VERIFICATION.md for the repeating-structure scope cut.
patternclassification: sensitive-pii -
deductionIssuerNamestring requiredNombre, denominación o razón social
length: 0–300 -
deductionIssueDatedate requiredFecha de emisión
-
deductionPaymentMethodstring requiredDropdown; option list not rendered on screen in the guide, so no enum is asserted.
length: 0–100 -
deductionDescriptionstring requiredDescripción
length: 0–500 -
deductionTotalAmountnumber requiredImporte total
range: 0–∞ -
deductionDeductibleAmountnumber requiredMonto deducible
range: 0–∞ -
deductionRecoveredExpenseAmountnumber optionalOnly enabled for capture in some cases (e.g. reimbursed medical expenses); left blank otherwise.
range: 0–∞ -
acceptsDeductionPrecargaboolean optionalShown per pre-loaded CFDI deduction record; not shown for a manually-added record with no precarga.
-
totalDeductibleAmountnumber requiredSystem-calculated total of the personal deductions taken for the fiscal year.
range: 0–∞ -
maxDeductibleLimitAmountnumber requiredSystem-calculated cap: the lesser of $206,368.00 MXN or 15% of the filer's total income (including exempt income), per fiscal year 2025 figures published in the guide.
range: 0–∞
Determinación
-
taxableBasenumber requiredIngresos acumulables minus Deducciones personales; system-calculated.
range: 0–∞ -
isrPerAnnualTariffnumber requiredResult of applying the annual ISR tariff (Art. 152, Ley del Impuesto sobre la Renta, as updated in Anexo 8 of the Resolución Miscelánea Fiscal for 2025) to the taxable base; system-calculated.
range: 0–∞ -
isrNonAccruableIncomeTaxnumber optionalISR de sueldos y salarios por ingresos no acumulables
range: 0–∞ -
provisionalPaymentsTotalnumber requiredTotal provisional payments made during the fiscal year; system-calculated.
range: 0–∞ -
balanceInFavorAmountnumber optionalPopulated only when the annual computation yields a favorable balance; mutually exclusive in practice with balanceDueAmount.
range: 0–∞ -
balanceInFavorActionenum optional¿Qué deseas hacer con tu saldo a favor?
enum: devolucion | compensacion -
refundClabestring optional18-digit standardized banking code (Clave Bancaria Estandarizada); either selected from a list of the filer's known accounts or captured fresh.
patternclassification: financial -
refundBankAccountHolderConfirmedboolean optionalConfirmación de titularidad de la cuenta
-
balanceDueAmountnumber optionalPopulated only when the annual computation yields tax due; mutually exclusive in practice with balanceInFavorAmount.
range: 0–∞ -
reportsOtherExemptIncomeboolean required¿Informas otros ingresos exentos? (Préstamos, donativos y/o premios, etc. que en lo individual o en su conjunto, excedan de $600,000.00)
-
loansAmountnumber optionalPréstamos
range: 0–∞ -
donationsReceivedAmountnumber optionalDonativos
range: 0–∞ -
prizesAmountnumber optionalPremios
range: 0–∞ -
travelAllowancesCollectedAmountnumber optionalViáticos cobrados
range: 0–∞ -
homeSaleAmountnumber optionalEnajenación de casa habitación
range: 0–∞ -
inheritanceOrLegacyAmountnumber optionalHerencias o legados
range: 0–∞ -
hasOtherInformativeDataboolean required¿Tienes otros datos informativos que declarar?
-
governmentSupportIncomeAmountnumber optionalIngresos obtenidos por apoyos gubernamentales
range: 0–∞ -
earthquake2017SupportIncomeAmountnumber optionalIngresos obtenidos por apoyos gubernamentales con motivo de los sismos del 7 y 19 de septiembre de 2017
range: 0–∞ -
debtForgivenessHousingAmountnumber optionalMonto de la condonación o remisión de deuda de créditos otorgados para adquisición de casa habitación
range: 0–∞ -
hasReportableTaxSchemesboolean required¿Tiene esquemas fiscales reportables que informar?
-
reportableTaxSchemeTypestring optionalDropdown; option list not rendered on screen in the guide, so no enum is asserted.
length: 0–200 -
reportableTaxSchemeIdstring optionalNúmero de identificación del esquema reportable
length: 0–50
Pago
-
totalContributionsAmountnumber optionalA cargo más Parte actualizada más Recargos (when the latter two are enabled); system-calculated.
range: 0–∞ -
updatedPortionAmountnumber optionalEnabled automatically, together with Recargos, when the declaration is filed after the legal deadline; the guide does not name a specific applicant-facing toggle field for 'late filing', so no requiredWhen gate is modelled — see VERIFICATION.md.
range: 0–∞ -
surchargesAmountnumber optionalEnabled automatically, together with Parte actualizada, when the declaration is filed after the legal deadline; see updatedPortionAmount.
range: 0–∞ -
appliesOffsetOrTaxIncentiveboolean optional¿Desea aplicar alguna compensación o estímulo fiscal?
-
offsetDetailAmountnumber optionalAggregate total of the saldo(s) a favor / pago(s) de lo indebido being applied; the guide describes a per-record 'Agregar' sub-dialog for registering the source declaration(s) but does not itemize that sub-dialog's own field labels beyond a generic description, so only this aggregate is modelled — see VERIFICATION.md.
range: 0–∞ -
totalApplicationsAmountnumber optionalTotal de aplicaciones
range: 0–∞ -
amountDuenumber optionalSystem-calculated, after any compensation/estímulo fiscal applied above.
range: 0–∞ -
paysInInstallmentsboolean optional¿Opta por pagar en parcialidades?
-
numberOfInstallmentsinteger optionalUp to six instalments.
range: 1–6 -
firstInstallmentAmountnumber optionalSystem-calculated.
range: 0–∞ -
remainingInstallmentsAmountnumber optionalSystem-calculated.
range: 0–∞ -
amountToPaynumber optionalCantidad a cargo minus Importe sin la primera parcialidad; system-calculated.
range: 0–∞ -
efirmaPrivateKeyPasswordstring optionalRequired to submit the return only when the resulting saldo a favor is MXN $10,001 or more, in which case an e.firma (advanced electronic signature) is mandatory alongside the .cer/.key files (see the sibling documents[] entries).
classification: sensitive-pii
Verification record
This file is the source-review record for this document version, per the manual-source-review-v1 practice.
Current claim
status:draftverification.method:manual-source-review-v1verification.lastVerifiedAt:2026-07-06
This document was derived from SAT's own official screenshot-driven step-by-step "Guía de llenado" PDF, not a live-browser walk of the actual Declaraciones y Pagos wizard (which requires an authenticated, personalized session — see below, and is not a bot-mitigation workaround the way the sibling RFC-preinscription document's sourcing was). It remains draft, not verified, pending an independent second reviewer's field-by-field pass.
Why this document exists
CATALOG.md's "Known Gaps" section explicitly flagged Mexico's Taxes vertical as still needing "a distinct income-tax-return/filing candidate", separate from mx/sat/preinscripcion-rfc-persona-moral (GOV-1414, classified under Business Formation, mirroring us/irs/employer-identification-number-ss4). This cycle picks up that flagged gap: SAT's Declaración Anual (annual individual income tax return) for the Régimen de Sueldos y Salarios e Ingresos Asimilados a Salarios (salaries/wages, Mexico's most common personal-income regime) is sourced from SAT's own official guide PDF for that regime. This closes Mexico's Taxes-vertical gap and gives Mexico its third modelled vertical (alongside Business Formation and Visa).
Source examined
- Document
(id, version):mx/sat/declaracion-anual-sueldos-salarios/1.0.0 - Spec version: GovSchema
0.3.0 - Authority: Servicio de Administración Tributaria (SAT)
- Live tool (not used as source — see below):
https://www.sat.gob.mx/declaracion(and the broader Declaraciones y Pagos service) — returns HTTP 403 to a direct fetch, the same WAF/bot- mitigation signature already documented for SAT's RFC preinscription wizard. Independently of that gate, the live tool is inherently personalized: it requires RFC + Contraseña (or e.firma) login and loads each filer's own SAT-held third-party income data (CFDI de nómina, retenedor records) before any field can be usefully filled — an annual return does not make sense to walk anonymously the way a registration wizard does. So the guide is the correct source shape for this process, not a workaround for an otherwise-avoidable gate. - Primary source actually used:
https://www.sat.gob.mx/minisitio/DeclaracionAnual/Personas/documentos/GuiaLlenado_SueldosSalarios.pdf— "Guía de llenado — Declaración Anual, Régimen de Sueldos y Salarios e Ingresos Asimilados a Salarios" (ejercicio fiscal 2025 edition), 65 pages. Downloaded directly (HTTP 200), no login required for the guide itself. Confirmed genuine PDF content with a real, directly-extractable text layer — unlike the siblingmx/sat/preinscripcion-rfc-persona-moralguide, whose screenshots carried no text layer and required page-image rendering to read visually. Text was extracted directly viapdfjs-dist(pinned3.11.174, per this environment's known rendering regression in newer versions) usinggetTextContent()per page, then read in full (all 65 pages) before authoring any field. - Index/landing page confirming sibling guides exist:
https://www.sat.gob.mx/minisitio/DeclaracionAnual/Personas/tutoriales_guias.html— lists separate guides for other income regimes (Actividad Empresarial y Servicios Profesionales, Plataformas Tecnológicas Digitales, Arrendamiento, Decreto Plan México, ISSIF), each an open candidate for a future cycle.
Judgment calls (disclosed for an independent reviewer)
- Login/authentication step excluded. The guide's own Section II (Acceso al sistema, p.3-4) describes reaching the wizard via RFC + Contraseña + captcha, or via e.firma (.cer/.key + password). This is modelled as an out-of-scope prerequisite, consistent with how this registry treats login/account-holder authentication elsewhere (e.g. the AE ICP visa document excludes the sponsor's own account login).
declaresAsimiladosASalarios/declaresIngresosSeguroRetiro/declaresIndemnizacionOrJubilacionare interpretive stand-ins for the Configuración step's own "Ingresos a declarar" checkboxes. Page 8 of the guide states that the wizard shows pre-selected checkboxes for "the type of income you received", but the guide's screenshot at that point does not render the checkbox list's actual labels — it only becomes concrete later, when the wizard's income-type tabs are named (Asimilados a salarios, Indemnización, Jubilación en parcialidades, Jubilación pago único, Ingresos del seguro de retiro — p.16, p.19). I modelled one boolean gate per tab-group actually detailed in the guide, rather than guessing at the full original checkbox catalog. Flagged for a reviewer to re-confirm against a live wizard screenshot if one becomes accessible.- Indemnización, Jubilación en parcialidades, and Jubilación pago único income sub-types are out of scope beyond their downstream aggregate effect. Unlike Asimilados a salarios and Ingresos del seguro de retiro — both of which the guide walks as full worked examples with named input fields (p.19-21) — these three are only named as tab headings (p.16, p.19) and referenced by their effect on two aggregate fields:
nonAccruableIncome("Ingresos no acumulables", p.25, which the guide ties to indemnización and jubilación pago único specifically — not jubilación en parcialidades) andisrNonAccruableIncomeTax("ISR de sueldos y salarios por ingresos no acumulables", p.45, which the guide ties to all three). I modelled a single combined gating boolean,declaresIndemnizacionOrJubilacion, covering all three for simplicity, rather than inventing three separate un-sourced field sets — this is a simplification a reviewer should be aware of, since the source itself is not perfectly consistent about which of the three specifically drivesnonAccruableIncome. - Per-withholding-agent and per-CFDI-deduction records are bounded to one instance each. The live wizard supports adding multiple salary-income records (one per employer/retenedor, p.16-17) and multiple personal- deduction CFDI records per deduction type (p.32-34). GovSchema v0.3 has no native repeating-group field type (GSP-0009), so both are modelled as a single bounded record (
withholdingAgentRfc/withholdingAgentName/salaryIncomeFromWithholdingAgent/exemptIncomeFromWithholdingAgentfor the former;deductionIssuerRfc/deductionIssuerName/deductionIssueDate/deductionPaymentMethod/deductionDescription/deductionTotalAmount/deductionDeductibleAmount/deductionRecoveredExpenseAmountfor the latter), with the true aggregate totals (annualIncome,totalDeductibleAmount, etc.) still modelled as their own system-computed fields. personalDeductionTypeanddeductionPaymentMethod(Forma de pago) are modelled as free strings, not enums. The guide names three example deduction categories (honorarios médicos/dentales y gastos hospitalarios, gastos funerales, colegiaturas) plus the 2025-new "Sin clasificación" bucket, and separately instructs the filer to "select the Tipo de Deducción according to the options shown" (p.33) without rendering that dropdown's full option list on screen. Since SAT's personal-deduction catalog (aligned to the Ley del ISR's Art. 151) is known to include more categories than the three named examples (e.g. donativos, aportaciones complementarias de retiro, primas de seguros de gastos médicos, intereses reales por créditos hipotecarios), asserting a closed enum from an unconfirmed subset would risk under-representing real values, so both fields are left as open strings pending a reviewer confirming the full catalog against the Visor de Deducciones Personales or Art. 151 itself. Likewiseperiod(Periodo, Configuración step, p.8) andreportableTaxSchemeType(Tipo de esquema reportable, p.54) are left as open strings for the same "dropdown named but not rendered" reason.- Offset/compensation source-declaration sub-dialog left as an aggregate only. Page 57-58 describes an "Agregar" sub-dialog for registering the specific prior declaration(s) that generated a saldo a favor being compensated, but only says to "capture each field that is enabled with the corresponding information" — no field labels are shown. Only the resulting aggregate fields (
offsetDetailAmount,totalApplicationsAmount) are modelled; the per-record sub-dialog itself is out of scope for v1.0.0. - No explicit "filed after the deadline" boolean models
updatedPortionAmount(Parte actualizada) /surchargesAmount(Recargos). The guide states these two fields are "enabled" when the declaration is filed after the legal deadline (p.55-56), computed from the gap between the due date and the actual payment date, but names no corresponding applicant-facing field for "are you filing late" — so both are modelled as optional, uncondition-gated numeric fields with a description explaining the real trigger, rather than inventing a synthetic boolean gate with no source backing. balanceInFavorAmountandbalanceDueAmountare modelled as two separate, both-optional fields rather than one polarity-signed amount. The guide presents them as two mutually exclusive named fields ("Impuesto a favor del ejercicio", p.47; "Impuesto a cargo del ejercicio", p.50) depending on which way the year's computation resolves, matching the source's own structure rather than synthesizing a combined signed-amount field the guide never uses.maxDeductibleLimitAmount's $206,368.00 MXN cap is fiscal-year-2025- specific. The guide states this figure explicitly (p.27) as the cap alternative to "15% of total income" for the ejercicio the guide covers; a future edition of this document (or aus-tax-year-styleeditionaxis, per GSP-0005) would need to update this figure for a later fiscal year, since SAT republishes this guide annually with the year's own updated peso figures and ISR tariff table.crossFieldValidation'stotalDeductibleWithinLimitrule (assertingtotalDeductibleAmount <= maxDeductibleLimitAmount) is inferred from the guide's own description ofmaxDeductibleLimitAmountas "the limit amount that results as the lesser of [...]" (p.27) — the guide does not state the inequality as an explicit validation rule the way a field-level citation would, but it follows directly from the two fields' own defined meanings.
Explicitly out of scope for v1.0.0
- The SAT portal login/authentication step (RFC + Contraseña + captcha, or e.firma) preceding the wizard.
- Indemnización, Jubilación en parcialidades, and Jubilación pago único income sub-types' own detailed input fields (only their downstream aggregate effect is modelled — see judgment call 3).
- Repeating per-withholding-agent income records and repeating per-CFDI personal-deduction records beyond one bounded instance each (GSP-0009).
- The offset/compensation source-declaration per-record sub-dialog (p.57-58 — see judgment call 6).
- The read-only Vista previa / Revisar / Enviar declaración review-and- submit screens (they only echo prior steps) and the Acuse de recibo receipt output (a generated PDF, not an input form).
- Every other SAT income regime (Actividad Empresarial y Servicios Profesionales, Plataformas Tecnológicas Digitales, Arrendamiento, Decreto Plan México, ISSIF) — each has its own sibling guide on the same landing page and is an open candidate for a future cycle.
Validation
`` node tools/validate-ajv.mjs registry/mx/sat/declaracion-anual-sueldos-salarios/1.0.0/schema.json ``
Result: ok.
View the raw record (VERIFICATION.md)
Version history
-
1.0.0draftlatestthis pagehas verification recordschema.json
Independent and non-affiliated
GovSchema is an independent, open-source project. This reference is not produced, reviewed, or endorsed by Servicio de Administración Tributaria or any government. The authoritative source is always the live government form and its official instructions.