Skip to content

Commit a170ddc

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

File tree

4 files changed

+122
-1
lines changed

4 files changed

+122
-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: 119 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,121 @@ 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 según especificación indicada en tarea 60704.
1793+
La longitud 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+
tipo_comp = ""
1838+
if line.l10n_latam_document_type_id.code == "19":
1839+
tipo_comp = "5"
1840+
elif line.l10n_latam_document_type_id.code in ["17", "18", "63", "64", "27", "28", "29"]:
1841+
tipo_comp = "7"
1842+
elif internal_type == "invoice":
1843+
tipo_comp = "1"
1844+
elif internal_type == "debit_note":
1845+
tipo_comp = "2"
1846+
elif internal_type == "credit_note":
1847+
tipo_comp = "102"
1848+
content += tipo_comp + ","
1849+
1850+
# 9 letra del comprobante (A,B,C,E o M, según tipo de comprobante).
1851+
# Char 1, ejemplo: A.
1852+
content += line.l10n_latam_document_type_id.l10n_ar_letter + ","
1853+
1854+
document_parts = line.move_id._l10n_ar_get_document_number_parts(
1855+
line.move_id.l10n_latam_document_number, line.l10n_latam_document_type_id.code
1856+
)
1857+
# 10 punto de venta. Numérico 5, ejemplo: 2.
1858+
content += "{:0>5d}".format(document_parts["point_of_sale"])[-5:] + ","
1859+
1860+
# 11 número de comprobante. Numérico 8, ejemplo: 3431222.
1861+
content += "{:0>8d}".format(document_parts["invoice_number"])[-8:] + ","
1862+
1863+
# 12 Monto Sujeto a Percepción (numérico sin separador de miles y “Punto”
1864+
# como separador decimal). Numérico 13, ejemplo: 12342.03
1865+
content += format_amount(-get_line_tax_base(line), 13, 2, ".") + ","
1866+
1867+
# 13 Alícuota (en porcentaje y “Punto” como separador decimal)
1868+
# Numérico(3,2), ejemplo: 2.00
1869+
content += "%03.2f" % tax.amount + ","
1870+
1871+
# 14 Monto Percibido o Devuelto (numérico sin separador de miles, se
1872+
# obtiene de multiplicar el campo 12 por el campo 13 y dividirlo por 100)
1873+
# Numérico 10, ejemplo: 246.84
1874+
content += "%0.2f" % (-line.balance) + ","
1875+
1876+
# 15 Número de comprobante original (sólo para las Anulaciones/Devoluciones)
1877+
# (Tipo, Letra, Punto de venta y Número de Comprobante). Alfanumérico (17)
1878+
comp_original = ""
1879+
if reversed_entry := line.move_id.reversed_entry_id:
1880+
reversed_internal_type = reversed_entry.l10n_latam_document_type_id.internal_type
1881+
if reversed_entry.l10n_latam_document_type_id.code == "19":
1882+
comp_original += "5"
1883+
elif reversed_entry.l10n_latam_document_type_id.code in ["17", "18", "63", "64", "27", "28", "29"]:
1884+
comp_original += "7"
1885+
elif reversed_internal_type == "invoice":
1886+
comp_original += "1"
1887+
elif reversed_internal_type == "debit_note":
1888+
comp_original += "2"
1889+
comp_original += reversed_entry.l10n_latam_document_type_id.l10n_ar_letter
1890+
reversed_entry_document_parts = reversed_entry._l10n_ar_get_document_number_parts(
1891+
reversed_entry.l10n_latam_document_number, reversed_entry.l10n_latam_document_type_id.code
1892+
)
1893+
comp_original += "{:0>5d}".format(reversed_entry_document_parts["point_of_sale"])[-5:]
1894+
comp_original += "{:0>8d}".format(reversed_entry_document_parts["invoice_number"])[-8:]
1895+
content += comp_original.ljust(17) + ","
1896+
# 16 CRC del contribuyente devolución. Numérico(2)
1897+
content += " " + ","
1898+
1899+
# 17 ABM (Indica si es un registro de Alta, Modificación o Baja).
1900+
# Alfanumérico(1), ejemplo: A
1901+
content += "A" + "\r\n"
1902+
return [
1903+
{
1904+
"txt_filename": "Percepciones_sircip.txt",
1905+
"txt_content": content,
1906+
}
1907+
]

0 commit comments

Comments
 (0)