Source code for cadrumo.application.filing.export_producer

"""Producer-value projection for the declaration export renderer."""

from __future__ import annotations

from dataclasses import dataclass
from datetime import date

from ...core.filing_producer_key import FilingProducerKey
from ...core.period import Period
from ...core.prior_domiciliation_election import PriorDomiciliationElection
from ...domain.calculations.registry.iva_schema_vocabulary import (
    m303_regime_composition_export_code,
    m303_tax_territory_exclusively_foral_mark,
    m303_tax_territory_is_foral,
)
from ...domain.calculations.registry.prorrata_register_catalogue import (
    opcion_prorrata_transition,
    revocacion_prorrata_transition,
)
from ...domain.deadlines.models import ModeloIVAProfile
from ...domain.filing.errors import FilingExportValidationError
from ...domain.iva.refund_eligibility import is_last_filing_period_of_year
from ...domain.modelos.calculation_revision_amendment import M303RectificativaMotive
from ...domain.modelos.calculation_revision_m303_evidence import M303InsolvencyFilingSubtype
from ._producer_ownership import filing_producer_ownership as _filing_producer_ownership
from ._producer_snapshot_m200 import Modelo200ProfileFacts
from .producer_snapshot import (
    AmendmentEvidence,
    ChargeAccountSelection,
    FilingModelProfileFacts,
    FilingProducerSnapshot,
    M303FilingFacts,
    Modelo111ProfileFacts,
    Modelo202ProducerProfile,
    Modelo210ProfileFacts,
    Modelo222ProfileFacts,
    Modelo296ProfileFacts,
    Modelo353ProfileFacts,
    RefundAccountSelection,
)


[docs] @dataclass(frozen=True) class SelectedAccountLexicals: """Rendered lexical values for one selected bank account.""" iban: str | None = None swift_bic: str | None = None bank_name: str | None = None bank_address: str | None = None bank_city: str | None = None bank_country_code: str | None = None
[docs] @dataclass(frozen=True) class M303ProfileLexicals: """Rendered lexical values for a Modelo 303 profile's enrolment facts.""" redeme_enrolled: str | None = None exclusively_foral: str | None = None regime_composition_code: str | None = None cash_accounting_regime_enrolled: str | None = None voluntary_sii_enrolled: str | None = None hydrocarbon_deposit_advance_payment_deduction_entitled: str | None = None is_foral: bool = False
[docs] @dataclass(frozen=True) class M303FilingLexicals: """Rendered lexical values for a Modelo 303 filing's period-specific facts.""" joint_return_elected: str | None = None annual_volume_nonzero: str | None = None recipient_of_cash_accounting_operations: str | None = None prorrata_special_option: str | None = None prorrata_special_revocation: str | None = None insolvency_declared: str | None = None insolvency_judicial_order_date: str | None = None insolvency_filing_subtype: str | None = None exonerado_390_applicable: str | None = None prorrata_transition_applicable: bool = False
[docs] @dataclass(frozen=True) class M303ForalLexicals: """Rendered lexical values for a Modelo 303 foral prorrata election.""" prorrata_special_option: str | None prorrata_special_revocation: str | None
_M296_DECLARANTE_FIELD_BY_KEY: dict[FilingProducerKey, str] = { FilingProducerKey.M296_DEC_EJERCICIO: "ejercicio", FilingProducerKey.M296_DEC_NIF_DEL_DECLARANTE: "nif_del_declarante", FilingProducerKey.M296_DEC_APELLIDOS_Y_NOMBRE_O_RAZON_SOCIAL_DEL: "apellidos_y_nombre_o_razon_social_del", FilingProducerKey.M296_DEC_TIPO_DE_SOPORTE: "tipo_de_soporte", FilingProducerKey.M296_DEC_TELEFONO: "telefono", FilingProducerKey.M296_DEC_APELLIDOS_Y_NOMBRE: "apellidos_y_nombre", FilingProducerKey.M296_DEC_NUMERO_IDENTIFICATIVO_DE_LA_DECLARACIO: "numero_identificativo_de_la_declaracio", FilingProducerKey.M296_DEC_DECLARACION_COMPLEMENTARIA_O_SUSTITUTI: "declaracion_complementaria_o_sustituti", FilingProducerKey.M296_DEC_NUMERO_IDENTIFICATIVO_DE_LA_DECLARACIO_2: "numero_identificativo_de_la_declaracio_2", FilingProducerKey.M296_DEC_NUMERO_TOTAL_DE_PERCEPTORES: "numero_total_de_perceptores", FilingProducerKey.M296_DEC_N: "n", FilingProducerKey.M296_DEC_SELLO_ELECTRONICO: "sello_electronico", } _SHARED_SNAPSHOT_PRODUCER_KEYS = frozenset( { FilingProducerKey.PRESENTER_TAX_ID, FilingProducerKey.FILING_RESULT_DISPOSITION, FilingProducerKey.TAXPAYER_TAX_ID, FilingProducerKey.TAXPAYER_LEGAL_NAME, FilingProducerKey.TAXPAYER_GIVEN_NAME, FilingProducerKey.TAXPAYER_SURNAMES, FilingProducerKey.TAXPAYER_FULL_NAME, FilingProducerKey.TAXPAYER_SURNAMES_OR_LEGAL_NAME, FilingProducerKey.CONTACT_PERSON_PHONE, FilingProducerKey.CONTACT_PERSON_NAME, FilingProducerKey.CONTACT_PERSON_SECONDARY_PHONE, FilingProducerKey.CONTACT_PERSON_EMAIL, FilingProducerKey.M200_6_DEDUC_EVITAR_DOBLE_IMPOSICION_PARTICIPACIO, FilingProducerKey.M200_6_DEDUC_EVITAR_DOBLE_IMPOSICION_PARTICIPACIO_2, FilingProducerKey.M200_6_DEDUC_EVITAR_DOBLE_IMPOSICION_PARTICIPACIO_3, FilingProducerKey.M200_6_DEDUC_EVITAR_DOBLE_IMPOSICION_PARTICIPACIO_4, FilingProducerKey.M200_6_DEDUC_EVITAR_DOBLE_IMPOSICION_PARTICIPACIO_5, FilingProducerKey.M200_6_DEDUC_EVITAR_DOBLE_IMPOSICION_PARTICIPACIO_6, FilingProducerKey.M200_ABONO_COMPENSACION_ABONO_POR_CONVERSION_DE_A, FilingProducerKey.M200_ABONO_COMPENSACION_COMPENSACION_POR_CONVERSI, FilingProducerKey.M200_APELLIDOS_Y_NOMBRE, FilingProducerKey.M200_B_2_SUMA_DE_PORCENTAJES_DE_PARTICIPACION_DE, FilingProducerKey.M200_B_2_SUMA_DE_PORCENTAJES_DE_PARTICIPACIONES_E, FilingProducerKey.M200_BALANCE_0_NO_CONSTA_1_MOD_NORMAL_2_MOD_ABREV, FilingProducerKey.M200_CODIGO_CNAE_2025_ACTIVIDAD_PRINCIPAL, FilingProducerKey.M200_CODIGO_PAIS_COUNTRY_CODE, FilingProducerKey.M200_COMO_CONSECUENCIA_DE_LA_PRESENTACION_DE_LA_A, FilingProducerKey.M200_CUENTA_BANCARIA_BANCO_BANK_NAME, FilingProducerKey.M200_CUENTA_BANCARIA_CIUDAD_CITY, FilingProducerKey.M200_CUENTA_BANCARIA_CODIGO_SWIFT_BIC, FilingProducerKey.M200_CUENTA_BANCARIA_MARCA_SEPA, FilingProducerKey.M200_CUENTA_CORRIENTE_TRIBUTARIA, FilingProducerKey.M200_DATOS_DE_LA_SOCIEDAD_MATRIZ_ULTIMA_NIF, FilingProducerKey.M200_DATOS_DE_LA_SOCIEDAD_MATRIZ_ULTIMA_NOMBRE_DE, FilingProducerKey.M200_DATOS_DE_LA_SOCIEDAD_MATRIZ_ULTIMA_RAZON_SOC, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_10, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_11, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_12, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_13, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_14, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_15, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_16, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_17, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_18, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_19, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_2, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_20, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_21, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_22, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_23, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_24, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_25, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_26, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_3, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_4, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_5, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_6, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_7, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_8, FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_9, FilingProducerKey.M200_DIRECCION_DE_CORREO_ELECTRONICO_PARA_INCIDEN, FilingProducerKey.M200_DIRECCION_DEL_BANCO_BANK_ADDRESS, FilingProducerKey.M200_ECPN_0_NO_CONSTA_1_MOD_NORMAL_2_MOD_ABREVIAD, FilingProducerKey.M200_EJERCICIO, FilingProducerKey.M200_ENTIDAD_CUYO_IMPORTE_NETO_DE_LA_CIFRA_DE_NEG, FilingProducerKey.M200_ENTIDAD_SIN_OBLIGACION_DE_IDENTIFICAR_EL_TIT, FilingProducerKey.M200_F_IDENTIFICACION_DEL_TITULAR_REAL_DE_LA_ENTI, FilingProducerKey.M200_FECHA_DE_NACIMIENTO, FilingProducerKey.M200_IDENTIFICACION_EJERCICIO, FilingProducerKey.M200_IDENTIFICACION_TIPO_DE_EJERCICIO, FilingProducerKey.M200_IDENTIFICADOR_DE_FIN_DE_REGISTRO, FilingProducerKey.M200_IDENTIFICADOR_DE_FIN_DE_REGISTRO_2, FilingProducerKey.M200_IDENTIFICADOR_DE_FIN_DE_REGISTRO_3, FilingProducerKey.M200_IDENTIFICADOR_DE_FIN_DE_REGISTRO_4, FilingProducerKey.M200_IDENTIFICADOR_DE_FIN_DE_REGISTRO_5, FilingProducerKey.M200_IDENTIFICADOR_DE_FIN_DE_REGISTRO_6, FilingProducerKey.M200_IMPORTE_A_DEVOLVER, FilingProducerKey.M200_IMPORTE_A_INGRESAR, FilingProducerKey.M200_IMPORTE_NETO_DE_LA_CIFRA_DE_NEGOCIOS_DE_LOS, FilingProducerKey.M200_IMPORTE_NETO_DE_LA_CIFRA_DE_NEGOCIOS_DE_LOS_2, FilingProducerKey.M200_IMPORTE_NETO_DE_LA_CIFRA_DE_NEGOCIOS_DE_LOS_3, FilingProducerKey.M200_INFORMACION_ADICIONAL_PRODUCCIONES_CINEMATOG, FilingProducerKey.M200_INFORMACION_ADICIONAL_PRODUCCIONES_CINEMATOG_2, FilingProducerKey.M200_INFORMACION_ADICIONAL_PRODUCCIONES_CINEMATOG_3, FilingProducerKey.M200_INFORMACION_ADICIONAL_PRODUCCIONES_CINEMATOG_4, FilingProducerKey.M200_INFORMACION_ADICIONAL_PRODUCCIONES_CINEMATOG_5, FilingProducerKey.M200_INFORMACION_ADICIONAL_PRODUCCIONES_CINEMATOG_6, FilingProducerKey.M200_INOPERATIVIDAD_DEL_ORDEN_DE_CUMPLIMENTACION, FilingProducerKey.M200_INVERSIONES_EN_PRODUCCIONES_CINEMATOGRAFICAS, FilingProducerKey.M200_INVERSIONES_EN_PRODUCCIONES_CINEMATOGRAFICAS_2, FilingProducerKey.M200_INVERSIONES_EN_PRODUCCIONES_CINEMATOGRAFICAS_3, FilingProducerKey.M200_INVERSIONES_EN_PRODUCCIONES_CINEMATOGRAFICAS_4, FilingProducerKey.M200_INVERSIONES_EN_PRODUCCIONES_CINEMATOGRAFICAS_5, FilingProducerKey.M200_INVERSIONES_EN_PRODUCCIONES_CINEMATOGRAFICAS_6, FilingProducerKey.M200_MODALIDAD_DE_INGRESO_UNO_DE_LOS_SIGUIENTES_V, FilingProducerKey.M200_MODELO_DE_ESTADOS_CONTABLES_QUE_SE_VA_A_CUMP, FilingProducerKey.M200_N_I_F_DE_LA_SOCIEDAD_REPRESENTANTE_DOMINANTE, FilingProducerKey.M200_NIF_CODIGO_DE_IDENTIFICACION_EXTRANJERO, FilingProducerKey.M200_NIF_EN_EL_PAIS_DE_RESIDENCIA_TIN, FilingProducerKey.M200_NO_IDENTIFICACION_DE_LA_SOCIEDAD_DOMINANTE_E, FilingProducerKey.M200_NO_RESIDENTES_MAS_DE_UN_ESTABLECIMIENTO_PERM, FilingProducerKey.M200_NOMBRE_Y_APELLIDOS_DE_LA_PERSONA_DE_CONTACTO, FilingProducerKey.M200_NUMERO_DE_CUENTA_IBAN, FilingProducerKey.M200_NUMERO_DE_CUENTA_IBAN_2, FilingProducerKey.M200_NUMERO_DE_PERIODO_IMPOSITIVO, FilingProducerKey.M200_PAIS_DE_EXPEDICION_DEL_DOCUMENTO_DE_IDENTIFI, FilingProducerKey.M200_PAIS_DE_RESIDENCIA, FilingProducerKey.M200_PAIS_DE_RESIDENCIA_2, FilingProducerKey.M200_PARTE_DE_LA_BASE_IMPONIBLE_DEL_PERIODO_IMPOS, FilingProducerKey.M200_PARTE_DE_LA_BASE_IMPONIBLE_DEL_PERIODO_IMPOS_2, FilingProducerKey.M200_PERDIDAS_Y_GANANCIAS_0_NO_CONSTA_1_MOD_NORMA, FilingProducerKey.M200_PERIODO, FilingProducerKey.M200_PERIODO_IMPOSITIVO, FilingProducerKey.M200_PERIODO_IMPOSITIVO_ANO_FINAL, FilingProducerKey.M200_PERIODO_IMPOSITIVO_ANO_INICIO, FilingProducerKey.M200_PERIODO_IMPOSITIVO_DIA_FINAL, FilingProducerKey.M200_PERIODO_IMPOSITIVO_DIA_INICIO, FilingProducerKey.M200_PERIODO_IMPOSITIVO_FIN_ANO, FilingProducerKey.M200_PERIODO_IMPOSITIVO_FIN_DIA, FilingProducerKey.M200_PERIODO_IMPOSITIVO_FIN_MES, FilingProducerKey.M200_PERIODO_IMPOSITIVO_INICIO_ANO, FilingProducerKey.M200_PERIODO_IMPOSITIVO_INICIO_DIA, FilingProducerKey.M200_PERIODO_IMPOSITIVO_INICIO_MES, FilingProducerKey.M200_PERIODO_IMPOSITIVO_MES_FINAL, FilingProducerKey.M200_PERIODO_IMPOSITIVO_MES_INICIO, FilingProducerKey.M200_PRESENTACION_DE_DOCUMENTACION_PREVIA_EN_LA_S, FilingProducerKey.M200_PRESENTACION_DE_DOCUMENTACION_PREVIA_EN_LA_S_2, FilingProducerKey.M200_PRESENTACION_DE_DOCUMENTACION_PREVIA_EN_LA_S_3, FilingProducerKey.M200_PRESENTACION_DE_DOCUMENTACION_PREVIA_EN_LA_S_4, FilingProducerKey.M200_PRESENTACION_DE_DOCUMENTACION_PREVIA_EN_LA_S_5, FilingProducerKey.M200_PRESENTACION_DE_DOCUMENTACION_PREVIA_EN_LA_S_6, FilingProducerKey.M200_PRESENTACION_DE_DOCUMENTACION_PREVIA_EN_LA_S_7, FilingProducerKey.M200_PRESENTACION_DE_DOCUMENTACION_PREVIA_EN_LA_S_8, FilingProducerKey.M200_REALIZA_ACTIVIDADES_AGRICOLAS_Y_O_GANADERAS, FilingProducerKey.M200_REG_ENTIDADES_NAVIERAS_EN_FUNCION_DEL_TONELA, FilingProducerKey.M200_RENUNCIA_O_POR_TRANSFERENCIA, FilingProducerKey.M200_RESULTADO_A_INGRESAR_CORRESPONDIENTE_A_LA_AN, FilingProducerKey.M200_RESULTADO_A_INGRESAR_CORRESPONDIENTE_A_LA_AN_2, FilingProducerKey.M200_RESULTADO_CERO, FilingProducerKey.M200_SOCIMIS_REGIMEN_FISCAL_DE_ENTRADA_SALIDA_REN, FilingProducerKey.M200_TIPO_DE_DECLARACION_VER_NOTA, FilingProducerKey.M200_TIPO_DE_EJERCICIO, FilingProducerKey.M200_TIPO_DOCUMENTO_IDENTIFICATIVO, FilingProducerKey.IRNR_CONTRIBUYENTE_BIRTH_CITY, FilingProducerKey.IRNR_CONTRIBUYENTE_BIRTH_COUNTRY_CODE, FilingProducerKey.IRNR_CONTRIBUYENTE_BIRTH_DATE, FilingProducerKey.IRNR_CONTRIBUYENTE_FOREIGN_ADDRESS_CITY, FilingProducerKey.IRNR_CONTRIBUYENTE_FOREIGN_ADDRESS_COMPLEMENT, FilingProducerKey.IRNR_CONTRIBUYENTE_FOREIGN_ADDRESS_COUNTRY_CODE, FilingProducerKey.IRNR_CONTRIBUYENTE_FOREIGN_ADDRESS_EMAIL, FilingProducerKey.IRNR_CONTRIBUYENTE_FOREIGN_ADDRESS_FAX, FilingProducerKey.IRNR_CONTRIBUYENTE_FOREIGN_ADDRESS_MOBILE_PHONE, FilingProducerKey.IRNR_CONTRIBUYENTE_FOREIGN_ADDRESS_PHONE, FilingProducerKey.IRNR_CONTRIBUYENTE_FOREIGN_ADDRESS_POSTAL_CODE, FilingProducerKey.IRNR_CONTRIBUYENTE_FOREIGN_ADDRESS_REGION, FilingProducerKey.IRNR_CONTRIBUYENTE_FOREIGN_ADDRESS_STREET, FilingProducerKey.IRNR_CONTRIBUYENTE_FOREIGN_TAX_ID, FilingProducerKey.IRNR_CONTRIBUYENTE_FULL_NAME, FilingProducerKey.IRNR_CONTRIBUYENTE_PERSON_TYPE, FilingProducerKey.IRNR_CONTRIBUYENTE_TAX_ID, FilingProducerKey.IRNR_CONTRIBUYENTE_TAX_RESIDENCE_COUNTRY_CODE, FilingProducerKey.IRNR_DECLARACION_TIPO, FilingProducerKey.IRNR_DECLARANTE_CAPACITY_CONTRIBUYENTE, FilingProducerKey.IRNR_DECLARANTE_CAPACITY_DEPOSITARIO, FilingProducerKey.IRNR_DECLARANTE_CAPACITY_GESTOR, FilingProducerKey.IRNR_DECLARANTE_CAPACITY_PAGADOR, FilingProducerKey.IRNR_DECLARANTE_CAPACITY_REPRESENTANTE, FilingProducerKey.IRNR_DECLARANTE_CAPACITY_RETENEDOR, FilingProducerKey.IRNR_DECLARANTE_FULL_NAME, FilingProducerKey.IRNR_DECLARANTE_TAX_ID, FilingProducerKey.IRNR_DEVENGO_AGRUPACION, FilingProducerKey.IRNR_DEVENGO_FECHA_DEVENGO, FilingProducerKey.IRNR_DEVOLUCION_CUENTA_RESTO_BANCO, FilingProducerKey.IRNR_DEVOLUCION_CUENTA_RESTO_CIUDAD, FilingProducerKey.IRNR_DEVOLUCION_CUENTA_RESTO_CODIGO_PAIS, FilingProducerKey.IRNR_DEVOLUCION_CUENTA_RESTO_DIRECCION_BANCO, FilingProducerKey.IRNR_DEVOLUCION_CUENTA_RESTO_NUMERO_CUENTA, FilingProducerKey.IRNR_DEVOLUCION_CUENTA_RESTO_SWIFT_BIC, FilingProducerKey.IRNR_DEVOLUCION_CUENTA_SEPA_IBAN, FilingProducerKey.IRNR_DEVOLUCION_CUENTA_SEPA_SWIFT_BIC, FilingProducerKey.IRNR_DEVOLUCION_CUENTA_TITULAR_FULL_NAME, FilingProducerKey.IRNR_DEVOLUCION_CUENTA_TITULAR_TAX_ID, FilingProducerKey.IRNR_DEVOLUCION_RENUNCIA_A_FAVOR_DEL_TESORO, FilingProducerKey.IRNR_GANANCIA_INMOBILIARIA_CONYUGE_FULL_NAME, FilingProducerKey.IRNR_GANANCIA_INMOBILIARIA_CONYUGE_TAX_ID, FilingProducerKey.IRNR_GANANCIA_INMOBILIARIA_CUOTA_PARTICIPACION_CONTRIBUYENTE, FilingProducerKey.IRNR_GANANCIA_INMOBILIARIA_CUOTA_PARTICIPACION_CONYUGE, FilingProducerKey.IRNR_GANANCIA_INMOBILIARIA_FECHA_ADQUISICION, FilingProducerKey.IRNR_GANANCIA_INMOBILIARIA_FECHA_MEJORA, FilingProducerKey.IRNR_GANANCIA_INMOBILIARIA_JUSTIFICANTE_MODELO_211, FilingProducerKey.IRNR_GANANCIA_INMOBILIARIA_TITULARIDAD, FilingProducerKey.IRNR_INGRESO_CUENTA_RESTO_BANCO, FilingProducerKey.IRNR_INGRESO_CUENTA_RESTO_CIUDAD, FilingProducerKey.IRNR_INGRESO_CUENTA_RESTO_CODIGO_PAIS, FilingProducerKey.IRNR_INGRESO_CUENTA_RESTO_DIRECCION_BANCO, FilingProducerKey.IRNR_INGRESO_CUENTA_RESTO_NUMERO_CUENTA, FilingProducerKey.IRNR_INGRESO_CUENTA_RESTO_SWIFT_BIC, FilingProducerKey.IRNR_INGRESO_CUENTA_SEPA_IBAN, FilingProducerKey.IRNR_INGRESO_CUENTA_SEPA_SWIFT_BIC, FilingProducerKey.IRNR_INGRESO_CUENTA_TITULAR_FULL_NAME, FilingProducerKey.IRNR_INGRESO_CUENTA_TITULAR_TAX_ID, FilingProducerKey.IRNR_INGRESO_FORMA_PAGO, FilingProducerKey.IRNR_INMUEBLE_REFERENCIA_CATASTRAL, FilingProducerKey.IRNR_INMUEBLE_SITUACION_BLOQUE, FilingProducerKey.IRNR_INMUEBLE_SITUACION_CALIFICADOR_NUMERO, FilingProducerKey.IRNR_INMUEBLE_SITUACION_CODIGO_INE_MUNICIPIO, FilingProducerKey.IRNR_INMUEBLE_SITUACION_CODIGO_POSTAL, FilingProducerKey.IRNR_INMUEBLE_SITUACION_CODIGO_PROVINCIA, FilingProducerKey.IRNR_INMUEBLE_SITUACION_DATOS_COMPLEMENTARIOS, FilingProducerKey.IRNR_INMUEBLE_SITUACION_ESCALERA, FilingProducerKey.IRNR_INMUEBLE_SITUACION_LOCALIDAD, FilingProducerKey.IRNR_INMUEBLE_SITUACION_NOMBRE_VIA, FilingProducerKey.IRNR_INMUEBLE_SITUACION_NUMERO_CASA, FilingProducerKey.IRNR_INMUEBLE_SITUACION_PLANTA, FilingProducerKey.IRNR_INMUEBLE_SITUACION_PORTAL, FilingProducerKey.IRNR_INMUEBLE_SITUACION_PUERTA, FilingProducerKey.IRNR_INMUEBLE_SITUACION_TIPO_NUMERACION, FilingProducerKey.IRNR_INMUEBLE_SITUACION_TIPO_VIA, FilingProducerKey.IRNR_PAGADOR_FULL_NAME, FilingProducerKey.IRNR_PAGADOR_PERSON_TYPE, FilingProducerKey.IRNR_PAGADOR_TAX_ID, FilingProducerKey.IRNR_RENTA_CLAVE_DIVISA, FilingProducerKey.IRNR_REPRESENTANTE_APPOINTMENT_KIND, FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_BLOQUE, FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_CALIFICADOR_NUMERO, FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_CODIGO_INE_MUNICIPIO, FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_CODIGO_POSTAL, FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_CODIGO_PROVINCIA, FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_DATOS_COMPLEMENTARIOS, FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_ESCALERA, FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_LOCALIDAD, FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_NOMBRE_VIA, FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_NUMERO_CASA, FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_PLANTA, FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_PORTAL, FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_PUERTA, FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_TIPO_NUMERACION, FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_TIPO_VIA, FilingProducerKey.IRNR_REPRESENTANTE_FAX, FilingProducerKey.IRNR_REPRESENTANTE_FULL_NAME, FilingProducerKey.IRNR_REPRESENTANTE_MOBILE_PHONE, FilingProducerKey.IRNR_REPRESENTANTE_PERSON_TYPE, FilingProducerKey.IRNR_REPRESENTANTE_PHONE, FilingProducerKey.IRNR_REPRESENTANTE_TAX_ID, FilingProducerKey.IRNR_SIN_INGRESO_NI_DEVOLUCION_CUOTA_CERO, FilingProducerKey.AMENDMENT_IS_RECTIFICATIVA, FilingProducerKey.AMENDMENT_IS_COMPLEMENTARIA, FilingProducerKey.AMENDMENT_ORIGINAL_AEAT_RECEIPT, FilingProducerKey.AMENDMENT_SUSTITUTIVA_OR_COMPLEMENTARIA_MARKER, FilingProducerKey.AMENDMENT_M303_MOTIVE_RECTIFICACIONES, FilingProducerKey.AMENDMENT_M303_MOTIVE_DISCREPANCIA_CRITERIO_ADMINISTRATIVO, FilingProducerKey.SELECTED_ACCOUNT_IBAN, FilingProducerKey.SELECTED_ACCOUNT_SWIFT_BIC, FilingProducerKey.SELECTED_ACCOUNT_BANK_NAME, FilingProducerKey.SELECTED_ACCOUNT_BANK_ADDRESS, FilingProducerKey.SELECTED_ACCOUNT_BANK_CITY, FilingProducerKey.SELECTED_ACCOUNT_BANK_COUNTRY_CODE, FilingProducerKey.PRIOR_DOMICILIATION_ACTION, FilingProducerKey.M303_REDEME_ENROLLED, FilingProducerKey.M303_EXCLUSIVELY_FORAL, FilingProducerKey.M303_REGIME_COMPOSITION_CODE, FilingProducerKey.M303_ANNUAL_VOLUME_NONZERO, FilingProducerKey.M303_JOINT_RETURN_ELECTED, FilingProducerKey.M303_CASH_ACCOUNTING_REGIME_ENROLLED, FilingProducerKey.M303_RECIPIENT_OF_CASH_ACCOUNTING_OPERATIONS, FilingProducerKey.M303_PRORRATA_SPECIAL_OPTION, FilingProducerKey.M303_PRORRATA_SPECIAL_REVOCATION, FilingProducerKey.M303_INSOLVENCY_DECLARED, FilingProducerKey.M303_INSOLVENCY_JUDICIAL_ORDER_DATE, FilingProducerKey.M303_INSOLVENCY_FILING_SUBTYPE, FilingProducerKey.M303_VOLUNTARY_SII_ENROLLED, FilingProducerKey.M303_EXONERADO_390_APPLICABLE, FilingProducerKey.M303_HYDROCARBON_DEPOSIT_ADVANCE_PAYMENT_DEDUCTION_ENTITLED, FilingProducerKey.M111_COLEGIO_CONCERTADO, FilingProducerKey.M222_NUMERO_GRUPO, FilingProducerKey.M222_REPRESENTANTE_O_DOMINANTE, FilingProducerKey.M222_NORMATIVA_TERRITORIO_FORAL, FilingProducerKey.M222_ENTIDAD_DOMINANTE_IDENTIFICACION, FilingProducerKey.M222_ENTIDAD_DOMINANTE_PAIS_TERRITORIO_FORAL, FilingProducerKey.M222_ENTIDAD_DOMINANTE_RAZON_SOCIAL, FilingProducerKey.M222_FECHA_INICIO_PERIODO_IMPOSITIVO, FilingProducerKey.M222_CNAE_ACTIVIDAD_PRINCIPAL, FilingProducerKey.M222_REGIMEN_ENTIDADES_NAVIERAS_TONELAJE, FilingProducerKey.M222_REGIMEN_REDUCIDA_DIMENSION, FilingProducerKey.M222_CIFRA_NEGOCIOS_GRUPO_DOCE_MESES, FilingProducerKey.M222_COOPERATIVA_FISCALMENTE_PROTEGIDA, FilingProducerKey.M222_REGIMEN_ENTIDADES_CAPITAL_RIESGO, FilingProducerKey.M222_CIRCUNSTANCIA_CONCURRENTE, FilingProducerKey.M222_CIFRA_NEGOCIOS_PERIODO_ANTERIOR_TRAMO, FilingProducerKey.M222_MULTIPLES_TIPOS_IMPOSITIVOS, FilingProducerKey.M222_TIPO_GRAVAMEN_IMPUESTO_SOCIEDADES, FilingProducerKey.M222_IMPORTE_NETO_CIFRA_NEGOCIOS_TRAMO, FilingProducerKey.M222_MODALIDAD_LIQUIDACION, FilingProducerKey.M222_COMUNICACION_DATOS_ADICIONALES, FilingProducerKey.M222_NUMERO_REFERENCIA_SOCIEDADES, FilingProducerKey.M222_COMUNICACION_VARIACION_COMPOSICION_GRUPO, FilingProducerKey.M222_NUMERO_REFERENCIA_SOCIEDADES_VARIACION, FilingProducerKey.M353_NUMERO_GRUPO, FilingProducerKey.M353_REGIMEN_ESPECIAL_AVANZADO_ELECTED, FilingProducerKey.M353_REGIMEN_ESPECIAL_INSCRITO_REDEME, FilingProducerKey.M353_SIN_ACTIVIDAD, FilingProducerKey.M353_GRUPO_NORMATIVA_FORAL, FilingProducerKey.M202_CNAE_ACTIVIDAD_PRINCIPAL, FilingProducerKey.M202_REGIMEN_LEY_49_2002_SIN_FINES_LUCRATIVOS, FilingProducerKey.M202_REGIMEN_LEY_11_2009_SOCIMI, FilingProducerKey.M202_REGIMEN_ENTIDADES_NAVIERAS_TONELAJE, FilingProducerKey.M202_REGIMEN_ARTICULO_101_LIS_REDUCIDA_DIMENSION, FilingProducerKey.M202_REGIMEN_ENTIDAD_CAPITAL_RIESGO, FilingProducerKey.M202_CIFRA_NEGOCIOS_DOCE_MESES_UMBRAL, FilingProducerKey.M202_CIFRA_NEGOCIOS_PERIODO_ANTERIOR_BAJO_UMBRAL, FilingProducerKey.M202_COOPERATIVA_O_MULTIPLES_TIPOS, FilingProducerKey.M202_COOPERATIVA_FISCALMENTE_PROTEGIDA, FilingProducerKey.M202_MULTIPLES_TIPOS_IMPOSITIVOS, FilingProducerKey.M202_TIPO_GRAVAMEN_IMPUESTO_SOCIEDADES, FilingProducerKey.M202_IMPORTE_NETO_CIFRA_NEGOCIOS_TRAMO, FilingProducerKey.M202_MARCA_INSTRUMENTAL, FilingProducerKey.M202_DISCRIMINANTE_DECLARACION_NEGATIVA, FilingProducerKey.M202_NORMATIVA_TERRITORIO_FORAL, FilingProducerKey.M202_COMUNICACION_DATOS_ADICIONALES, FilingProducerKey.M202_NUMERO_REFERENCIA_SOCIEDADES, # Derived from the resolver's own map rather than restated: a second copy # here would let the ownership claim and the resolver drift apart, and the # exhaustiveness assertion below would then fire on a key one of them forgot. *_M296_DECLARANTE_FIELD_BY_KEY, } ) _M222_FIELD_BY_KEY: dict[FilingProducerKey, str] = { FilingProducerKey.M222_NUMERO_GRUPO: "numero_grupo", FilingProducerKey.M222_REPRESENTANTE_O_DOMINANTE: "representante_o_dominante", FilingProducerKey.M222_NORMATIVA_TERRITORIO_FORAL: "normativa_territorio_foral", FilingProducerKey.M222_ENTIDAD_DOMINANTE_IDENTIFICACION: "entidad_dominante_identificacion", FilingProducerKey.M222_ENTIDAD_DOMINANTE_PAIS_TERRITORIO_FORAL: "entidad_dominante_pais_territorio_foral", FilingProducerKey.M222_ENTIDAD_DOMINANTE_RAZON_SOCIAL: "entidad_dominante_razon_social", FilingProducerKey.M222_FECHA_INICIO_PERIODO_IMPOSITIVO: "fecha_inicio_periodo_impositivo", FilingProducerKey.M222_CNAE_ACTIVIDAD_PRINCIPAL: "cnae_actividad_principal", FilingProducerKey.M222_REGIMEN_ENTIDADES_NAVIERAS_TONELAJE: "regimen_entidades_navieras_tonelaje", FilingProducerKey.M222_REGIMEN_REDUCIDA_DIMENSION: "regimen_reducida_dimension", FilingProducerKey.M222_CIFRA_NEGOCIOS_GRUPO_DOCE_MESES: "cifra_negocios_grupo_doce_meses", FilingProducerKey.M222_COOPERATIVA_FISCALMENTE_PROTEGIDA: "cooperativa_fiscalmente_protegida", FilingProducerKey.M222_REGIMEN_ENTIDADES_CAPITAL_RIESGO: "regimen_entidades_capital_riesgo", FilingProducerKey.M222_CIRCUNSTANCIA_CONCURRENTE: "circunstancia_concurrente", FilingProducerKey.M222_CIFRA_NEGOCIOS_PERIODO_ANTERIOR_TRAMO: "cifra_negocios_periodo_anterior_tramo", FilingProducerKey.M222_MULTIPLES_TIPOS_IMPOSITIVOS: "multiples_tipos_impositivos", FilingProducerKey.M222_TIPO_GRAVAMEN_IMPUESTO_SOCIEDADES: "tipo_gravamen_impuesto_sociedades", FilingProducerKey.M222_IMPORTE_NETO_CIFRA_NEGOCIOS_TRAMO: "importe_neto_cifra_negocios_tramo", FilingProducerKey.M222_MODALIDAD_LIQUIDACION: "modalidad_liquidacion", FilingProducerKey.M222_COMUNICACION_DATOS_ADICIONALES: "comunicacion_datos_adicionales", FilingProducerKey.M222_NUMERO_REFERENCIA_SOCIEDADES: "numero_referencia_sociedades", FilingProducerKey.M222_COMUNICACION_VARIACION_COMPOSICION_GRUPO: "comunicacion_variacion_composicion_grupo", FilingProducerKey.M222_NUMERO_REFERENCIA_SOCIEDADES_VARIACION: "numero_referencia_sociedades_variacion", }
[docs] def m222_producer_values(model_profile: FilingModelProfileFacts) -> dict[FilingProducerKey, object]: """Resolve the grupo-fiscal producer identities Modelo 222's layout cites. Every one of these keys was declared in the vocabulary and produced by nothing, so the layout's twenty-three header fields -- numero de grupo and entidad dominante among them -- rendered blank on a return that exists to identify a fiscal group. A profile of the wrong type yields every key as ``None`` rather than raising: this resolver runs for every modelo, and only Modelo 222's snapshot validator may decide that a 222 filing without group facts is invalid. """ profile = model_profile if isinstance(model_profile, Modelo222ProfileFacts) else None return { key: (getattr(profile, field) if profile is not None else None) for key, field in _M222_FIELD_BY_KEY.items() }
[docs] def m296_producer_values(model_profile: FilingModelProfileFacts) -> dict[FilingProducerKey, object]: """Resolve the declarante identities Modelo 296's tipo-1 record cites. All twelve ``m296.dec.*`` keys were declared in the vocabulary and produced by nothing, so the ejercicio, the declarante NIF and the razon social rendered blank on the IRNR annual withholding summary. This covers the declarante record only. The four detail records -- perceptor, perceptor-intereses and the two anexos -- cite a further hundred keys that are NOT header facts: they are per-payee and per-pago rows, and each of those records is published as a single non-repeating record, so a resolver here would put one payee into a one-row layout and drop the rest. They are deliberately left unresolved until the records repeat. A profile of the wrong type yields every key as ``None`` rather than raising: this resolver runs for every modelo, and only Modelo 296's snapshot validator may decide that a 296 filing without declarante facts is invalid. """ profile = model_profile if isinstance(model_profile, Modelo296ProfileFacts) else None return { key: (getattr(profile, field) if profile is not None else None) for key, field in _M296_DECLARANTE_FIELD_BY_KEY.items() }
_M353_FIELD_BY_KEY: dict[FilingProducerKey, str] = { FilingProducerKey.M353_NUMERO_GRUPO: "numero_grupo", FilingProducerKey.M353_REGIMEN_ESPECIAL_AVANZADO_ELECTED: "regimen_especial_avanzado_elected", FilingProducerKey.M353_REGIMEN_ESPECIAL_INSCRITO_REDEME: "regimen_especial_inscrito_redeme", FilingProducerKey.M353_SIN_ACTIVIDAD: "sin_actividad", FilingProducerKey.M353_GRUPO_NORMATIVA_FORAL: "grupo_normativa_foral", }
[docs] def m353_producer_values(model_profile: FilingModelProfileFacts) -> dict[FilingProducerKey, object]: """Resolve the grupo de entidades producer identities Modelo 353's layout cites. All five ``m353.*`` keys were declared in the vocabulary and produced by nothing, so the número de grupo at offset 109 and the sin-actividad and normativa-foral marks rendered blank on the aggregate return of a régimen especial del grupo de entidades. A profile of the wrong type yields every key as ``None`` rather than raising: this resolver runs for every modelo, and only Modelo 353's snapshot validator may decide that a 353 filing without group facts is invalid. """ profile = model_profile if isinstance(model_profile, Modelo353ProfileFacts) else None return { key: (getattr(profile, field) if profile is not None else None) for key, field in _M353_FIELD_BY_KEY.items() }
_M202_FIELD_BY_KEY: dict[FilingProducerKey, str] = { FilingProducerKey.M202_CNAE_ACTIVIDAD_PRINCIPAL: "principal_cnae", FilingProducerKey.M202_REGIMEN_LEY_49_2002_SIN_FINES_LUCRATIVOS: "regimen_ley_49_2002_sin_fines_lucrativos", FilingProducerKey.M202_REGIMEN_LEY_11_2009_SOCIMI: "regimen_ley_11_2009_socimi", FilingProducerKey.M202_REGIMEN_ENTIDADES_NAVIERAS_TONELAJE: "regimen_entidades_navieras_tonelaje", FilingProducerKey.M202_REGIMEN_ARTICULO_101_LIS_REDUCIDA_DIMENSION: "regimen_articulo_101_lis_reducida_dimension", FilingProducerKey.M202_REGIMEN_ENTIDAD_CAPITAL_RIESGO: "regimen_entidad_capital_riesgo", FilingProducerKey.M202_CIFRA_NEGOCIOS_DOCE_MESES_UMBRAL: "cifra_negocios_doce_meses_umbral", FilingProducerKey.M202_CIFRA_NEGOCIOS_PERIODO_ANTERIOR_BAJO_UMBRAL: "cifra_negocios_periodo_anterior_bajo_umbral", FilingProducerKey.M202_COOPERATIVA_O_MULTIPLES_TIPOS: "cooperativa_o_multiples_tipos", FilingProducerKey.M202_COOPERATIVA_FISCALMENTE_PROTEGIDA: "cooperativa_fiscalmente_protegida", FilingProducerKey.M202_MULTIPLES_TIPOS_IMPOSITIVOS: "multiples_tipos_impositivos", FilingProducerKey.M202_TIPO_GRAVAMEN_IMPUESTO_SOCIEDADES: "tipo_gravamen_impuesto_sociedades", FilingProducerKey.M202_IMPORTE_NETO_CIFRA_NEGOCIOS_TRAMO: "importe_neto_cifra_negocios_tramo", FilingProducerKey.M202_MARCA_INSTRUMENTAL: "marca_instrumental", FilingProducerKey.M202_DISCRIMINANTE_DECLARACION_NEGATIVA: "discriminante_declaracion_negativa", FilingProducerKey.M202_NORMATIVA_TERRITORIO_FORAL: "normativa_territorio_foral", FilingProducerKey.M202_COMUNICACION_DATOS_ADICIONALES: "comunicacion_datos_adicionales", FilingProducerKey.M202_NUMERO_REFERENCIA_SOCIEDADES: "numero_referencia_sociedades", }
[docs] def m202_producer_values(model_profile: FilingModelProfileFacts) -> dict[FilingProducerKey, object]: """Resolve the régimen marks and principal CNAE modelo 202's layout cites. A profile of the wrong type yields every key as ``None`` rather than raising: this runs for every modelo, and only modelo 202's own snapshot validator may decide that a 202 filing without these facts is invalid. """ profile = model_profile if isinstance(model_profile, Modelo202ProducerProfile) else None return { key: (getattr(profile, field) if profile is not None else None) for key, field in _M202_FIELD_BY_KEY.items() }
_M210_SCOPE_FIELD_BY_KEY: dict[FilingProducerKey, tuple[str, str]] = { FilingProducerKey.IRNR_CONTRIBUYENTE_BIRTH_CITY: ("contribuyente", "birth_city"), FilingProducerKey.IRNR_CONTRIBUYENTE_BIRTH_COUNTRY_CODE: ("contribuyente", "birth_country_code"), FilingProducerKey.IRNR_CONTRIBUYENTE_BIRTH_DATE: ("contribuyente", "birth_date"), FilingProducerKey.IRNR_CONTRIBUYENTE_FOREIGN_ADDRESS_CITY: ("contribuyente", "foreign_address_city"), FilingProducerKey.IRNR_CONTRIBUYENTE_FOREIGN_ADDRESS_COMPLEMENT: ("contribuyente", "foreign_address_complement"), FilingProducerKey.IRNR_CONTRIBUYENTE_FOREIGN_ADDRESS_COUNTRY_CODE: ( "contribuyente", "foreign_address_country_code", ), FilingProducerKey.IRNR_CONTRIBUYENTE_FOREIGN_ADDRESS_EMAIL: ("contribuyente", "foreign_address_email"), FilingProducerKey.IRNR_CONTRIBUYENTE_FOREIGN_ADDRESS_FAX: ("contribuyente", "foreign_address_fax"), FilingProducerKey.IRNR_CONTRIBUYENTE_FOREIGN_ADDRESS_MOBILE_PHONE: ( "contribuyente", "foreign_address_mobile_phone", ), FilingProducerKey.IRNR_CONTRIBUYENTE_FOREIGN_ADDRESS_PHONE: ("contribuyente", "foreign_address_phone"), FilingProducerKey.IRNR_CONTRIBUYENTE_FOREIGN_ADDRESS_POSTAL_CODE: ("contribuyente", "foreign_address_postal_code"), FilingProducerKey.IRNR_CONTRIBUYENTE_FOREIGN_ADDRESS_REGION: ("contribuyente", "foreign_address_region"), FilingProducerKey.IRNR_CONTRIBUYENTE_FOREIGN_ADDRESS_STREET: ("contribuyente", "foreign_address_street"), FilingProducerKey.IRNR_CONTRIBUYENTE_FOREIGN_TAX_ID: ("contribuyente", "foreign_tax_id"), FilingProducerKey.IRNR_CONTRIBUYENTE_FULL_NAME: ("contribuyente", "full_name"), FilingProducerKey.IRNR_CONTRIBUYENTE_PERSON_TYPE: ("contribuyente", "person_type"), FilingProducerKey.IRNR_CONTRIBUYENTE_TAX_ID: ("contribuyente", "tax_id"), FilingProducerKey.IRNR_CONTRIBUYENTE_TAX_RESIDENCE_COUNTRY_CODE: ("contribuyente", "tax_residence_country_code"), FilingProducerKey.IRNR_DECLARACION_TIPO: ("declaracion", "tipo"), FilingProducerKey.IRNR_DECLARANTE_CAPACITY_CONTRIBUYENTE: ("declarante", "capacity_contribuyente"), FilingProducerKey.IRNR_DECLARANTE_CAPACITY_DEPOSITARIO: ("declarante", "capacity_depositario"), FilingProducerKey.IRNR_DECLARANTE_CAPACITY_GESTOR: ("declarante", "capacity_gestor"), FilingProducerKey.IRNR_DECLARANTE_CAPACITY_PAGADOR: ("declarante", "capacity_pagador"), FilingProducerKey.IRNR_DECLARANTE_CAPACITY_REPRESENTANTE: ("declarante", "capacity_representante"), FilingProducerKey.IRNR_DECLARANTE_CAPACITY_RETENEDOR: ("declarante", "capacity_retenedor"), FilingProducerKey.IRNR_DECLARANTE_FULL_NAME: ("declarante", "full_name"), FilingProducerKey.IRNR_DECLARANTE_TAX_ID: ("declarante", "tax_id"), FilingProducerKey.IRNR_DEVENGO_AGRUPACION: ("devengo", "agrupacion"), FilingProducerKey.IRNR_DEVENGO_FECHA_DEVENGO: ("devengo", "fecha_devengo"), FilingProducerKey.IRNR_DEVOLUCION_CUENTA_RESTO_BANCO: ("devolucion", "cuenta_resto_banco"), FilingProducerKey.IRNR_DEVOLUCION_CUENTA_RESTO_CIUDAD: ("devolucion", "cuenta_resto_ciudad"), FilingProducerKey.IRNR_DEVOLUCION_CUENTA_RESTO_CODIGO_PAIS: ("devolucion", "cuenta_resto_codigo_pais"), FilingProducerKey.IRNR_DEVOLUCION_CUENTA_RESTO_DIRECCION_BANCO: ("devolucion", "cuenta_resto_direccion_banco"), FilingProducerKey.IRNR_DEVOLUCION_CUENTA_RESTO_NUMERO_CUENTA: ("devolucion", "cuenta_resto_numero_cuenta"), FilingProducerKey.IRNR_DEVOLUCION_CUENTA_RESTO_SWIFT_BIC: ("devolucion", "cuenta_resto_swift_bic"), FilingProducerKey.IRNR_DEVOLUCION_CUENTA_SEPA_IBAN: ("devolucion", "cuenta_sepa_iban"), FilingProducerKey.IRNR_DEVOLUCION_CUENTA_SEPA_SWIFT_BIC: ("devolucion", "cuenta_sepa_swift_bic"), FilingProducerKey.IRNR_DEVOLUCION_CUENTA_TITULAR_FULL_NAME: ("devolucion", "cuenta_titular_full_name"), FilingProducerKey.IRNR_DEVOLUCION_CUENTA_TITULAR_TAX_ID: ("devolucion", "cuenta_titular_tax_id"), FilingProducerKey.IRNR_DEVOLUCION_RENUNCIA_A_FAVOR_DEL_TESORO: ("devolucion", "renuncia_a_favor_del_tesoro"), FilingProducerKey.IRNR_GANANCIA_INMOBILIARIA_CONYUGE_FULL_NAME: ("ganancia_inmobiliaria", "conyuge_full_name"), FilingProducerKey.IRNR_GANANCIA_INMOBILIARIA_CONYUGE_TAX_ID: ("ganancia_inmobiliaria", "conyuge_tax_id"), FilingProducerKey.IRNR_GANANCIA_INMOBILIARIA_CUOTA_PARTICIPACION_CONTRIBUYENTE: ( "ganancia_inmobiliaria", "cuota_participacion_contribuyente", ), FilingProducerKey.IRNR_GANANCIA_INMOBILIARIA_CUOTA_PARTICIPACION_CONYUGE: ( "ganancia_inmobiliaria", "cuota_participacion_conyuge", ), FilingProducerKey.IRNR_GANANCIA_INMOBILIARIA_FECHA_ADQUISICION: ("ganancia_inmobiliaria", "fecha_adquisicion"), FilingProducerKey.IRNR_GANANCIA_INMOBILIARIA_FECHA_MEJORA: ("ganancia_inmobiliaria", "fecha_mejora"), FilingProducerKey.IRNR_GANANCIA_INMOBILIARIA_JUSTIFICANTE_MODELO_211: ( "ganancia_inmobiliaria", "justificante_modelo_211", ), FilingProducerKey.IRNR_GANANCIA_INMOBILIARIA_TITULARIDAD: ("ganancia_inmobiliaria", "titularidad"), FilingProducerKey.IRNR_INGRESO_CUENTA_RESTO_BANCO: ("ingreso", "cuenta_resto_banco"), FilingProducerKey.IRNR_INGRESO_CUENTA_RESTO_CIUDAD: ("ingreso", "cuenta_resto_ciudad"), FilingProducerKey.IRNR_INGRESO_CUENTA_RESTO_CODIGO_PAIS: ("ingreso", "cuenta_resto_codigo_pais"), FilingProducerKey.IRNR_INGRESO_CUENTA_RESTO_DIRECCION_BANCO: ("ingreso", "cuenta_resto_direccion_banco"), FilingProducerKey.IRNR_INGRESO_CUENTA_RESTO_NUMERO_CUENTA: ("ingreso", "cuenta_resto_numero_cuenta"), FilingProducerKey.IRNR_INGRESO_CUENTA_RESTO_SWIFT_BIC: ("ingreso", "cuenta_resto_swift_bic"), FilingProducerKey.IRNR_INGRESO_CUENTA_SEPA_IBAN: ("ingreso", "cuenta_sepa_iban"), FilingProducerKey.IRNR_INGRESO_CUENTA_SEPA_SWIFT_BIC: ("ingreso", "cuenta_sepa_swift_bic"), FilingProducerKey.IRNR_INGRESO_CUENTA_TITULAR_FULL_NAME: ("ingreso", "cuenta_titular_full_name"), FilingProducerKey.IRNR_INGRESO_CUENTA_TITULAR_TAX_ID: ("ingreso", "cuenta_titular_tax_id"), FilingProducerKey.IRNR_INGRESO_FORMA_PAGO: ("ingreso", "forma_pago"), FilingProducerKey.IRNR_INMUEBLE_REFERENCIA_CATASTRAL: ("inmueble", "referencia_catastral"), FilingProducerKey.IRNR_INMUEBLE_SITUACION_BLOQUE: ("inmueble", "situacion_bloque"), FilingProducerKey.IRNR_INMUEBLE_SITUACION_CALIFICADOR_NUMERO: ("inmueble", "situacion_calificador_numero"), FilingProducerKey.IRNR_INMUEBLE_SITUACION_CODIGO_INE_MUNICIPIO: ("inmueble", "situacion_codigo_ine_municipio"), FilingProducerKey.IRNR_INMUEBLE_SITUACION_CODIGO_POSTAL: ("inmueble", "situacion_codigo_postal"), FilingProducerKey.IRNR_INMUEBLE_SITUACION_CODIGO_PROVINCIA: ("inmueble", "situacion_codigo_provincia"), FilingProducerKey.IRNR_INMUEBLE_SITUACION_DATOS_COMPLEMENTARIOS: ("inmueble", "situacion_datos_complementarios"), FilingProducerKey.IRNR_INMUEBLE_SITUACION_ESCALERA: ("inmueble", "situacion_escalera"), FilingProducerKey.IRNR_INMUEBLE_SITUACION_LOCALIDAD: ("inmueble", "situacion_localidad"), FilingProducerKey.IRNR_INMUEBLE_SITUACION_NOMBRE_VIA: ("inmueble", "situacion_nombre_via"), FilingProducerKey.IRNR_INMUEBLE_SITUACION_NUMERO_CASA: ("inmueble", "situacion_numero_casa"), FilingProducerKey.IRNR_INMUEBLE_SITUACION_PLANTA: ("inmueble", "situacion_planta"), FilingProducerKey.IRNR_INMUEBLE_SITUACION_PORTAL: ("inmueble", "situacion_portal"), FilingProducerKey.IRNR_INMUEBLE_SITUACION_PUERTA: ("inmueble", "situacion_puerta"), FilingProducerKey.IRNR_INMUEBLE_SITUACION_TIPO_NUMERACION: ("inmueble", "situacion_tipo_numeracion"), FilingProducerKey.IRNR_INMUEBLE_SITUACION_TIPO_VIA: ("inmueble", "situacion_tipo_via"), FilingProducerKey.IRNR_PAGADOR_FULL_NAME: ("pagador", "full_name"), FilingProducerKey.IRNR_PAGADOR_PERSON_TYPE: ("pagador", "person_type"), FilingProducerKey.IRNR_PAGADOR_TAX_ID: ("pagador", "tax_id"), FilingProducerKey.IRNR_RENTA_CLAVE_DIVISA: ("renta", "clave_divisa"), FilingProducerKey.IRNR_REPRESENTANTE_APPOINTMENT_KIND: ("representante", "appointment_kind"), FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_BLOQUE: ("representante", "domicilio_bloque"), FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_CALIFICADOR_NUMERO: ( "representante", "domicilio_calificador_numero", ), FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_CODIGO_INE_MUNICIPIO: ( "representante", "domicilio_codigo_ine_municipio", ), FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_CODIGO_POSTAL: ("representante", "domicilio_codigo_postal"), FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_CODIGO_PROVINCIA: ("representante", "domicilio_codigo_provincia"), FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_DATOS_COMPLEMENTARIOS: ( "representante", "domicilio_datos_complementarios", ), FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_ESCALERA: ("representante", "domicilio_escalera"), FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_LOCALIDAD: ("representante", "domicilio_localidad"), FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_NOMBRE_VIA: ("representante", "domicilio_nombre_via"), FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_NUMERO_CASA: ("representante", "domicilio_numero_casa"), FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_PLANTA: ("representante", "domicilio_planta"), FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_PORTAL: ("representante", "domicilio_portal"), FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_PUERTA: ("representante", "domicilio_puerta"), FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_TIPO_NUMERACION: ("representante", "domicilio_tipo_numeracion"), FilingProducerKey.IRNR_REPRESENTANTE_DOMICILIO_TIPO_VIA: ("representante", "domicilio_tipo_via"), FilingProducerKey.IRNR_REPRESENTANTE_FAX: ("representante", "fax"), FilingProducerKey.IRNR_REPRESENTANTE_FULL_NAME: ("representante", "full_name"), FilingProducerKey.IRNR_REPRESENTANTE_MOBILE_PHONE: ("representante", "mobile_phone"), FilingProducerKey.IRNR_REPRESENTANTE_PERSON_TYPE: ("representante", "person_type"), FilingProducerKey.IRNR_REPRESENTANTE_PHONE: ("representante", "phone"), FilingProducerKey.IRNR_REPRESENTANTE_TAX_ID: ("representante", "tax_id"), FilingProducerKey.IRNR_SIN_INGRESO_NI_DEVOLUCION_CUOTA_CERO: ("sin_ingreso_ni_devolucion", "cuota_cero"), }
[docs] def m210_producer_values(model_profile: FilingModelProfileFacts) -> dict[FilingProducerKey, object]: """Resolve the twelve party, property and settlement scopes modelo 210's layout cites. A profile of the wrong type, or a scope the filing does not carry, yields ``None`` rather than raising: AEAT writes an empty alphanumeric header field to blancos, and only a caller knows which scopes its filing has. """ profile = model_profile if isinstance(model_profile, Modelo210ProfileFacts) else None values: dict[FilingProducerKey, object] = {} for key, (scope_name, field) in _M210_SCOPE_FIELD_BY_KEY.items(): scope = getattr(profile, scope_name, None) if profile is not None else None values[key] = getattr(scope, field, None) if scope is not None else None return values
_M200_FIELD_BY_KEY: dict[FilingProducerKey, str] = { FilingProducerKey.M200_6_DEDUC_EVITAR_DOBLE_IMPOSICION_PARTICIPACIO: ( "apartado_6_deduc_evitar_doble_imposicion_participacio" ), FilingProducerKey.M200_6_DEDUC_EVITAR_DOBLE_IMPOSICION_PARTICIPACIO_2: ( "apartado_6_deduc_evitar_doble_imposicion_participacio_2" ), FilingProducerKey.M200_6_DEDUC_EVITAR_DOBLE_IMPOSICION_PARTICIPACIO_3: ( "apartado_6_deduc_evitar_doble_imposicion_participacio_3" ), FilingProducerKey.M200_6_DEDUC_EVITAR_DOBLE_IMPOSICION_PARTICIPACIO_4: ( "apartado_6_deduc_evitar_doble_imposicion_participacio_4" ), FilingProducerKey.M200_6_DEDUC_EVITAR_DOBLE_IMPOSICION_PARTICIPACIO_5: ( "apartado_6_deduc_evitar_doble_imposicion_participacio_5" ), FilingProducerKey.M200_6_DEDUC_EVITAR_DOBLE_IMPOSICION_PARTICIPACIO_6: ( "apartado_6_deduc_evitar_doble_imposicion_participacio_6" ), FilingProducerKey.M200_ABONO_COMPENSACION_ABONO_POR_CONVERSION_DE_A: "abono_compensacion_abono_por_conversion_de_a", FilingProducerKey.M200_ABONO_COMPENSACION_COMPENSACION_POR_CONVERSI: "abono_compensacion_compensacion_por_conversi", FilingProducerKey.M200_APELLIDOS_Y_NOMBRE: "apellidos_y_nombre", FilingProducerKey.M200_B_2_SUMA_DE_PORCENTAJES_DE_PARTICIPACION_DE: "b_2_suma_de_porcentajes_de_participacion_de", FilingProducerKey.M200_B_2_SUMA_DE_PORCENTAJES_DE_PARTICIPACIONES_E: "b_2_suma_de_porcentajes_de_participaciones_e", FilingProducerKey.M200_BALANCE_0_NO_CONSTA_1_MOD_NORMAL_2_MOD_ABREV: "balance_0_no_consta_1_mod_normal_2_mod_abrev", FilingProducerKey.M200_CODIGO_CNAE_2025_ACTIVIDAD_PRINCIPAL: "codigo_cnae_2025_actividad_principal", FilingProducerKey.M200_CODIGO_PAIS_COUNTRY_CODE: "codigo_pais_country_code", FilingProducerKey.M200_COMO_CONSECUENCIA_DE_LA_PRESENTACION_DE_LA_A: "como_consecuencia_de_la_presentacion_de_la_a", FilingProducerKey.M200_CUENTA_BANCARIA_BANCO_BANK_NAME: "cuenta_bancaria_banco_bank_name", FilingProducerKey.M200_CUENTA_BANCARIA_CIUDAD_CITY: "cuenta_bancaria_ciudad_city", FilingProducerKey.M200_CUENTA_BANCARIA_CODIGO_SWIFT_BIC: "cuenta_bancaria_codigo_swift_bic", FilingProducerKey.M200_CUENTA_BANCARIA_MARCA_SEPA: "cuenta_bancaria_marca_sepa", FilingProducerKey.M200_CUENTA_CORRIENTE_TRIBUTARIA: "cuenta_corriente_tributaria", FilingProducerKey.M200_DATOS_DE_LA_SOCIEDAD_MATRIZ_ULTIMA_NIF: "datos_de_la_sociedad_matriz_ultima_nif", FilingProducerKey.M200_DATOS_DE_LA_SOCIEDAD_MATRIZ_ULTIMA_NOMBRE_DE: "datos_de_la_sociedad_matriz_ultima_nombre_de", FilingProducerKey.M200_DATOS_DE_LA_SOCIEDAD_MATRIZ_ULTIMA_RAZON_SOC: "datos_de_la_sociedad_matriz_ultima_razon_soc", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO: "deduccion_resto_del_grupo", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_10: "deduccion_resto_del_grupo_10", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_11: "deduccion_resto_del_grupo_11", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_12: "deduccion_resto_del_grupo_12", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_13: "deduccion_resto_del_grupo_13", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_14: "deduccion_resto_del_grupo_14", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_15: "deduccion_resto_del_grupo_15", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_16: "deduccion_resto_del_grupo_16", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_17: "deduccion_resto_del_grupo_17", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_18: "deduccion_resto_del_grupo_18", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_19: "deduccion_resto_del_grupo_19", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_2: "deduccion_resto_del_grupo_2", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_20: "deduccion_resto_del_grupo_20", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_21: "deduccion_resto_del_grupo_21", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_22: "deduccion_resto_del_grupo_22", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_23: "deduccion_resto_del_grupo_23", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_24: "deduccion_resto_del_grupo_24", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_25: "deduccion_resto_del_grupo_25", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_26: "deduccion_resto_del_grupo_26", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_3: "deduccion_resto_del_grupo_3", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_4: "deduccion_resto_del_grupo_4", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_5: "deduccion_resto_del_grupo_5", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_6: "deduccion_resto_del_grupo_6", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_7: "deduccion_resto_del_grupo_7", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_8: "deduccion_resto_del_grupo_8", FilingProducerKey.M200_DEDUCCION_RESTO_DEL_GRUPO_9: "deduccion_resto_del_grupo_9", FilingProducerKey.M200_DIRECCION_DE_CORREO_ELECTRONICO_PARA_INCIDEN: "direccion_de_correo_electronico_para_inciden", FilingProducerKey.M200_DIRECCION_DEL_BANCO_BANK_ADDRESS: "direccion_del_banco_bank_address", FilingProducerKey.M200_ECPN_0_NO_CONSTA_1_MOD_NORMAL_2_MOD_ABREVIAD: "ecpn_0_no_consta_1_mod_normal_2_mod_abreviad", FilingProducerKey.M200_EJERCICIO: "ejercicio", FilingProducerKey.M200_ENTIDAD_CUYO_IMPORTE_NETO_DE_LA_CIFRA_DE_NEG: "entidad_cuyo_importe_neto_de_la_cifra_de_neg", FilingProducerKey.M200_ENTIDAD_SIN_OBLIGACION_DE_IDENTIFICAR_EL_TIT: "entidad_sin_obligacion_de_identificar_el_tit", FilingProducerKey.M200_F_IDENTIFICACION_DEL_TITULAR_REAL_DE_LA_ENTI: "f_identificacion_del_titular_real_de_la_enti", FilingProducerKey.M200_FECHA_DE_NACIMIENTO: "fecha_de_nacimiento", FilingProducerKey.M200_IDENTIFICACION_EJERCICIO: "identificacion_ejercicio", FilingProducerKey.M200_IDENTIFICACION_TIPO_DE_EJERCICIO: "identificacion_tipo_de_ejercicio", FilingProducerKey.M200_IDENTIFICADOR_DE_FIN_DE_REGISTRO: "identificador_de_fin_de_registro", FilingProducerKey.M200_IDENTIFICADOR_DE_FIN_DE_REGISTRO_2: "identificador_de_fin_de_registro_2", FilingProducerKey.M200_IDENTIFICADOR_DE_FIN_DE_REGISTRO_3: "identificador_de_fin_de_registro_3", FilingProducerKey.M200_IDENTIFICADOR_DE_FIN_DE_REGISTRO_4: "identificador_de_fin_de_registro_4", FilingProducerKey.M200_IDENTIFICADOR_DE_FIN_DE_REGISTRO_5: "identificador_de_fin_de_registro_5", FilingProducerKey.M200_IDENTIFICADOR_DE_FIN_DE_REGISTRO_6: "identificador_de_fin_de_registro_6", FilingProducerKey.M200_IMPORTE_A_DEVOLVER: "importe_a_devolver", FilingProducerKey.M200_IMPORTE_A_INGRESAR: "importe_a_ingresar", FilingProducerKey.M200_IMPORTE_NETO_DE_LA_CIFRA_DE_NEGOCIOS_DE_LOS: "importe_neto_de_la_cifra_de_negocios_de_los", FilingProducerKey.M200_IMPORTE_NETO_DE_LA_CIFRA_DE_NEGOCIOS_DE_LOS_2: ( "importe_neto_de_la_cifra_de_negocios_de_los_2" ), FilingProducerKey.M200_IMPORTE_NETO_DE_LA_CIFRA_DE_NEGOCIOS_DE_LOS_3: ( "importe_neto_de_la_cifra_de_negocios_de_los_3" ), FilingProducerKey.M200_INFORMACION_ADICIONAL_PRODUCCIONES_CINEMATOG: "informacion_adicional_producciones_cinematog", FilingProducerKey.M200_INFORMACION_ADICIONAL_PRODUCCIONES_CINEMATOG_2: ( "informacion_adicional_producciones_cinematog_2" ), FilingProducerKey.M200_INFORMACION_ADICIONAL_PRODUCCIONES_CINEMATOG_3: ( "informacion_adicional_producciones_cinematog_3" ), FilingProducerKey.M200_INFORMACION_ADICIONAL_PRODUCCIONES_CINEMATOG_4: ( "informacion_adicional_producciones_cinematog_4" ), FilingProducerKey.M200_INFORMACION_ADICIONAL_PRODUCCIONES_CINEMATOG_5: ( "informacion_adicional_producciones_cinematog_5" ), FilingProducerKey.M200_INFORMACION_ADICIONAL_PRODUCCIONES_CINEMATOG_6: ( "informacion_adicional_producciones_cinematog_6" ), FilingProducerKey.M200_INOPERATIVIDAD_DEL_ORDEN_DE_CUMPLIMENTACION: "inoperatividad_del_orden_de_cumplimentacion", FilingProducerKey.M200_INVERSIONES_EN_PRODUCCIONES_CINEMATOGRAFICAS: "inversiones_en_producciones_cinematograficas", FilingProducerKey.M200_INVERSIONES_EN_PRODUCCIONES_CINEMATOGRAFICAS_2: ( "inversiones_en_producciones_cinematograficas_2" ), FilingProducerKey.M200_INVERSIONES_EN_PRODUCCIONES_CINEMATOGRAFICAS_3: ( "inversiones_en_producciones_cinematograficas_3" ), FilingProducerKey.M200_INVERSIONES_EN_PRODUCCIONES_CINEMATOGRAFICAS_4: ( "inversiones_en_producciones_cinematograficas_4" ), FilingProducerKey.M200_INVERSIONES_EN_PRODUCCIONES_CINEMATOGRAFICAS_5: ( "inversiones_en_producciones_cinematograficas_5" ), FilingProducerKey.M200_INVERSIONES_EN_PRODUCCIONES_CINEMATOGRAFICAS_6: ( "inversiones_en_producciones_cinematograficas_6" ), FilingProducerKey.M200_MODALIDAD_DE_INGRESO_UNO_DE_LOS_SIGUIENTES_V: "modalidad_de_ingreso_uno_de_los_siguientes_v", FilingProducerKey.M200_MODELO_DE_ESTADOS_CONTABLES_QUE_SE_VA_A_CUMP: "modelo_de_estados_contables_que_se_va_a_cump", FilingProducerKey.M200_N_I_F_DE_LA_SOCIEDAD_REPRESENTANTE_DOMINANTE: "n_i_f_de_la_sociedad_representante_dominante", FilingProducerKey.M200_NIF_CODIGO_DE_IDENTIFICACION_EXTRANJERO: "nif_codigo_de_identificacion_extranjero", FilingProducerKey.M200_NIF_EN_EL_PAIS_DE_RESIDENCIA_TIN: "nif_en_el_pais_de_residencia_tin", FilingProducerKey.M200_NO_IDENTIFICACION_DE_LA_SOCIEDAD_DOMINANTE_E: "no_identificacion_de_la_sociedad_dominante_e", FilingProducerKey.M200_NO_RESIDENTES_MAS_DE_UN_ESTABLECIMIENTO_PERM: "no_residentes_mas_de_un_establecimiento_perm", FilingProducerKey.M200_NOMBRE_Y_APELLIDOS_DE_LA_PERSONA_DE_CONTACTO: "nombre_y_apellidos_de_la_persona_de_contacto", FilingProducerKey.M200_NUMERO_DE_CUENTA_IBAN: "numero_de_cuenta_iban", FilingProducerKey.M200_NUMERO_DE_CUENTA_IBAN_2: "numero_de_cuenta_iban_2", FilingProducerKey.M200_NUMERO_DE_PERIODO_IMPOSITIVO: "numero_de_periodo_impositivo", FilingProducerKey.M200_PAIS_DE_EXPEDICION_DEL_DOCUMENTO_DE_IDENTIFI: "pais_de_expedicion_del_documento_de_identifi", FilingProducerKey.M200_PAIS_DE_RESIDENCIA: "pais_de_residencia", FilingProducerKey.M200_PAIS_DE_RESIDENCIA_2: "pais_de_residencia_2", FilingProducerKey.M200_PARTE_DE_LA_BASE_IMPONIBLE_DEL_PERIODO_IMPOS: "parte_de_la_base_imponible_del_periodo_impos", FilingProducerKey.M200_PARTE_DE_LA_BASE_IMPONIBLE_DEL_PERIODO_IMPOS_2: ( "parte_de_la_base_imponible_del_periodo_impos_2" ), FilingProducerKey.M200_PERDIDAS_Y_GANANCIAS_0_NO_CONSTA_1_MOD_NORMA: "perdidas_y_ganancias_0_no_consta_1_mod_norma", FilingProducerKey.M200_PERIODO: "periodo", FilingProducerKey.M200_PERIODO_IMPOSITIVO: "periodo_impositivo", FilingProducerKey.M200_PERIODO_IMPOSITIVO_ANO_FINAL: "periodo_impositivo_ano_final", FilingProducerKey.M200_PERIODO_IMPOSITIVO_ANO_INICIO: "periodo_impositivo_ano_inicio", FilingProducerKey.M200_PERIODO_IMPOSITIVO_DIA_FINAL: "periodo_impositivo_dia_final", FilingProducerKey.M200_PERIODO_IMPOSITIVO_DIA_INICIO: "periodo_impositivo_dia_inicio", FilingProducerKey.M200_PERIODO_IMPOSITIVO_FIN_ANO: "periodo_impositivo_fin_ano", FilingProducerKey.M200_PERIODO_IMPOSITIVO_FIN_DIA: "periodo_impositivo_fin_dia", FilingProducerKey.M200_PERIODO_IMPOSITIVO_FIN_MES: "periodo_impositivo_fin_mes", FilingProducerKey.M200_PERIODO_IMPOSITIVO_INICIO_ANO: "periodo_impositivo_inicio_ano", FilingProducerKey.M200_PERIODO_IMPOSITIVO_INICIO_DIA: "periodo_impositivo_inicio_dia", FilingProducerKey.M200_PERIODO_IMPOSITIVO_INICIO_MES: "periodo_impositivo_inicio_mes", FilingProducerKey.M200_PERIODO_IMPOSITIVO_MES_FINAL: "periodo_impositivo_mes_final", FilingProducerKey.M200_PERIODO_IMPOSITIVO_MES_INICIO: "periodo_impositivo_mes_inicio", FilingProducerKey.M200_PRESENTACION_DE_DOCUMENTACION_PREVIA_EN_LA_S: "presentacion_de_documentacion_previa_en_la_s", FilingProducerKey.M200_PRESENTACION_DE_DOCUMENTACION_PREVIA_EN_LA_S_2: ( "presentacion_de_documentacion_previa_en_la_s_2" ), FilingProducerKey.M200_PRESENTACION_DE_DOCUMENTACION_PREVIA_EN_LA_S_3: ( "presentacion_de_documentacion_previa_en_la_s_3" ), FilingProducerKey.M200_PRESENTACION_DE_DOCUMENTACION_PREVIA_EN_LA_S_4: ( "presentacion_de_documentacion_previa_en_la_s_4" ), FilingProducerKey.M200_PRESENTACION_DE_DOCUMENTACION_PREVIA_EN_LA_S_5: ( "presentacion_de_documentacion_previa_en_la_s_5" ), FilingProducerKey.M200_PRESENTACION_DE_DOCUMENTACION_PREVIA_EN_LA_S_6: ( "presentacion_de_documentacion_previa_en_la_s_6" ), FilingProducerKey.M200_PRESENTACION_DE_DOCUMENTACION_PREVIA_EN_LA_S_7: ( "presentacion_de_documentacion_previa_en_la_s_7" ), FilingProducerKey.M200_PRESENTACION_DE_DOCUMENTACION_PREVIA_EN_LA_S_8: ( "presentacion_de_documentacion_previa_en_la_s_8" ), FilingProducerKey.M200_REALIZA_ACTIVIDADES_AGRICOLAS_Y_O_GANADERAS: "realiza_actividades_agricolas_y_o_ganaderas", FilingProducerKey.M200_REG_ENTIDADES_NAVIERAS_EN_FUNCION_DEL_TONELA: "reg_entidades_navieras_en_funcion_del_tonela", FilingProducerKey.M200_RENUNCIA_O_POR_TRANSFERENCIA: "renuncia_o_por_transferencia", FilingProducerKey.M200_RESULTADO_A_INGRESAR_CORRESPONDIENTE_A_LA_AN: "resultado_a_ingresar_correspondiente_a_la_an", FilingProducerKey.M200_RESULTADO_A_INGRESAR_CORRESPONDIENTE_A_LA_AN_2: ( "resultado_a_ingresar_correspondiente_a_la_an_2" ), FilingProducerKey.M200_RESULTADO_CERO: "resultado_cero", FilingProducerKey.M200_SOCIMIS_REGIMEN_FISCAL_DE_ENTRADA_SALIDA_REN: "socimis_regimen_fiscal_de_entrada_salida_ren", FilingProducerKey.M200_TIPO_DE_DECLARACION_VER_NOTA: "tipo_de_declaracion_ver_nota", FilingProducerKey.M200_TIPO_DE_EJERCICIO: "tipo_de_ejercicio", FilingProducerKey.M200_TIPO_DOCUMENTO_IDENTIFICATIVO: "tipo_documento_identificativo", }
[docs] def m200_producer_values(model_profile: FilingModelProfileFacts) -> dict[FilingProducerKey, object]: """Resolve the header facts modelo 200's layout cites. A profile of the wrong type yields every key as ``None`` rather than raising: this runs for every modelo, and AEAT writes an empty alphanumeric header field to blancos. """ profile = model_profile if isinstance(model_profile, Modelo200ProfileFacts) else None return { key: (getattr(profile, field) if profile is not None else None) for key, field in _M200_FIELD_BY_KEY.items() }
def _amendment_marker(amendment: AmendmentEvidence | None) -> str | None: if amendment is None: return None if amendment.is_sustitutiva: return "S" if amendment.is_complementaria: return "C" return None def _amendment_producer_values( amendment: AmendmentEvidence | None, m303_motive: dict[FilingProducerKey, bool | None], ) -> dict[FilingProducerKey, object]: return { FilingProducerKey.AMENDMENT_IS_RECTIFICATIVA: amendment.is_rectificativa if amendment else None, FilingProducerKey.AMENDMENT_IS_COMPLEMENTARIA: amendment.is_complementaria if amendment else None, FilingProducerKey.AMENDMENT_ORIGINAL_AEAT_RECEIPT: amendment.original_aeat_receipt if amendment else None, # ONE official slot holding "S", "C" or blank. Derived from the amendment KIND, # never from the boolean pair: rendering "S" because is_complementaria is false # would assert a substitution nobody declared, which is why this is its own key. FilingProducerKey.AMENDMENT_SUSTITUTIVA_OR_COMPLEMENTARIA_MARKER: _amendment_marker(amendment), FilingProducerKey.AMENDMENT_M303_MOTIVE_RECTIFICACIONES: m303_motive[ FilingProducerKey.AMENDMENT_M303_MOTIVE_RECTIFICACIONES ], FilingProducerKey.AMENDMENT_M303_MOTIVE_DISCREPANCIA_CRITERIO_ADMINISTRATIVO: m303_motive[ FilingProducerKey.AMENDMENT_M303_MOTIVE_DISCREPANCIA_CRITERIO_ADMINISTRATIVO ], } def _m111_colegio_concertado(model_profile: FilingModelProfileFacts) -> bool | None: return model_profile.colegio_concertado if isinstance(model_profile, Modelo111ProfileFacts) else None def _shared_filing_producer_values( snapshot: FilingProducerSnapshot, account: SelectedAccountLexicals, m303_profile: M303ProfileLexicals, m303_filing: M303FilingLexicals, m303_motive: dict[FilingProducerKey, bool | None], ) -> dict[FilingProducerKey, object]: identity = snapshot.taxpayer_identity values: dict[FilingProducerKey, object] = { FilingProducerKey.PRESENTER_TAX_ID: str(snapshot.presenter.tax_id), FilingProducerKey.FILING_RESULT_DISPOSITION: snapshot.elections.result_disposition.value, FilingProducerKey.TAXPAYER_TAX_ID: str(snapshot.taxpayer_tax_id), FilingProducerKey.TAXPAYER_LEGAL_NAME: identity.legal_name, FilingProducerKey.TAXPAYER_GIVEN_NAME: identity.given_name, FilingProducerKey.TAXPAYER_SURNAMES: identity.surnames, FilingProducerKey.TAXPAYER_FULL_NAME: identity.full_name, # "Apellidos o Razon Social": the two are mutually exclusive by # construction -- a natural person carries surnames and no legal_name, # an entity carries legal_name and no surnames -- so this resolves to # whichever the filer actually has, and stays absent only when both are. FilingProducerKey.TAXPAYER_SURNAMES_OR_LEGAL_NAME: identity.surnames or identity.legal_name, # Read from the declaration's own contact fact, never from the taxpayer # or the presenter: under a gestor the persona con quien relacionarse is # routinely neither, and substituting either would name the wrong person # in AEAT's informativa header. FilingProducerKey.CONTACT_PERSON_PHONE: snapshot.declaration_contact.phone, FilingProducerKey.CONTACT_PERSON_NAME: snapshot.declaration_contact.full_name, FilingProducerKey.CONTACT_PERSON_SECONDARY_PHONE: snapshot.declaration_contact.secondary_phone, FilingProducerKey.CONTACT_PERSON_EMAIL: snapshot.declaration_contact.email, **_amendment_producer_values(snapshot.amendment_evidence, m303_motive), FilingProducerKey.SELECTED_ACCOUNT_IBAN: account.iban, FilingProducerKey.SELECTED_ACCOUNT_SWIFT_BIC: account.swift_bic, FilingProducerKey.SELECTED_ACCOUNT_BANK_NAME: account.bank_name, FilingProducerKey.SELECTED_ACCOUNT_BANK_ADDRESS: account.bank_address, FilingProducerKey.SELECTED_ACCOUNT_BANK_CITY: account.bank_city, FilingProducerKey.SELECTED_ACCOUNT_BANK_COUNTRY_CODE: account.bank_country_code, FilingProducerKey.PRIOR_DOMICILIATION_ACTION: ( "X" if snapshot.elections.prior_domiciliation is PriorDomiciliationElection.CANCEL_OR_MODIFY else None ), FilingProducerKey.M303_REDEME_ENROLLED: m303_profile.redeme_enrolled, FilingProducerKey.M303_EXCLUSIVELY_FORAL: m303_profile.exclusively_foral, FilingProducerKey.M303_REGIME_COMPOSITION_CODE: m303_profile.regime_composition_code, FilingProducerKey.M303_ANNUAL_VOLUME_NONZERO: m303_filing.annual_volume_nonzero, FilingProducerKey.M303_JOINT_RETURN_ELECTED: m303_filing.joint_return_elected, FilingProducerKey.M303_CASH_ACCOUNTING_REGIME_ENROLLED: m303_profile.cash_accounting_regime_enrolled, FilingProducerKey.M303_RECIPIENT_OF_CASH_ACCOUNTING_OPERATIONS: ( m303_filing.recipient_of_cash_accounting_operations ), FilingProducerKey.M303_PRORRATA_SPECIAL_OPTION: m303_filing.prorrata_special_option, FilingProducerKey.M303_PRORRATA_SPECIAL_REVOCATION: m303_filing.prorrata_special_revocation, FilingProducerKey.M303_INSOLVENCY_DECLARED: m303_filing.insolvency_declared, FilingProducerKey.M303_INSOLVENCY_JUDICIAL_ORDER_DATE: m303_filing.insolvency_judicial_order_date, FilingProducerKey.M303_INSOLVENCY_FILING_SUBTYPE: m303_filing.insolvency_filing_subtype, FilingProducerKey.M303_VOLUNTARY_SII_ENROLLED: m303_profile.voluntary_sii_enrolled, FilingProducerKey.M303_EXONERADO_390_APPLICABLE: m303_filing.exonerado_390_applicable, FilingProducerKey.M303_HYDROCARBON_DEPOSIT_ADVANCE_PAYMENT_DEDUCTION_ENTITLED: ( m303_profile.hydrocarbon_deposit_advance_payment_deduction_entitled ), FilingProducerKey.M111_COLEGIO_CONCERTADO: (_m111_colegio_concertado(snapshot.model_profile)), } return values def _apply_foral_m303_overrides( values: dict[FilingProducerKey, object], m303_profile: M303ProfileLexicals, m303_filing: M303FilingLexicals, ) -> None: if not m303_profile.is_foral: return foral = m303_foral_lexicals(m303_filing) values.update( { FilingProducerKey.M303_REDEME_ENROLLED: "2", FilingProducerKey.M303_EXCLUSIVELY_FORAL: m303_profile.exclusively_foral, FilingProducerKey.M303_REGIME_COMPOSITION_CODE: "3", FilingProducerKey.M303_JOINT_RETURN_ELECTED: "2", FilingProducerKey.M303_CASH_ACCOUNTING_REGIME_ENROLLED: "2", FilingProducerKey.M303_RECIPIENT_OF_CASH_ACCOUNTING_OPERATIONS: "2", FilingProducerKey.M303_PRORRATA_SPECIAL_OPTION: foral.prorrata_special_option, FilingProducerKey.M303_PRORRATA_SPECIAL_REVOCATION: foral.prorrata_special_revocation, FilingProducerKey.M303_INSOLVENCY_DECLARED: None, FilingProducerKey.M303_INSOLVENCY_JUDICIAL_ORDER_DATE: None, FilingProducerKey.M303_INSOLVENCY_FILING_SUBTYPE: None, FilingProducerKey.M303_VOLUNTARY_SII_ENROLLED: "2", FilingProducerKey.M303_EXONERADO_390_APPLICABLE: "2", FilingProducerKey.M303_HYDROCARBON_DEPOSIT_ADVANCE_PAYMENT_DEDUCTION_ENTITLED: "2", }, ) def _model_specific_producer_values(model_profile: FilingModelProfileFacts) -> dict[FilingProducerKey, object]: values: dict[FilingProducerKey, object] = {} values.update(m222_producer_values(model_profile)) values.update(m202_producer_values(model_profile)) values.update(m210_producer_values(model_profile)) values.update(m200_producer_values(model_profile)) values.update(m296_producer_values(model_profile)) values.update(m353_producer_values(model_profile)) return values def _validate_shared_producer_values(values: dict[FilingProducerKey, object]) -> None: shared_owned = { key for key, owner in _filing_producer_ownership( shared_snapshot_keys=_SHARED_SNAPSHOT_PRODUCER_KEYS, ).items() if owner == "shared_snapshot" } if set(values) != shared_owned: raise FilingExportValidationError("shared filing producer resolver is not exhaustive over its owned keys")
[docs] def filing_producer_values(snapshot: FilingProducerSnapshot) -> dict[FilingProducerKey, object]: """Resolve every canonical producer identity from one immutable snapshot.""" account = selected_account_lexicals(snapshot) iva_profile = snapshot.model_profile if isinstance(snapshot.model_profile, ModeloIVAProfile) else None m303_profile = m303_profile_lexicals(iva_profile, snapshot.m303_filing_facts) m303_filing = m303_filing_lexicals(snapshot.m303_filing_facts) m303_motive = m303_rectificativa_motive_producer_values(snapshot.amendment_evidence) values = _shared_filing_producer_values(snapshot, account, m303_profile, m303_filing, m303_motive) _apply_foral_m303_overrides(values, m303_profile, m303_filing) values.update(_model_specific_producer_values(snapshot.model_profile)) _validate_shared_producer_values(values) return values
[docs] def m303_rectificativa_motive_producer_values( amendment: AmendmentEvidence | None, ) -> dict[FilingProducerKey, bool | None]: """Project the closed two-checkbox truth table from one persisted motive.""" motive = amendment.m303_rectificativa_motive if amendment is not None else None return { FilingProducerKey.AMENDMENT_M303_MOTIVE_RECTIFICACIONES: ( motive is M303RectificativaMotive.RECTIFICACIONES if motive is not None else None ), FilingProducerKey.AMENDMENT_M303_MOTIVE_DISCREPANCIA_CRITERIO_ADMINISTRATIVO: ( motive is M303RectificativaMotive.DISCREPANCIA_CRITERIO_ADMINISTRATIVO if motive is not None else None ), }
[docs] def selected_account_lexicals(snapshot: FilingProducerSnapshot) -> SelectedAccountLexicals: """Project the snapshot's selected refund or charge account into its rendered lexicals.""" selected = snapshot.selected_account if isinstance(selected, RefundAccountSelection): return SelectedAccountLexicals( iban=selected.account.iban, swift_bic=selected.account.swift_bic, bank_name=selected.account.bank_name, bank_address=selected.account.bank_address, bank_city=selected.account.bank_city, bank_country_code=selected.account.bank_country_code, ) if isinstance(selected, ChargeAccountSelection): return SelectedAccountLexicals(iban=selected.account.iban) return SelectedAccountLexicals()
[docs] def m303_profile_lexicals( iva_profile: ModeloIVAProfile | None, m303_facts: M303FilingFacts | None, ) -> M303ProfileLexicals: """Project the Modelo 303 IVA profile and filing facts into rendered lexicals.""" if iva_profile is None: return M303ProfileLexicals() period = m303_facts.period if m303_facts is not None else None a30 = ( yes_no(iva_profile.hydrocarbon_deposit_advance_payment_deduction_entitled) if period is not None and m303_a30_entitlement_applicable(period) else "0" if period is not None else None ) territory_date = date(period.filing_year, 1, 1) if period is not None else None is_foral = m303_tax_territory_is_foral( iva_profile.tax_territory, effective_date=territory_date, ) exclusively_foral = m303_tax_territory_exclusively_foral_mark( iva_profile.tax_territory, effective_date=territory_date, ) return M303ProfileLexicals( redeme_enrolled=yes_no(iva_profile.redeme_enrolled), exclusively_foral=exclusively_foral, regime_composition_code=m303_regime_composition_export_code(iva_profile.regime_composition), cash_accounting_regime_enrolled=yes_no(iva_profile.cash_accounting_regime_enrolled), voluntary_sii_enrolled=yes_no(iva_profile.voluntary_sii_enrolled), hydrocarbon_deposit_advance_payment_deduction_entitled=a30, is_foral=is_foral, )
[docs] def m303_filing_lexicals(m303_facts: M303FilingFacts | None) -> M303FilingLexicals: """Project the Modelo 303 filing facts into their rendered period-specific lexicals.""" if m303_facts is None: return M303FilingLexicals() transition = m303_facts.prorrata_transition insolvency = m303_facts.insolvency transition_applicable = transition.is_applicable return M303FilingLexicals( joint_return_elected=yes_no(m303_facts.joint_return_elected), annual_volume_nonzero="1" if m303_facts.annual_volume_nonzero else None, recipient_of_cash_accounting_operations=yes_no( m303_facts.supplier_regime.recipient_of_cash_accounting_operations, ), prorrata_special_option=( yes_no(transition.transition == opcion_prorrata_transition()) if transition_applicable else None ), prorrata_special_revocation=( yes_no(transition.transition == revocacion_prorrata_transition()) if transition_applicable else None ), insolvency_declared="1" if insolvency is not None else "2", insolvency_judicial_order_date=( insolvency.judicial_order_date.strftime("%d%m%Y") if insolvency is not None else None ), insolvency_filing_subtype=( { M303InsolvencyFilingSubtype.PRE_ORDER: "1", M303InsolvencyFilingSubtype.POST_ORDER: "2", }[insolvency.subtype] if insolvency is not None else None ), exonerado_390_applicable=( yes_no(m303_facts.exonerado_390.applicable) if is_last_filing_period_of_year(m303_facts.period) else "0" ), prorrata_transition_applicable=transition_applicable, )
[docs] def m303_foral_lexicals(m303_filing: M303FilingLexicals) -> M303ForalLexicals: """Project the Modelo 303 filing lexicals into the foral prorrata election lexicals.""" value = "2" if m303_filing.prorrata_transition_applicable else None return M303ForalLexicals(prorrata_special_option=value, prorrata_special_revocation=value)
[docs] def yes_no(value: bool) -> str: return "1" if value else "2"
[docs] def m303_a30_entitlement_applicable(period: Period) -> bool: return period.registry_token.isdigit() and int(period.registry_token) >= 2
__all__ = [ "M303FilingLexicals", "M303ForalLexicals", "M303ProfileLexicals", "SelectedAccountLexicals", "filing_producer_values", "m303_filing_lexicals", "m303_foral_lexicals", "m303_profile_lexicals", "m303_rectificativa_motive_producer_values", "selected_account_lexicals", ]