@@ -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