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

Jurisdiction
Mexico · national
Version
1.0.0
Verification
draft

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

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

  • taxYear integer required

    Ejercicio

    range: 2020–2100
  • declarationType enum required

    Normal 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
  • period string required

    Dropdown 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
  • hasForeignIncomeOrPendingCredit boolean required

    ¿Obtuviste ingresos y pagaste impuestos en el extranjero o tienes impuesto pendiente de acreditar?

Ingresos

  • acceptsSalaryIncomePrecarga boolean optional

    Shown only when the system has pre-loaded third-party-reported (CFDI de nómina) salary income for review; not shown when no precarga exists.

  • withholdingAgentRfc string required

    RFC 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
  • withholdingAgentName string required

    Nombre, denominación o razón social

    length: 0–300
  • salaryIncomeFromWithholdingAgent number required

    Ingresos por salarios

    range: 0–∞
  • exemptIncomeFromWithholdingAgent number required

    Ingresos exentos

    range: 0–∞
  • declaresAsimiladosASalarios boolean required

    Whether 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.

  • isFishingForestryCooperativeMember boolean 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?

  • assimilatedIncome number optional

    Editable only when no third-party precarga exists for this income; otherwise shows the precargado amount, which can still be modified.

    range: 0–∞
  • assimilatedIncomeTaxWithheld number optional

    Impuesto retenido (Asimilados a salarios)

    range: 0–∞
  • exemptIncomeFishingForestryCooperative number optional

    Ingresos exentos por ser integrante de una sociedad cooperativa de producción dedicada exclusivamente a actividades pesqueras o silvícolas

    range: 0–∞
  • declaresIngresosSeguroRetiro boolean required

    Whether the filer received retirement-insurance income during the fiscal year. Same interpretive-flag caveat as declaresAsimiladosASalarios — see VERIFICATION.md.

  • retirementInsuranceIncome number optional

    Ingresos (seguro de retiro)

    range: 0–∞
  • retirementInsuranceExemptIncome number optional

    Ingresos exentos (seguro de retiro)

    range: 0–∞
  • retirementInsuranceYearsOfService integer optional

    Número de años de servicio

    range: 0–80
  • retirementInsuranceTaxWithheld number optional

    Impuesto retenido (seguro de retiro)

    range: 0–∞
  • declaresIndemnizacionOrJubilacion boolean required

    Whether 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.

  • annualIncome number required

    System-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–∞
  • exemptIncome number required

    System-calculated per the exemption limits in the Ley del Impuesto sobre la Renta.

    range: 0–∞
  • accruableIncome number required

    System-calculated.

    range: 0–∞
  • nonAccruableIncome number optional

    Result 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–∞
  • employmentSubsidy number optional

    Shown when the withholding agent(s) calculated an employment subsidy during the fiscal year.

    range: 0–∞
  • incomeTaxWithheld number required

    System-calculated total ISR withheld for the fiscal year.

    range: 0–∞

Deducciones personales

  • personalDeductionType string required

    Dropdown 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
  • deductionIssuerRfc string required

    Captured 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
  • deductionIssuerName string required

    Nombre, denominación o razón social

    length: 0–300
  • deductionIssueDate date required

    Fecha de emisión

  • deductionPaymentMethod string required

    Dropdown; option list not rendered on screen in the guide, so no enum is asserted.

    length: 0–100
  • deductionDescription string required

    Descripción

    length: 0–500
  • deductionTotalAmount number required

    Importe total

    range: 0–∞
  • deductionDeductibleAmount number required

    Monto deducible

    range: 0–∞
  • deductionRecoveredExpenseAmount number optional

    Only enabled for capture in some cases (e.g. reimbursed medical expenses); left blank otherwise.

    range: 0–∞
  • acceptsDeductionPrecarga boolean optional

    Shown per pre-loaded CFDI deduction record; not shown for a manually-added record with no precarga.

  • totalDeductibleAmount number required

    System-calculated total of the personal deductions taken for the fiscal year.

    range: 0–∞
  • maxDeductibleLimitAmount number required

    System-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

  • taxableBase number required

    Ingresos acumulables minus Deducciones personales; system-calculated.

    range: 0–∞
  • isrPerAnnualTariff number required

    Result 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–∞
  • isrNonAccruableIncomeTax number optional

    ISR de sueldos y salarios por ingresos no acumulables

    range: 0–∞
  • provisionalPaymentsTotal number required

    Total provisional payments made during the fiscal year; system-calculated.

    range: 0–∞
  • balanceInFavorAmount number optional

    Populated only when the annual computation yields a favorable balance; mutually exclusive in practice with balanceDueAmount.

    range: 0–∞
  • balanceInFavorAction enum optional

    ¿Qué deseas hacer con tu saldo a favor?

    enum: devolucion | compensacion
  • refundClabe string optional

    18-digit standardized banking code (Clave Bancaria Estandarizada); either selected from a list of the filer's known accounts or captured fresh.

    patternclassification: financial
  • refundBankAccountHolderConfirmed boolean optional

    Confirmación de titularidad de la cuenta

  • balanceDueAmount number optional

    Populated only when the annual computation yields tax due; mutually exclusive in practice with balanceInFavorAmount.

    range: 0–∞
  • reportsOtherExemptIncome boolean 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)

  • loansAmount number optional

    Préstamos

    range: 0–∞
  • donationsReceivedAmount number optional

    Donativos

    range: 0–∞
  • prizesAmount number optional

    Premios

    range: 0–∞
  • travelAllowancesCollectedAmount number optional

    Viáticos cobrados

    range: 0–∞
  • homeSaleAmount number optional

    Enajenación de casa habitación

    range: 0–∞
  • inheritanceOrLegacyAmount number optional

    Herencias o legados

    range: 0–∞
  • hasOtherInformativeData boolean required

    ¿Tienes otros datos informativos que declarar?

  • governmentSupportIncomeAmount number optional

    Ingresos obtenidos por apoyos gubernamentales

    range: 0–∞
  • earthquake2017SupportIncomeAmount number optional

    Ingresos obtenidos por apoyos gubernamentales con motivo de los sismos del 7 y 19 de septiembre de 2017

    range: 0–∞
  • debtForgivenessHousingAmount number optional

    Monto de la condonación o remisión de deuda de créditos otorgados para adquisición de casa habitación

    range: 0–∞
  • hasReportableTaxSchemes boolean required

    ¿Tiene esquemas fiscales reportables que informar?

  • reportableTaxSchemeType string optional

    Dropdown; option list not rendered on screen in the guide, so no enum is asserted.

    length: 0–200
  • reportableTaxSchemeId string optional

    Número de identificación del esquema reportable

    length: 0–50

Pago

  • totalContributionsAmount number optional

    A cargo más Parte actualizada más Recargos (when the latter two are enabled); system-calculated.

    range: 0–∞
  • updatedPortionAmount number optional

    Enabled 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–∞
  • surchargesAmount number optional

    Enabled automatically, together with Parte actualizada, when the declaration is filed after the legal deadline; see updatedPortionAmount.

    range: 0–∞
  • appliesOffsetOrTaxIncentive boolean optional

    ¿Desea aplicar alguna compensación o estímulo fiscal?

  • offsetDetailAmount number optional

    Aggregate 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–∞
  • totalApplicationsAmount number optional

    Total de aplicaciones

    range: 0–∞
  • amountDue number optional

    System-calculated, after any compensation/estímulo fiscal applied above.

    range: 0–∞
  • paysInInstallments boolean optional

    ¿Opta por pagar en parcialidades?

  • numberOfInstallments integer optional

    Up to six instalments.

    range: 1–6
  • firstInstallmentAmount number optional

    System-calculated.

    range: 0–∞
  • remainingInstallmentsAmount number optional

    System-calculated.

    range: 0–∞
  • amountToPay number optional

    Cantidad a cargo minus Importe sin la primera parcialidad; system-calculated.

    range: 0–∞
  • efirmaPrivateKeyPassword string optional

    Required 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: draft
  • verification.method: manual-source-review-v1
  • verification.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 sibling mx/sat/preinscripcion-rfc-persona-moral guide, whose screenshots carried no text layer and required page-image rendering to read visually. Text was extracted directly via pdfjs-dist (pinned 3.11.174, per this environment's known rendering regression in newer versions) using getTextContent() 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)

  1. 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).
  2. declaresAsimiladosASalarios / declaresIngresosSeguroRetiro / declaresIndemnizacionOrJubilacion are 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.
  3. 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) and isrNonAccruableIncomeTax ("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 drives nonAccruableIncome.
  4. 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/exemptIncomeFromWithholdingAgent for the former; deductionIssuerRfc/deductionIssuerName/ deductionIssueDate/deductionPaymentMethod/deductionDescription/ deductionTotalAmount/deductionDeductibleAmount/ deductionRecoveredExpenseAmount for the latter), with the true aggregate totals (annualIncome, totalDeductibleAmount, etc.) still modelled as their own system-computed fields.
  5. personalDeductionType and deductionPaymentMethod (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. Likewise period (Periodo, Configuración step, p.8) and reportableTaxSchemeType (Tipo de esquema reportable, p.54) are left as open strings for the same "dropdown named but not rendered" reason.
  6. 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.
  7. 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.
  8. balanceInFavorAmount and balanceDueAmount are 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.
  9. 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 a us-tax-year-style edition axis, 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.
  10. crossFieldValidation's totalDeductibleWithinLimit rule (asserting totalDeductibleAmount <= maxDeductibleLimitAmount) is inferred from the guide's own description of maxDeductibleLimitAmount as "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.0 draft latest this page has verification record schema.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.