Skip to content

Commit 249db33

Browse files
[IMP] l10n_ar_account_tax_settlement: txt percepciones + padrón sircip
Tarea: 60704
1 parent b60d634 commit 249db33

File tree

4 files changed

+119
-1
lines changed

4 files changed

+119
-1
lines changed

l10n_ar_account_tax_settlement/README.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ Especificación de archivos:
5555
* MISIONES: https://www.atm.misiones.gob.ar/index.php/guia-de-tramites/instructivos/category/53-agentes
5656
Correo DGR: mesadeayuda@tsgroup.com.ar
5757

58+
* SIRCIP: Implementación según especificación indicada en tarea 60704. Ver diseño en /doc/sircip/Diseno_de_Registros_del_Sistema_SIRCIP.pdf desde página 2 "2. Formato de Presentación de Declaración Jurada (DDJJ)". El pdf con la especificación se obtuvo desde https://www.ca.gob.ar/sistemas/sircip , sección "Instructivo y tablas" haciendo click en "Diseño de Registros".
59+
5860

5961
Installation
6062
============

l10n_ar_account_tax_settlement/__manifest__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
##############################################################################
2020
{
2121
"name": "Tax Settlements For Argentina",
22-
"version": "18.0.1.10.0",
22+
"version": "18.0.1.11.0",
2323
"category": "Accounting",
2424
"author": "ADHOC SA",
2525
"website": "www.adhoc.com.ar",
Binary file not shown.

l10n_ar_account_tax_settlement/models/account_journal.py

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ class AccountJournal(models.Model):
8787
# "TXT Perc/Ret IIBB aplicadas ARBA desde 01/03/2026: Percepciones Act. 7 método Percibido (quincenal)",
8888
# ),
8989
# ('other', 'Other')
90+
("percepciones_sircip", "TXT Percepciones Aplicadas SIRCIP"),
9091
]
9192
)
9293

@@ -1786,3 +1787,118 @@ def iibb_aplicado_arba_desde_01032026_files_values(self, move_lines, act_7=None)
17861787
"txt_content": ret,
17871788
},
17881789
]
1790+
1791+
def percepciones_sircip_files_values(self, move_lines):
1792+
"""Implementado segun especificación indicada en tarea 60704.
1793+
La longitid de los campos, ejemplo 'Numérico 2' es la máxima permitida.
1794+
Ej. de registro:
1795+
30100100106,34,03/03/2026,11,1,,904,1,A,2,3431222,12342.03,2.00,246.84,,,A
1796+
Aclaración: Las validaciones del archivo cargado se realizan con posterioridad a la carga.
1797+
El resultado del procesamiento, se informará en la propia aplicación. En caso de errores,
1798+
se generará un archivo con los mismos, para ser descargado por el agente"""
1799+
self.ensure_one()
1800+
content = ""
1801+
for line in move_lines.sorted(key=lambda r: (r.date, r.id)):
1802+
# 1 Nro de CUIT del Contribuyente (Numérico 11, ejemplo 30100100106)
1803+
content += line.partner_id.ensure_vat() + ","
1804+
1805+
# 2 CRC del contribuyente período (Numérico 2, ejemplo: 34)
1806+
# TODO consultar
1807+
content += " " + ","
1808+
1809+
# 3 Fecha de Percepción (dd/mm/aaaa, ejemplo: 03/03/2026)
1810+
content += fields.Date.from_string(line.date).strftime("%d/%m/%Y")
1811+
1812+
# 4 Tipo de Régimen de Percepción (código correspondiente según tabla
1813+
# definida por la jurisdicción, numérico 3, ejemplo: 11)
1814+
# TODO consultar
1815+
content += " " + ","
1816+
1817+
# 5 Tipo de Registro (1-Percepción, 2-Informativo, 3-Excluido, 4-No Inscripto
1818+
# 5-Sobretasa, 6-Anulada, 7-Omitida). (Numérico 2, ejemplo: 1)
1819+
# TODO consultar: solo 1 va?
1820+
content += "1" + ","
1821+
1822+
# 6 Código de Operación Exceptuada (sólo para tipo de registro 3-Excluido).
1823+
# Definir tabla de valores. (Numérico 2)
1824+
content += " " + ","
1825+
1826+
# 7 Jurisdicción a imputar (No inscripto o Sobretasa), o donde se realizó la
1827+
# operación (Percepción, Informativo o Excluiodo). (Numérico 3, ejemplo: 904)
1828+
tax = line._get_settlement_tax()
1829+
content += tax.l10n_ar_state_id.jurisdiction_code + ","
1830+
1831+
# 8 Tipo de Comprobante. Numérico 3, ejemplo: 1. 1 factura, 2 nota de débito, 3
1832+
# recibo, 4 nota de venta al contado, 5 factura de exportación, 6 nota de débito
1833+
# para op. c/exterior, 7 liquidacíon, 20 otros comprobantes de débito,
1834+
# 102 nota crédito, 106 nota crédito op. c/exterior, 120 otros comprobantes
1835+
# de crédito, 900 devolución. (numérico 3, ejemplo: 1)
1836+
internal_type = line.l10n_latam_document_type_id.internal_type
1837+
if line.l10n_latam_document_type_id.code == "19":
1838+
content += "5" + ","
1839+
elif line.l10n_latam_document_type_id.code in ["17", "18", "63", "64", "27", "28", "29"]:
1840+
content += "7" + ","
1841+
elif internal_type == "invoice":
1842+
content += "1" + ","
1843+
elif internal_type == "debit_note":
1844+
content += "2" + ","
1845+
elif internal_type == "credit_note":
1846+
content += "102" + ","
1847+
content += " " + ","
1848+
1849+
# 9 letra del comprobante (A,B,C,E o M, según tipo de comprobante).
1850+
# Char 1, ejemplo: A.
1851+
content += line.l10n_latam_document_type_id.l10n_ar_letter + ","
1852+
1853+
document_parts = line.move_id._l10n_ar_get_document_number_parts(
1854+
line.move_id.l10n_latam_document_number, line.l10n_latam_document_type_id.code
1855+
)
1856+
# 10 punto de venta. Numérico 5, ejemplo: 2.
1857+
content += "{:0>5d}".format(document_parts["point_of_sale"])[-5:] + ","
1858+
1859+
# 11 número de comprobante. Numérico 8, ejemplo: 3431222.
1860+
content += "{:0>8d}".format(document_parts["invoice_number"])[-8:] + ","
1861+
1862+
# 12 Monto Sujeto a Percepción (numérico sin separador de miles y “Punto”
1863+
# como separador decimal). Numérico 13, ejemplo: 12342.03
1864+
content += format_amount(-get_line_tax_base(line), 12, 2, ".") + ","
1865+
1866+
# 13 Alícuota (en porcentaje y “Punto” como separador decimal)
1867+
# Numérico(3,2), ejemplo: 2.00
1868+
content += "%03.2f" % tax.amount + ","
1869+
1870+
# 14 Monto Percibido o Devuelto (numérico sin separador de miles, se
1871+
# obtiene de multiplicar el campo 12 por el campo 13 y dividirlo por 100)
1872+
# Numérico 10, ejemplo: 246.84
1873+
content += "%0.2f" % (-line.balance) + ","
1874+
1875+
# 15 Número de comprobante original (sólo para las Anulaciones/Devoluciones)
1876+
# (Tipo, Letra, Punto de venta y Número de Comprobante). Alfanumérico (17)
1877+
if reversed_entry := line.move_id.reversed_entry_id:
1878+
reversed_internal_type = reversed_entry.l10n_latam_document_type_id.internal_type
1879+
if reversed_entry.l10n_latam_document_type_id.code == "19":
1880+
content += "5"
1881+
elif reversed_entry.l10n_latam_document_type_id.code in ["17", "18", "63", "64", "27", "28", "29"]:
1882+
content += "7"
1883+
elif reversed_internal_type == "invoice":
1884+
content += "1"
1885+
elif reversed_internal_type == "debit_note":
1886+
content += "2"
1887+
content += reversed_entry.l10n_latam_document_type_id.l10n_ar_letter
1888+
reversed_entry_document_parts = reversed_entry._l10n_ar_get_document_number_parts(
1889+
reversed_entry.l10n_latam_document_number, reversed_entry.l10n_latam_document_type_id.code
1890+
)
1891+
content += "{:0>5d}".format(reversed_entry_document_parts["point_of_sale"])[-5:]
1892+
content += "{:0>8d}".format(reversed_entry_document_parts["invoice_number"])[-8:] + ","
1893+
# 16 CRC del contribuyente devolución. Numérico(2)
1894+
content += " " + ","
1895+
1896+
# 17 ABM (Indica si es un registro de Alta, Modificación o Baja).
1897+
# Alfanumérico(1), ejemplo: A
1898+
content += "A" + "\r\n"
1899+
return [
1900+
{
1901+
"txt_filename": "Percepciones_sircip.txt",
1902+
"txt_content": content,
1903+
}
1904+
]

0 commit comments

Comments
 (0)