from decimal import Decimal
from datetime import datetime, date, time
from collections.abc import Sequence
from ...cfdi import CFDI, XElement
[docs]class DatosLiquidacionType(XElement):
def __init__(
self,
fecha_pago: date,
instrumento_monetario: str,
moneda: str,
monto_operacion: str,
):
"""
:param fecha_pago:
:param instrumento_monetario:
:param moneda:
:param monto_operacion:
"""
super().__init__({
'FechaPago': fecha_pago,
'InstrumentoMonetario': instrumento_monetario,
'Moneda': moneda,
'MontoOperacion': monto_operacion,
})
[docs]class DatosParteBlindadaType(XElement):
def __init__(
self,
parte_blindada: str,
nivel_blindaje: str,
):
"""
:param parte_blindada:
:param nivel_blindaje:
"""
super().__init__({
'ParteBlindada': parte_blindada,
'NivelBlindaje': nivel_blindaje,
})
[docs]class DatosInmuebleType(XElement):
def __init__(
self,
tipo_inmueble: str,
codigo_postal: str,
datos_parte_blindada: DatosParteBlindadaType | dict | Sequence[DatosParteBlindadaType | dict],
):
"""
:param tipo_inmueble:
:param codigo_postal:
:param datos_parte_blindada:
"""
super().__init__({
'TipoInmueble': tipo_inmueble,
'CodigoPostal': codigo_postal,
'DatosParteBlindada': datos_parte_blindada,
})
[docs]class DatosVehiculoTerrestreType(XElement):
def __init__(
self,
marca_fabricante: str,
modelo: str,
anio: str,
estado_bien: str,
nivel_blindaje: str,
vin: str = None,
repuve: str = None,
placas: str = None,
):
"""
:param marca_fabricante:
:param modelo:
:param anio:
:param estado_bien:
:param nivel_blindaje:
:param vin:
:param repuve:
:param placas:
"""
super().__init__({
'MarcaFabricante': marca_fabricante,
'Modelo': modelo,
'Anio': anio,
'EstadoBien': estado_bien,
'NivelBlindaje': nivel_blindaje,
'Vin': vin,
'Repuve': repuve,
'Placas': placas,
})
[docs]class TipoBienType(XElement):
def __init__(
self,
datos_vehiculo_terrestre: DatosVehiculoTerrestreType | dict = None,
datos_inmueble: DatosInmuebleType | dict = None,
):
"""
:param datos_vehiculo_terrestre:
:param datos_inmueble:
"""
super().__init__({
'DatosVehiculoTerrestre': datos_vehiculo_terrestre,
'DatosInmueble': datos_inmueble,
})
[docs]class DatosOperacionType(XElement):
def __init__(
self,
fecha_operacion: date,
codigo_postal: str,
tipo_operacion: str,
tipo_bien: TipoBienType | dict,
datos_liquidacion: DatosLiquidacionType | dict | Sequence[DatosLiquidacionType | dict],
):
"""
:param fecha_operacion:
:param codigo_postal:
:param tipo_operacion:
:param tipo_bien:
:param datos_liquidacion:
"""
super().__init__({
'FechaOperacion': fecha_operacion,
'CodigoPostal': codigo_postal,
'TipoOperacion': tipo_operacion,
'TipoBien': tipo_bien,
'DatosLiquidacion': datos_liquidacion,
})
[docs]class DetalleOperacionesType(XElement):
def __init__(
self,
datos_operacion: DatosOperacionType | dict | Sequence[DatosOperacionType | dict],
):
"""
:param datos_operacion:
"""
super().__init__({
'DatosOperacion': datos_operacion,
})
[docs]class FideicomisoSimpleType(XElement):
def __init__(
self,
denominacion_razon: str,
rfc: str = None,
identificador_fideicomiso: str = None,
):
"""
:param denominacion_razon:
:param rfc:
:param identificador_fideicomiso:
"""
super().__init__({
'DenominacionRazon': denominacion_razon,
'Rfc': rfc,
'IdentificadorFideicomiso': identificador_fideicomiso,
})
[docs]class PersonaMoralSimpleType(XElement):
def __init__(
self,
denominacion_razon: str,
fecha_constitucion: date = None,
rfc: str = None,
pais_nacionalidad: str = None,
):
"""
:param denominacion_razon:
:param fecha_constitucion:
:param rfc:
:param pais_nacionalidad:
"""
super().__init__({
'DenominacionRazon': denominacion_razon,
'FechaConstitucion': fecha_constitucion,
'Rfc': rfc,
'PaisNacionalidad': pais_nacionalidad,
})
[docs]class PersonaFisicaSimpleType(XElement):
def __init__(
self,
nombre: str,
apellido_paterno: str,
apellido_materno: str,
fecha_nacimiento: date = None,
rfc: str = None,
curp: str = None,
pais_nacionalidad: str = None,
):
"""
:param nombre:
:param apellido_paterno:
:param apellido_materno:
:param fecha_nacimiento:
:param rfc:
:param curp:
:param pais_nacionalidad:
"""
super().__init__({
'Nombre': nombre,
'ApellidoPaterno': apellido_paterno,
'ApellidoMaterno': apellido_materno,
'FechaNacimiento': fecha_nacimiento,
'Rfc': rfc,
'Curp': curp,
'PaisNacionalidad': pais_nacionalidad,
})
[docs]class TipoPersonaSimpleType(XElement):
def __init__(
self,
persona_fisica: PersonaFisicaSimpleType | dict = None,
persona_moral: PersonaMoralSimpleType | dict = None,
fideicomiso: FideicomisoSimpleType | dict = None,
):
"""
:param persona_fisica:
:param persona_moral:
:param fideicomiso:
"""
super().__init__({
'PersonaFisica': persona_fisica,
'PersonaMoral': persona_moral,
'Fideicomiso': fideicomiso,
})
[docs]class DuenoBeneficiarioType(XElement):
def __init__(
self,
tipo_persona: TipoPersonaSimpleType | dict,
):
"""
:param tipo_persona:
"""
super().__init__({
'TipoPersona': tipo_persona,
})
[docs]class TelefonoType(XElement):
def __init__(
self,
clave_pais: str = None,
numero_telefono: str = None,
correo_electronico: str = None,
):
"""
:param clave_pais:
:param numero_telefono:
:param correo_electronico:
"""
super().__init__({
'ClavePais': clave_pais,
'NumeroTelefono': numero_telefono,
'CorreoElectronico': correo_electronico,
})
[docs]class NacionalType(XElement):
def __init__(
self,
colonia: str,
calle: str,
numero_exterior: str,
codigo_postal: str,
numero_interior: str = None,
):
"""
:param colonia:
:param calle:
:param numero_exterior:
:param codigo_postal:
:param numero_interior:
"""
super().__init__({
'Colonia': colonia,
'Calle': calle,
'NumeroExterior': numero_exterior,
'CodigoPostal': codigo_postal,
'NumeroInterior': numero_interior,
})
[docs]class TipoDomicilioType(XElement):
def __init__(
self,
nacional: NacionalType | dict = None,
extranjero: ExtranjeroType | dict = None,
):
"""
:param nacional:
:param extranjero:
"""
super().__init__({
'Nacional': nacional,
'Extranjero': extranjero,
})
[docs]class RepresentanteApoderadoType(XElement):
def __init__(
self,
nombre: str,
apellido_paterno: str,
apellido_materno: str,
fecha_nacimiento: date = None,
rfc: str = None,
curp: str = None,
):
"""
:param nombre:
:param apellido_paterno:
:param apellido_materno:
:param fecha_nacimiento:
:param rfc:
:param curp:
"""
super().__init__({
'Nombre': nombre,
'ApellidoPaterno': apellido_paterno,
'ApellidoMaterno': apellido_materno,
'FechaNacimiento': fecha_nacimiento,
'Rfc': rfc,
'Curp': curp,
})
[docs]class FideicomisoType(XElement):
def __init__(
self,
denominacion_razon: str,
apoderado_delegado: RepresentanteApoderadoType | dict,
rfc: str = None,
identificador_fideicomiso: str = None,
):
"""
:param denominacion_razon:
:param apoderado_delegado:
:param rfc:
:param identificador_fideicomiso:
"""
super().__init__({
'DenominacionRazon': denominacion_razon,
'ApoderadoDelegado': apoderado_delegado,
'Rfc': rfc,
'IdentificadorFideicomiso': identificador_fideicomiso,
})
[docs]class PersonaMoralType(XElement):
def __init__(
self,
denominacion_razon: str,
pais_nacionalidad: str,
giro_mercantil: str,
representante_apoderado: RepresentanteApoderadoType | dict,
fecha_constitucion: date = None,
rfc: str = None,
):
"""
:param denominacion_razon:
:param pais_nacionalidad:
:param giro_mercantil:
:param representante_apoderado:
:param fecha_constitucion:
:param rfc:
"""
super().__init__({
'DenominacionRazon': denominacion_razon,
'PaisNacionalidad': pais_nacionalidad,
'GiroMercantil': giro_mercantil,
'RepresentanteApoderado': representante_apoderado,
'FechaConstitucion': fecha_constitucion,
'Rfc': rfc,
})
[docs]class PersonaFisicaType(XElement):
def __init__(
self,
nombre: str,
apellido_paterno: str,
apellido_materno: str,
pais_nacionalidad: str,
actividad_economica: str,
fecha_nacimiento: date = None,
rfc: str = None,
curp: str = None,
):
"""
:param nombre:
:param apellido_paterno:
:param apellido_materno:
:param pais_nacionalidad:
:param actividad_economica:
:param fecha_nacimiento:
:param rfc:
:param curp:
"""
super().__init__({
'Nombre': nombre,
'ApellidoPaterno': apellido_paterno,
'ApellidoMaterno': apellido_materno,
'PaisNacionalidad': pais_nacionalidad,
'ActividadEconomica': actividad_economica,
'FechaNacimiento': fecha_nacimiento,
'Rfc': rfc,
'Curp': curp,
})
[docs]class TipoPersonaType(XElement):
def __init__(
self,
persona_fisica: PersonaFisicaType | dict = None,
persona_moral: PersonaMoralType | dict = None,
fideicomiso: FideicomisoType | dict = None,
):
"""
:param persona_fisica:
:param persona_moral:
:param fideicomiso:
"""
super().__init__({
'PersonaFisica': persona_fisica,
'PersonaMoral': persona_moral,
'Fideicomiso': fideicomiso,
})
[docs]class PersonaAvisoType(XElement):
def __init__(
self,
tipo_persona: TipoPersonaType | dict,
tipo_domicilio: TipoDomicilioType | dict = None,
telefono: TelefonoType | dict = None,
):
"""
:param tipo_persona:
:param tipo_domicilio:
:param telefono:
"""
super().__init__({
'TipoPersona': tipo_persona,
'TipoDomicilio': tipo_domicilio,
'Telefono': telefono,
})
[docs]class AlertaType(XElement):
def __init__(
self,
tipo_alerta: str,
descripcion_alerta: str = None,
):
"""
:param tipo_alerta:
:param descripcion_alerta:
"""
super().__init__({
'TipoAlerta': tipo_alerta,
'DescripcionAlerta': descripcion_alerta,
})
[docs]class ModificatorioType(XElement):
def __init__(
self,
folio_modificacion: str,
descripcion_modificacion: str,
):
"""
:param folio_modificacion:
:param descripcion_modificacion:
"""
super().__init__({
'FolioModificacion': folio_modificacion,
'DescripcionModificacion': descripcion_modificacion,
})
[docs]class AvisoType(XElement):
def __init__(
self,
referencia_aviso: str,
prioridad: str,
alerta: AlertaType | dict,
persona_aviso: PersonaAvisoType | dict | Sequence[PersonaAvisoType | dict],
detalle_operaciones: DetalleOperacionesType | dict,
modificatorio: ModificatorioType | dict = None,
dueno_beneficiario: DuenoBeneficiarioType | dict | Sequence[DuenoBeneficiarioType | dict] = None,
):
"""
:param referencia_aviso:
:param prioridad:
:param alerta:
:param persona_aviso:
:param detalle_operaciones:
:param modificatorio:
:param dueno_beneficiario:
"""
super().__init__({
'ReferenciaAviso': referencia_aviso,
'Prioridad': prioridad,
'Alerta': alerta,
'PersonaAviso': persona_aviso,
'DetalleOperaciones': detalle_operaciones,
'Modificatorio': modificatorio,
'DuenoBeneficiario': dueno_beneficiario,
})
[docs]class SujetoObligadoType(XElement):
def __init__(
self,
clave_sujeto_obligado: str,
clave_actividad: str,
clave_entidad_colegiada: str = None,
exento: str = None,
):
"""
:param clave_sujeto_obligado:
:param clave_actividad:
:param clave_entidad_colegiada:
:param exento:
"""
super().__init__({
'ClaveSujetoObligado': clave_sujeto_obligado,
'ClaveActividad': clave_actividad,
'ClaveEntidadColegiada': clave_entidad_colegiada,
'Exento': exento,
})
[docs]class ArchivoType(XElement):
def __init__(
self,
informe: InformeType | dict | Sequence[InformeType | dict],
):
"""
:param informe:
"""
super().__init__({
'Informe': informe,
})
[docs]class Archivo(ArchivoType):
tag = '{http://www.uif.shcp.gob.mx/recepcion/bli}archivo'