1 | """terceros http://www.sat.gob.mx/terceros""" |
||
2 | from decimal import Decimal |
||
3 | from datetime import datetime, date, time |
||
4 | from collections.abc import Sequence |
||
5 | from ...cfdi import CFDI |
||
6 | from ...xelement import XElement |
||
7 | from ...utils import ScalarMap |
||
8 | |||
9 | |||
10 | class TInformacionAduanera(ScalarMap): |
||
11 | """ |
||
12 | Tipo definido para expresar información aduanera |
||
13 | |||
14 | :param numero: Atributo requerido para expresar el número del documento aduanero que ampara la importación del bien. |
||
15 | :param fecha: Atributo requerido para expresar la fecha de expedición del documento aduanero que ampara la importación del bien. |
||
16 | :param aduana: Atributo opcional para precisar la aduana por la que se efectuó la importación del bien. |
||
17 | """ |
||
18 | |||
19 | def __init__( |
||
20 | self, |
||
21 | numero: str, |
||
22 | fecha: date, |
||
23 | aduana: str = None, |
||
24 | ): |
||
25 | super().__init__({ |
||
26 | 'Numero': numero, |
||
27 | 'Fecha': fecha, |
||
28 | 'Aduana': aduana, |
||
29 | }) |
||
30 | |||
31 | |||
32 | View Code Duplication | class TUbicacionFiscal(ScalarMap): |
|
0 ignored issues
–
show
Duplication
introduced
by
![]() |
|||
33 | """ |
||
34 | Tipo definido para expresar domicilios o direcciones |
||
35 | |||
36 | :param calle: Este atributo requerido sirve para precisar la avenida, calle, camino o carretera donde se da la ubicación. |
||
37 | :param municipio: Atributo requerido que sirve para precisar el municipio o delegación (en el caso del Distrito Federal) en donde se da la ubicación. |
||
38 | :param estado: Atributo requerido que sirve para precisar el estado o entidad federativa donde se da la ubicación. |
||
39 | :param pais: Atributo requerido que sirve para precisar el país donde se da la ubicación. |
||
40 | :param codigo_postal: Atributo requerido que sirve para asentar el código postal en donde se da la ubicación. |
||
41 | :param no_exterior: Este atributo opcional sirve para expresar el número particular en donde se da la ubicación sobre una calle dada. |
||
42 | :param no_interior: Este atributo opcional sirve para expresar información adicional para especificar la ubicación cuando calle y número exterior (noExterior) no resulten suficientes para determinar la ubicación de forma precisa. |
||
43 | :param colonia: Este atributo opcional sirve para precisar la colonia en donde se da la ubicación cuando se desea ser más específico en casos de ubicaciones urbanas. |
||
44 | :param localidad: Atributo opcional que sirve para precisar la ciudad o población donde se da la ubicación. |
||
45 | :param referencia: Atributo opcional para expresar una referencia de ubicación adicional. |
||
46 | """ |
||
47 | |||
48 | def __init__( |
||
49 | self, |
||
50 | calle: str, |
||
51 | municipio: str, |
||
52 | estado: str, |
||
53 | pais: str, |
||
54 | codigo_postal: str, |
||
55 | no_exterior: str = None, |
||
56 | no_interior: str = None, |
||
57 | colonia: str = None, |
||
58 | localidad: str = None, |
||
59 | referencia: str = None, |
||
60 | ): |
||
61 | super().__init__({ |
||
62 | 'Calle': calle, |
||
63 | 'Municipio': municipio, |
||
64 | 'Estado': estado, |
||
65 | 'Pais': pais, |
||
66 | 'CodigoPostal': codigo_postal, |
||
67 | 'NoExterior': no_exterior, |
||
68 | 'NoInterior': no_interior, |
||
69 | 'Colonia': colonia, |
||
70 | 'Localidad': localidad, |
||
71 | 'Referencia': referencia, |
||
72 | }) |
||
73 | |||
74 | |||
75 | View Code Duplication | class Parte(ScalarMap): |
|
0 ignored issues
–
show
|
|||
76 | """ |
||
77 | Nodo opcional para expresar las partes o componentes que integran la totalidad del concepto expresado en el CFD o CFDI |
||
78 | |||
79 | :param cantidad: Atributo requerido para precisar la cantidad de bienes o servicios del tipo particular definido por la presente parte. |
||
80 | :param descripcion: Atributo requerido para precisar la descripción del bien o servicio cubierto por la presente parte. |
||
81 | :param unidad: Atributo opcional para precisar la unidad de medida aplicable para la cantidad expresada en la parte. |
||
82 | :param no_identificacion: Atributo opcional para expresar el número de serie del bien o identificador del servicio amparado por la presente parte. |
||
83 | :param valor_unitario: Atributo opcional para precisar el valor o precio unitario del bien o servicio cubierto por la presente parte. |
||
84 | :param importe: Atributo opcional para precisar el importe total de los bienes o servicios de la presente parte. Debe ser equivalente al resultado de multiplicar la cantidad por el valor unitario expresado en la parte. |
||
85 | :param informacion_aduanera: Nodo opcional para introducir la información aduanera aplicable cuando se trate de partes o componentes importados vendidos de primera mano. |
||
86 | """ |
||
87 | |||
88 | def __init__( |
||
89 | self, |
||
90 | cantidad: Decimal | int, |
||
91 | descripcion: str, |
||
92 | unidad: str = None, |
||
93 | no_identificacion: str = None, |
||
94 | valor_unitario: Decimal | int = None, |
||
95 | importe: Decimal | int = None, |
||
96 | informacion_aduanera: TInformacionAduanera | dict | Sequence[TInformacionAduanera | dict] = None, |
||
97 | ): |
||
98 | super().__init__({ |
||
99 | 'Cantidad': cantidad, |
||
100 | 'Descripcion': descripcion, |
||
101 | 'Unidad': unidad, |
||
102 | 'NoIdentificacion': no_identificacion, |
||
103 | 'ValorUnitario': valor_unitario, |
||
104 | 'Importe': importe, |
||
105 | 'InformacionAduanera': informacion_aduanera, |
||
106 | }) |
||
107 | |||
108 | |||
109 | class InformacionAduanera(ScalarMap): |
||
110 | """ |
||
111 | Nodo opcional para introducir la información aduanera aplicable cuando se trate de ventas de primera mano de mercancías importadas. |
||
112 | |||
113 | """ |
||
114 | |||
115 | def __init__( |
||
116 | self, |
||
117 | hello_there_super: TInformacionAduanera | dict |
||
118 | ): |
||
119 | super().__init__({ |
||
120 | }) |
||
121 | |||
122 | |||
123 | class InformacionFiscalTercero(ScalarMap): |
||
124 | """ |
||
125 | Nodo opcional para expresar información fiscal de terceros |
||
126 | |||
127 | """ |
||
128 | |||
129 | def __init__( |
||
130 | self, |
||
131 | hello_there_super: TUbicacionFiscal | dict |
||
132 | ): |
||
133 | super().__init__({ |
||
134 | }) |
||
135 | |||
136 | |||
137 | class Traslado(ScalarMap): |
||
138 | """ |
||
139 | Nodo para la información detallada de un traslado de impuesto específico |
||
140 | |||
141 | :param impuesto: Atributo requerido para señalar el tipo de impuesto trasladado |
||
142 | :param tasa: Atributo requerido para señalar la tasa del impuesto que se traslada por cada concepto amparado en el comprobante |
||
143 | :param importe: Atributo requerido para señalar el importe del impuesto trasladado |
||
144 | """ |
||
145 | |||
146 | def __init__( |
||
147 | self, |
||
148 | impuesto: str, |
||
149 | tasa: Decimal | int, |
||
150 | importe: Decimal | int, |
||
151 | ): |
||
152 | super().__init__({ |
||
153 | 'Impuesto': impuesto, |
||
154 | 'Tasa': tasa, |
||
155 | 'Importe': importe, |
||
156 | }) |
||
157 | |||
158 | |||
159 | class Retencion(ScalarMap): |
||
160 | """ |
||
161 | Nodo para la información detallada de una retención de impuesto específico |
||
162 | |||
163 | :param impuesto: Atributo requerido para señalar el tipo de impuesto retenido |
||
164 | :param importe: Atributo requerido para señalar el importe o monto del impuesto retenido |
||
165 | """ |
||
166 | |||
167 | def __init__( |
||
168 | self, |
||
169 | impuesto: str, |
||
170 | importe: Decimal | int, |
||
171 | ): |
||
172 | super().__init__({ |
||
173 | 'Impuesto': impuesto, |
||
174 | 'Importe': importe, |
||
175 | }) |
||
176 | |||
177 | |||
178 | class Impuestos(ScalarMap): |
||
179 | """ |
||
180 | Nodo requerido para capturar los impuestos aplicables. |
||
181 | |||
182 | :param retenciones: Nodo opcional para capturar los impuestos retenidos aplicables |
||
183 | :param traslados: Nodo opcional para asentar o referir los impuestos trasladados aplicables |
||
184 | """ |
||
185 | |||
186 | def __init__( |
||
187 | self, |
||
188 | retenciones: Retencion | dict | Sequence[Retencion | dict] = None, |
||
189 | traslados: Traslado | dict | Sequence[Traslado | dict] = None, |
||
190 | ): |
||
191 | super().__init__({ |
||
192 | 'Retenciones': retenciones, |
||
193 | 'Traslados': traslados, |
||
194 | }) |
||
195 | |||
196 | |||
197 | class PorCuentadeTerceros(CFDI): |
||
198 | """ |
||
199 | Complemento concepto para la emisión de Comprobante Fiscal Digital (CFD) y Comprobante Fiscal Digital a través de Internet (CFDI) por orden y cuenta de terceros. |
||
200 | |||
201 | :param rfc: Atributo requerido para la Clave del Registro Federal de Contribuyentes correspondiente al contribuyente emisor del comprobante sin guiones o espacios. |
||
202 | :param impuestos: Nodo requerido para capturar los impuestos aplicables. |
||
203 | :param nombre: Atributo opcional para el nombre o razón social del contribuyente emisor del comprobante. |
||
204 | :param informacion_fiscal_tercero: Nodo opcional para expresar información fiscal de terceros |
||
205 | :param informacion_aduanera: Nodo opcional para introducir la información aduanera aplicable cuando se trate de ventas de primera mano de mercancías importadas. |
||
206 | :param parte: Nodo opcional para expresar las partes o componentes que integran la totalidad del concepto expresado en el CFD o CFDI |
||
207 | :param cuenta_predial: Nodo opcional para asentar el número de cuenta predial con el que fue registrado el inmueble, en el sistema catastral de la entidad federativa de que trate. |
||
208 | """ |
||
209 | |||
210 | tag = '{http://www.sat.gob.mx/terceros}PorCuentadeTerceros' |
||
211 | version = '1.1' |
||
212 | |||
213 | def __init__( |
||
214 | self, |
||
215 | rfc: str, |
||
216 | impuestos: Impuestos | dict, |
||
217 | nombre: str = None, |
||
218 | informacion_fiscal_tercero: InformacionFiscalTercero | dict = None, |
||
219 | informacion_aduanera: InformacionAduanera | dict = None, |
||
220 | parte: Parte | dict | Sequence[Parte | dict] = None, |
||
221 | cuenta_predial: str = None, |
||
222 | ): |
||
223 | super().__init__({ |
||
224 | 'Version': self.version, |
||
225 | 'Rfc': rfc, |
||
226 | 'Impuestos': impuestos, |
||
227 | 'Nombre': nombre, |
||
228 | 'InformacionFiscalTercero': informacion_fiscal_tercero, |
||
229 | 'InformacionAduanera': informacion_aduanera, |
||
230 | 'Parte': parte, |
||
231 | 'CuentaPredial': cuenta_predial, |
||
232 | }) |
||
233 | |||
234 | |||
235 |