|
1
|
|
|
import os |
|
2
|
|
|
from binascii import unhexlify |
|
3
|
|
|
from datetime import datetime, date |
|
4
|
|
|
from io import BytesIO |
|
5
|
|
|
from unittest import mock |
|
6
|
|
|
from zipfile import ZipInfo |
|
7
|
|
|
|
|
8
|
|
|
from satcfdi.diot.code import Periodo, TipoOperacion, TipoTercero, Pais |
|
9
|
|
|
from satcfdi.diot import DatosIdentificacion, DatosComplementaria, ProveedorTercero, DIOT |
|
10
|
|
|
from tests.utils import get_signer, verify_result |
|
11
|
|
|
|
|
12
|
|
|
current_dir = os.path.dirname(__file__) |
|
13
|
|
|
module = 'satcfdi' |
|
14
|
|
|
|
|
15
|
|
|
|
|
16
|
|
|
def test_encrypt_signature(): |
|
17
|
|
|
signer = get_signer('cacx7605101p8') |
|
18
|
|
|
key = b'\x9e@@hL\xcd\xf2\x9eR\xe6JC\xc8\xba\x8a\xf1C\xec\rE*\x16 4' |
|
19
|
|
|
|
|
20
|
|
|
# from DIOT project try 1 |
|
21
|
|
|
sig = "1a7f1f4d8ef5091a4dc797a80327756110878b08555d84761475e444ad4effe855b44aafb7c47a3627d21f34d40a59fe103d53eda40721d8196d745ce39a6bce97e064a3725840dcf340f7c9ad84f8ab891198f25bf81802f0e8363d4ce02c78268ce75bda284d0771bde7cdf6b6c76adbc607823d54edfa8f9e5385ee8ffa406e14811738781678faff32d0d6b9c843e38ba7a29b8b2414930a200d0512ee69ca693ba341b9462476fbaa085d56178915c03d9bc61ae37d8609fe75c87659e687bd0ca56bcf5a52e2b74fbb67bcd1761ee8360cddb82470a2106a30a9299a7415ccc12a5f37d5b5732e84fd21aba7b3caba49eb913925c9869ca643df1dba8c" |
|
22
|
|
|
sig = unhexlify(sig) |
|
23
|
|
|
res = signer.decrypt(sig) |
|
24
|
|
|
assert res == key |
|
25
|
|
|
|
|
26
|
|
|
# from DIOT project try 2 |
|
27
|
|
|
sig = "768cce9ca1955dbe4b9e768413e37d23f0b1c3e2d3d313278053f2c66aae14d7ecaacdf4a942dff564489156dfb805a3713b7ad48f230762acb493840a1236e445844ba41ca299d715a63dca227f86679322a4864aa30a28b9f43200c83748816900e9b06f224d3ba3bae284ec9916c752da12f0bb189ef1eb64f71bae6ced280f3009798002dcae9129c5105efef1179d93a434c8ebd6144a0f5721deea7c864ed273b8410e2dbdc1d0e684f49c37d58a3311a673ff347f59115ecdf6ba5d05b5e2d2caa45f1e0d2a842057467ed8069de8f79e6abe449c7f1a3222d873d859ad6e6f9608342e1dc709c8b50cb67a07016c75230495938b15e174e0277ac9f1" |
|
28
|
|
|
sig = unhexlify(sig) |
|
29
|
|
|
res = signer.decrypt(sig) |
|
30
|
|
|
assert res == key |
|
31
|
|
|
|
|
32
|
|
|
enc_key = signer.encrypt(data=key) |
|
33
|
|
|
dec_key = signer.decrypt(data=enc_key) |
|
34
|
|
|
|
|
35
|
|
|
assert dec_key == key |
|
36
|
|
|
|
|
37
|
|
|
|
|
38
|
|
|
def test_create_filename(): |
|
39
|
|
|
rfc = 'XIQB891116QE4' |
|
40
|
|
|
with mock.patch(f'{module}.diot.datetime') as m: |
|
41
|
|
|
m.now = mock.Mock(return_value=datetime(2022, 11, 8, 11, 40)) |
|
42
|
|
|
diot = DIOT( |
|
43
|
|
|
datos_identificacion=DatosIdentificacion( |
|
44
|
|
|
rfc=rfc, |
|
45
|
|
|
ejercicio=2022, |
|
46
|
|
|
), |
|
47
|
|
|
periodo=Periodo.OCTUBRE, |
|
48
|
|
|
proveedores=[] |
|
49
|
|
|
) |
|
50
|
|
|
assert diot._tmp_filename() == 'XIQB891116QE40DOTAAM1MCMB811401' |
|
51
|
|
|
|
|
52
|
|
|
with mock.patch(f'{module}.diot.datetime') as m: |
|
53
|
|
|
p = ProveedorTercero( |
|
54
|
|
|
tipo_tercero=TipoTercero.PROVEEDOR_GLOBAL, |
|
55
|
|
|
tipo_operacion=TipoOperacion.OTROS |
|
56
|
|
|
) |
|
57
|
|
|
m.now = mock.Mock(return_value=datetime(2022, 11, 8, 13, 20)) |
|
58
|
|
|
diot = DIOT( |
|
59
|
|
|
datos_identificacion=DatosIdentificacion( |
|
60
|
|
|
rfc=rfc, |
|
61
|
|
|
ejercicio=2022, |
|
62
|
|
|
), |
|
63
|
|
|
periodo=Periodo.OCTUBRE, |
|
64
|
|
|
proveedores=[p for _ in range(40001)] |
|
65
|
|
|
) |
|
66
|
|
|
assert diot._tmp_filename() == 'XIQB891116QE40DOTAAM1MCMB813202' |
|
67
|
|
|
|
|
68
|
|
|
rfc = "OÑO120726RX3" |
|
69
|
|
|
with mock.patch(f'{module}.diot.datetime') as m: |
|
70
|
|
|
m.now = mock.Mock(return_value=datetime(2022, 11, 8, 17, 18)) |
|
71
|
|
|
diot = DIOT( |
|
72
|
|
|
datos_identificacion=DatosIdentificacion( |
|
73
|
|
|
rfc=rfc, |
|
74
|
|
|
ejercicio=2022, |
|
75
|
|
|
), |
|
76
|
|
|
periodo=Periodo.OCTUBRE, |
|
77
|
|
|
proveedores=[] |
|
78
|
|
|
) |
|
79
|
|
|
assert diot._tmp_filename() == '_OÑO120726RX30DOTAAM1MCMB817181' |
|
80
|
|
|
|
|
81
|
|
|
|
|
82
|
|
|
xiqb891116qe4_issuer = DatosIdentificacion( |
|
83
|
|
|
rfc='xiqb891116qe4', |
|
84
|
|
|
ejercicio=2022, |
|
85
|
|
|
curp='xiqb891116mgrmzr05', |
|
86
|
|
|
nombre='BERENICE', |
|
87
|
|
|
apellido_paterno='XIMO', |
|
88
|
|
|
apellido_materno='QUEZADA' |
|
89
|
|
|
) |
|
90
|
|
|
|
|
91
|
|
|
|
|
92
|
|
|
def test_create_declaracion_diot(): |
|
93
|
|
|
text_file = "XIQB891116QE40DOTAAM1MCMB811401" |
|
94
|
|
|
diot = DIOT( |
|
95
|
|
|
datos_identificacion=xiqb891116qe4_issuer, |
|
96
|
|
|
periodo=Periodo.OCTUBRE |
|
97
|
|
|
) |
|
98
|
|
|
# Verify TXT |
|
99
|
|
|
original_txt_data = open(os.path.join(current_dir, 'diot', f'{text_file}.txt'), 'rb').read() |
|
100
|
|
|
with BytesIO() as b: |
|
101
|
|
|
diot.plain_write(target=b) |
|
102
|
|
|
assert original_txt_data == b.getvalue() |
|
103
|
|
|
|
|
104
|
|
|
# Verify FILENAME |
|
105
|
|
|
with mock.patch(f'{module}.diot.datetime') as m: |
|
106
|
|
|
m.now = mock.Mock(return_value=datetime(2022, 11, 8, 11, 40)) |
|
107
|
|
|
tmp_filename = diot._tmp_filename() |
|
108
|
|
|
assert tmp_filename == text_file |
|
109
|
|
|
|
|
110
|
|
|
# Verify ZIP |
|
111
|
|
|
def zi(filename): |
|
112
|
|
|
return ZipInfo( |
|
113
|
|
|
filename=filename, |
|
114
|
|
|
date_time=(2022, 11, 8, 11, 41, 8) # time.localtime(time.time())[:6] |
|
115
|
|
|
) |
|
116
|
|
|
|
|
117
|
|
|
with mock.patch(f'{module}.zip.ZipInfo', zi) as m: |
|
118
|
|
|
my_zip = diot._zip_bytes(tmp_filename) |
|
119
|
|
|
|
|
120
|
|
|
original_zip_data = open(os.path.join(current_dir, 'diot', f'{text_file}.zpi'), 'rb').read() |
|
121
|
|
|
assert my_zip == original_zip_data |
|
122
|
|
|
|
|
123
|
|
|
# Verify DEC |
|
124
|
|
|
def encrypt(_, data): |
|
125
|
|
|
return b'HB\x9cWQ\xbf\x975i\xfd\xcbH\x1c\xacD\x00pp\'%\xf3"\xa7\x802O\xcagG\x8c6\x07\xa7n9\xe6\x10*P\xd1\x9d\xf8,\x7f\x84T%\x9eR\xea\xab\x00\xeeX7\x00\x87\xfe\xb5\xf7\x9d\xc4\xa2\xbcu\xa4\x13SX\xee\xe6\xfeSv\x16\xcc\xb2y\xbd4nD\xb0\xbd\x10^y\x9f/PZ\x9b\xd1\xc0\x98\x84\xb6\x90\xc1"\xe0\xb9\x83y\x92\x85\x832\x98C\xd0\xe8\x81P\x0b\xde\x14\xaa\x19_\x0c\xf0\xf2\xec\xdc\x9f\x06i' |
|
126
|
|
|
|
|
127
|
|
|
def rand(dig): |
|
128
|
|
|
if dig == 8: |
|
129
|
|
|
return b'p*A\xe4\xcb\x88\xa3\x8f' |
|
130
|
|
|
if dig == 24: |
|
131
|
|
|
return b'\x9e@@hL\xcd\xf2\x9eR\xe6JC\xc8\xba\x8a\xf1C\xec\rE*\x16 4' |
|
132
|
|
|
|
|
133
|
|
|
with mock.patch(f'{module}.Certificate.encrypt', encrypt), mock.patch('os.urandom', rand): |
|
134
|
|
|
dec_data = diot._encrypted_bytes(tmp_filename) |
|
135
|
|
|
assert dec_data == open(os.path.join(current_dir, 'diot', f'{text_file}.dec'), 'rb').read() |
|
136
|
|
|
|
|
137
|
|
|
with mock.patch(f'{module}.diot.datetime') as m: |
|
138
|
|
|
m.now = mock.Mock(return_value=datetime(2022, 11, 8, 11, 40)) |
|
139
|
|
|
|
|
140
|
|
|
res_filename = diot.generate_package( |
|
141
|
|
|
os.path.join(current_dir, 'test_diot') |
|
142
|
|
|
) |
|
143
|
|
|
assert dec_data == open(os.path.join(current_dir, 'test_diot', f'{text_file}.dec'), 'rb').read() |
|
144
|
|
|
assert os.path.basename(res_filename) == f'{text_file}.dec' |
|
145
|
|
|
|
|
146
|
|
|
|
|
147
|
|
|
def test_create_declaracion_diot_complementary(): |
|
148
|
|
|
diot_file = "XIQB891116QE40DOTAAM1MCMB816201" |
|
149
|
|
|
diot = DIOT( |
|
150
|
|
|
datos_identificacion=xiqb891116qe4_issuer, |
|
151
|
|
|
periodo=Periodo.MARZO_ABRIL, |
|
152
|
|
|
complementaria=DatosComplementaria( |
|
153
|
|
|
folio_anterior="6565", |
|
154
|
|
|
fecha_presentacion_anterior=date(2022, 11, 7) |
|
155
|
|
|
) |
|
156
|
|
|
) |
|
157
|
|
|
reference_data = open(os.path.join(current_dir, 'diot', f'{diot_file}.txt'), 'rb').read() |
|
158
|
|
|
assert reference_data == diot.plain_bytes() |
|
159
|
|
|
|
|
160
|
|
|
|
|
161
|
|
|
def test_create_declaracion_diot_complementary2(): |
|
162
|
|
|
diot_file = "XIQB891116QE40DOTAAM1MCMB901581" |
|
163
|
|
|
diot = DIOT( |
|
164
|
|
|
datos_identificacion=xiqb891116qe4_issuer, |
|
165
|
|
|
periodo=Periodo.ENERO, |
|
166
|
|
|
complementaria=DatosComplementaria( |
|
167
|
|
|
folio_anterior="4567", |
|
168
|
|
|
fecha_presentacion_anterior=date(2022, 2, 13) |
|
169
|
|
|
) |
|
170
|
|
|
) |
|
171
|
|
|
reference_data = open(os.path.join(current_dir, 'diot', f'{diot_file}.txt'), 'rb').read() |
|
172
|
|
|
assert reference_data == diot.plain_bytes() |
|
173
|
|
|
|
|
174
|
|
|
|
|
175
|
|
|
def test_create_declaracion_diot_trimestral(): |
|
176
|
|
|
diot_file = "XIQB891116QE40DOTAAM1MCMB816531" |
|
177
|
|
|
diot = DIOT( |
|
178
|
|
|
datos_identificacion=xiqb891116qe4_issuer, |
|
179
|
|
|
periodo=Periodo.JULIO_SEPTIEMBRE |
|
180
|
|
|
) |
|
181
|
|
|
reference_data = open(os.path.join(current_dir, 'diot', f'{diot_file}.txt'), 'rb').read() |
|
182
|
|
|
assert reference_data == diot.plain_bytes() |
|
183
|
|
|
|
|
184
|
|
|
|
|
185
|
|
|
ono120726rx3_issue = DatosIdentificacion( |
|
186
|
|
|
rfc="OÑO120726RX3", |
|
187
|
|
|
razon_social="ORGANICOS ÑAVEZ OSORIO S.A DE C.V", |
|
188
|
|
|
ejercicio=2022, |
|
189
|
|
|
) |
|
190
|
|
|
|
|
191
|
|
|
|
|
192
|
|
|
def test_create_declaracion_diot_moral(): |
|
193
|
|
|
diot_file = "_OÑO120726RX30DOTAAM1MCMB817181" |
|
194
|
|
|
diot = DIOT( |
|
195
|
|
|
datos_identificacion=ono120726rx3_issue, |
|
196
|
|
|
periodo=Periodo.MAYO_AGOSTO |
|
197
|
|
|
) |
|
198
|
|
|
reference_data = open(os.path.join(current_dir, 'diot', f'{diot_file}.txt'), 'rb').read() |
|
199
|
|
|
assert reference_data == diot.plain_bytes() |
|
200
|
|
|
|
|
201
|
|
|
|
|
202
|
|
|
def test_create_declaracion_diot_moral_da(): |
|
203
|
|
|
diot_file = "_OÑO120726RX30DOTAAM1MCMB820181" |
|
204
|
|
|
diot = DIOT( |
|
205
|
|
|
datos_identificacion=ono120726rx3_issue, |
|
206
|
|
|
periodo=Periodo.OCTUBRE, |
|
207
|
|
|
proveedores=[ |
|
208
|
|
|
ProveedorTercero( |
|
209
|
|
|
tipo_tercero=TipoTercero.PROVEEDOR_NACIONAL, |
|
210
|
|
|
tipo_operacion=TipoOperacion.PRESTACION_DE_SERVICIOS_PROFESIONALES, |
|
211
|
|
|
rfc="LIÑI920228KS8", |
|
212
|
|
|
iva16=52000, |
|
213
|
|
|
iva16_na=48521, |
|
214
|
|
|
iva_rfn=42000, |
|
215
|
|
|
iva_rfn_na=32000, |
|
216
|
|
|
iva0=31000, |
|
217
|
|
|
iva_exento=21000, |
|
218
|
|
|
retenido=11000, |
|
219
|
|
|
devoluciones=10000 |
|
220
|
|
|
), |
|
221
|
|
|
ProveedorTercero( |
|
222
|
|
|
tipo_tercero=TipoTercero.PROVEEDOR_NACIONAL, |
|
223
|
|
|
tipo_operacion=TipoOperacion.ARRENDAMIENTO_DE_INMUEBLES, |
|
224
|
|
|
rfc="IVD920810GU2", |
|
225
|
|
|
iva16=987, |
|
226
|
|
|
iva16_na=876, |
|
227
|
|
|
iva_rfn=765, |
|
228
|
|
|
iva_rfn_na=654, |
|
229
|
|
|
iva0=324, |
|
230
|
|
|
iva_exento=251, |
|
231
|
|
|
retenido=125, |
|
232
|
|
|
devoluciones=444 |
|
233
|
|
|
), |
|
234
|
|
|
] |
|
235
|
|
|
) |
|
236
|
|
|
reference_data = open(os.path.join(current_dir, 'diot', f'{diot_file}.txt'), 'rb').read() |
|
237
|
|
|
assert reference_data == diot.plain_bytes() |
|
238
|
|
|
|
|
239
|
|
|
|
|
240
|
|
|
def test_create_declaracion_diot_moral_full(): |
|
241
|
|
|
diot_file = "_OÑO120726RX30DOTAAL1LCMB823021" |
|
242
|
|
|
diot = DIOT( |
|
243
|
|
|
datos_identificacion=DatosIdentificacion( |
|
244
|
|
|
rfc="OÑO120726RX3", |
|
245
|
|
|
razon_social="ORGANICOS ÑAVEZ OSORIO S.A DE C.V", |
|
246
|
|
|
ejercicio=2021, |
|
247
|
|
|
), |
|
248
|
|
|
periodo=Periodo.JULIO_SEPTIEMBRE, |
|
249
|
|
|
proveedores=[ |
|
250
|
|
|
ProveedorTercero( |
|
251
|
|
|
tipo_tercero=TipoTercero.PROVEEDOR_EXTRANJERO, |
|
252
|
|
|
tipo_operacion=TipoOperacion.OTROS, |
|
253
|
|
|
id_fiscal="1254TAXID", |
|
254
|
|
|
nombre_extranjero="NOMBREEXTRANJERO", |
|
255
|
|
|
pais=Pais.ANTIGUA_Y_BERMUDA, |
|
256
|
|
|
nacionalidad="BERMUDO", |
|
257
|
|
|
iva16=456, |
|
258
|
|
|
iva16_na=752, |
|
259
|
|
|
iva_rfn=782, |
|
260
|
|
|
iva_rfn_na=456, |
|
261
|
|
|
iva_import16=123, |
|
262
|
|
|
iva_import16_na=475, |
|
263
|
|
|
iva_import_exento=7575, |
|
264
|
|
|
iva0=45213, |
|
265
|
|
|
iva_exento=1247, |
|
266
|
|
|
retenido=235, |
|
267
|
|
|
devoluciones=786 |
|
268
|
|
|
), |
|
269
|
|
|
ProveedorTercero( |
|
270
|
|
|
tipo_tercero=TipoTercero.PROVEEDOR_GLOBAL, |
|
271
|
|
|
tipo_operacion=TipoOperacion.ARRENDAMIENTO_DE_INMUEBLES, |
|
272
|
|
|
iva16=9874, |
|
273
|
|
|
iva16_na=8521, |
|
274
|
|
|
iva_rfn=7632, |
|
275
|
|
|
iva_rfn_na=6541, |
|
276
|
|
|
iva_import16=5241, |
|
277
|
|
|
iva_import16_na=4123, |
|
278
|
|
|
iva_import_exento=3562, |
|
279
|
|
|
iva0=2415, |
|
280
|
|
|
iva_exento=1235, |
|
281
|
|
|
retenido=985, |
|
282
|
|
|
devoluciones=874 |
|
283
|
|
|
), |
|
284
|
|
|
ProveedorTercero( |
|
285
|
|
|
tipo_tercero=TipoTercero.PROVEEDOR_NACIONAL, |
|
286
|
|
|
tipo_operacion=TipoOperacion.OTROS, |
|
287
|
|
|
rfc="L&O950913MSA", |
|
288
|
|
|
iva16=96208900, |
|
289
|
|
|
iva16_na=85100, |
|
290
|
|
|
iva_rfn=74300, |
|
291
|
|
|
iva_rfn_na=67600, |
|
292
|
|
|
iva0=58900, |
|
293
|
|
|
iva_exento=47700, |
|
294
|
|
|
retenido=36400, |
|
295
|
|
|
devoluciones=24864 |
|
296
|
|
|
), |
|
297
|
|
|
] |
|
298
|
|
|
) |
|
299
|
|
|
reference_data = open(os.path.join(current_dir, 'diot', f'{diot_file}.txt'), 'rb').read() |
|
300
|
|
|
assert reference_data == diot.plain_bytes() |
|
301
|
|
|
|
|
302
|
|
|
|
|
303
|
|
|
def verify_invoice(invoice, path): |
|
304
|
|
|
verify = verify_result(data=invoice.html_str(), filename=f"{path}.html") |
|
305
|
|
|
assert verify |
|
306
|
|
|
|
|
307
|
|
|
|
|
308
|
|
|
def test_create_declaracion_diot_moral_full_2(): |
|
309
|
|
|
diot_file = "_OÑO120726RX30DOTAAL1LCMB901151" |
|
310
|
|
|
diot = DIOT( |
|
311
|
|
|
datos_identificacion=DatosIdentificacion( |
|
312
|
|
|
rfc="OÑO120726RX3", |
|
313
|
|
|
razon_social="ORGANICOS ÑAVEZ OSORIO S.A DE C.V", |
|
314
|
|
|
ejercicio=2021, |
|
315
|
|
|
), |
|
316
|
|
|
periodo=Periodo.JULIO_SEPTIEMBRE, |
|
317
|
|
|
proveedores=[ |
|
318
|
|
|
ProveedorTercero( |
|
319
|
|
|
tipo_tercero=TipoTercero.PROVEEDOR_EXTRANJERO, |
|
320
|
|
|
tipo_operacion=TipoOperacion.OTROS, |
|
321
|
|
|
id_fiscal="1254TAXID", |
|
322
|
|
|
nombre_extranjero="NOMBREEXTRANJERO", |
|
323
|
|
|
pais=Pais.ANTIGUA_Y_BERMUDA, |
|
324
|
|
|
nacionalidad="BERMUDO", |
|
325
|
|
|
iva16=456, |
|
326
|
|
|
iva16_na=752, |
|
327
|
|
|
iva_rfn=782, |
|
328
|
|
|
iva_rfn_na=456, |
|
329
|
|
|
iva_import16=123, |
|
330
|
|
|
iva_import16_na=475, |
|
331
|
|
|
iva_import_exento=7575, |
|
332
|
|
|
iva0=45213, |
|
333
|
|
|
iva_exento=1247, |
|
334
|
|
|
retenido=235, |
|
335
|
|
|
devoluciones=786 |
|
336
|
|
|
), |
|
337
|
|
|
ProveedorTercero( |
|
338
|
|
|
tipo_tercero=TipoTercero.PROVEEDOR_GLOBAL, |
|
339
|
|
|
tipo_operacion=TipoOperacion.ARRENDAMIENTO_DE_INMUEBLES, |
|
340
|
|
|
iva16=9874, |
|
341
|
|
|
iva16_na=8521, |
|
342
|
|
|
iva_rfn=7632, |
|
343
|
|
|
iva_rfn_na=6541, |
|
344
|
|
|
iva_import16=5241, |
|
345
|
|
|
iva_import16_na=4123, |
|
346
|
|
|
iva_import_exento=3562, |
|
347
|
|
|
iva0=2415, |
|
348
|
|
|
iva_exento=1235, |
|
349
|
|
|
retenido=985, |
|
350
|
|
|
devoluciones=874 |
|
351
|
|
|
), |
|
352
|
|
|
ProveedorTercero( |
|
353
|
|
|
tipo_tercero=TipoTercero.PROVEEDOR_NACIONAL, |
|
354
|
|
|
tipo_operacion=TipoOperacion.OTROS, |
|
355
|
|
|
rfc="L&O950913MSA", |
|
356
|
|
|
iva16=96208900, |
|
357
|
|
|
iva16_na=85100, |
|
358
|
|
|
iva_rfn=74300, |
|
359
|
|
|
iva_rfn_na=67600, |
|
360
|
|
|
iva0=58900, |
|
361
|
|
|
iva_exento=47700, |
|
362
|
|
|
retenido=36400, |
|
363
|
|
|
devoluciones=24864 |
|
364
|
|
|
), |
|
365
|
|
|
ProveedorTercero( |
|
366
|
|
|
tipo_tercero=TipoTercero.PROVEEDOR_GLOBAL, |
|
367
|
|
|
tipo_operacion=TipoOperacion.PRESTACION_DE_SERVICIOS_PROFESIONALES, |
|
368
|
|
|
iva16=77757987856, |
|
369
|
|
|
), |
|
370
|
|
|
ProveedorTercero( |
|
371
|
|
|
tipo_tercero=TipoTercero.PROVEEDOR_NACIONAL, |
|
372
|
|
|
tipo_operacion=TipoOperacion.PRESTACION_DE_SERVICIOS_PROFESIONALES, |
|
373
|
|
|
rfc="IXS7607092R5", |
|
374
|
|
|
iva16_na=500, |
|
375
|
|
|
iva_rfn=0 |
|
376
|
|
|
) |
|
377
|
|
|
] |
|
378
|
|
|
) |
|
379
|
|
|
reference_data = open(os.path.join(current_dir, 'diot', f'{diot_file}.txt'), 'rb').read() |
|
380
|
|
|
assert reference_data == diot.plain_bytes() |
|
381
|
|
|
|
|
382
|
|
|
verify_invoice(diot, 'test_create_declaracion_diot_moral_full_2') |
|
383
|
|
|
|
|
384
|
|
|
|
|
385
|
|
|
def test_create_declaracion_diot_moral_full_2_comp(): |
|
386
|
|
|
diot = DIOT( |
|
387
|
|
|
datos_identificacion=DatosIdentificacion( |
|
388
|
|
|
rfc="OÑO120726RX3", |
|
389
|
|
|
razon_social="ORGANICOS ÑAVEZ OSORIO S.A DE C.V", |
|
390
|
|
|
ejercicio=2021, |
|
391
|
|
|
), |
|
392
|
|
|
periodo=Periodo.JULIO_SEPTIEMBRE, |
|
393
|
|
|
complementaria=DatosComplementaria( |
|
394
|
|
|
folio_anterior="12313", |
|
395
|
|
|
fecha_presentacion_anterior=date(2021, 5, 10) |
|
396
|
|
|
), |
|
397
|
|
|
proveedores=[ |
|
398
|
|
|
ProveedorTercero( |
|
399
|
|
|
tipo_tercero=TipoTercero.PROVEEDOR_EXTRANJERO, |
|
400
|
|
|
tipo_operacion=TipoOperacion.OTROS, |
|
401
|
|
|
id_fiscal="1254TAXID", |
|
402
|
|
|
nombre_extranjero="NOMBREEXTRANJERO", |
|
403
|
|
|
pais=Pais.ANTIGUA_Y_BERMUDA, |
|
404
|
|
|
nacionalidad="BERMUDO", |
|
405
|
|
|
iva16=456, |
|
406
|
|
|
iva16_na=752, |
|
407
|
|
|
iva_rfn=782, |
|
408
|
|
|
iva_rfn_na=456, |
|
409
|
|
|
iva_import16=123, |
|
410
|
|
|
iva_import16_na=475, |
|
411
|
|
|
iva_import_exento=7575, |
|
412
|
|
|
iva0=45213, |
|
413
|
|
|
iva_exento=1247, |
|
414
|
|
|
retenido=235, |
|
415
|
|
|
devoluciones=786 |
|
416
|
|
|
), |
|
417
|
|
|
ProveedorTercero( |
|
418
|
|
|
tipo_tercero=TipoTercero.PROVEEDOR_GLOBAL, |
|
419
|
|
|
tipo_operacion=TipoOperacion.ARRENDAMIENTO_DE_INMUEBLES, |
|
420
|
|
|
iva16=9874, |
|
421
|
|
|
iva16_na=8521, |
|
422
|
|
|
iva_rfn=7632, |
|
423
|
|
|
iva_rfn_na=6541, |
|
424
|
|
|
iva_import16=5241, |
|
425
|
|
|
iva_import16_na=4123, |
|
426
|
|
|
iva_import_exento=3562, |
|
427
|
|
|
iva0=2415, |
|
428
|
|
|
iva_exento=1235, |
|
429
|
|
|
retenido=985, |
|
430
|
|
|
devoluciones=874 |
|
431
|
|
|
), |
|
432
|
|
|
ProveedorTercero( |
|
433
|
|
|
tipo_tercero=TipoTercero.PROVEEDOR_NACIONAL, |
|
434
|
|
|
tipo_operacion=TipoOperacion.OTROS, |
|
435
|
|
|
rfc="L&O950913MSA", |
|
436
|
|
|
iva16=96208900, |
|
437
|
|
|
iva16_na=85100, |
|
438
|
|
|
iva_rfn=74300, |
|
439
|
|
|
iva_rfn_na=67600, |
|
440
|
|
|
iva0=58900, |
|
441
|
|
|
iva_exento=47700, |
|
442
|
|
|
retenido=36400, |
|
443
|
|
|
devoluciones=24864 |
|
444
|
|
|
), |
|
445
|
|
|
ProveedorTercero( |
|
446
|
|
|
tipo_tercero=TipoTercero.PROVEEDOR_GLOBAL, |
|
447
|
|
|
tipo_operacion=TipoOperacion.PRESTACION_DE_SERVICIOS_PROFESIONALES, |
|
448
|
|
|
iva16=77757987856, |
|
449
|
|
|
), |
|
450
|
|
|
ProveedorTercero( |
|
451
|
|
|
tipo_tercero=TipoTercero.PROVEEDOR_NACIONAL, |
|
452
|
|
|
tipo_operacion=TipoOperacion.PRESTACION_DE_SERVICIOS_PROFESIONALES, |
|
453
|
|
|
rfc="IXS7607092R5", |
|
454
|
|
|
iva16_na=500, |
|
455
|
|
|
iva_rfn=0 |
|
456
|
|
|
) |
|
457
|
|
|
] |
|
458
|
|
|
) |
|
459
|
|
|
|
|
460
|
|
|
verify_invoice(diot, 'test_create_declaracion_diot_moral_full_2_comp') |
|
461
|
|
|
|