Skip to content

SICORE — Formato Técnico de Exportación

Módulo: Compras Tipo: Technical Reference Estado: ✅ Implementado Última actualización: 2026-03-26


Descripción General

SICORE (Sistema de Control de Retenciones) es la plataforma de ARCA mediante la cual los agentes de retención declaran las retenciones practicadas. El sistema Bautista, como agente de retención de Ganancias, genera dos archivos de texto de posición fija que se importan en la aplicación SICORE de ARCA:

ArchivoDescripciónLongitud de registro
retenciones.txtUna línea por cada retención practicada en el período145 caracteres
sujetos_retenidos.txtUna línea por cada proveedor único retenido en el período83 caracteres

Ambos archivos se comprimen en un único ZIP (sicore_consolidado_MMYYYY.zip) que se importa directamente en SICORE de ARCA.


Reglas del Formato de Posición Fija

Cada registro tiene longitud fija y estricta. No existe separador de campos — la posición de inicio y longitud de cada campo definen su ubicación.

Tipo de campoAlineaciónRellenoCodificaciónObservación
Alfanumérico / TextoIzquierdaEspacios a la derechaUTF-8 (sin caracteres extendidos)Truncar si el valor supera la longitud
Numérico / EnteroDerechaCeros a la izquierda
Importe decimalDerechaCeros a la izquierdaCentavos implícitos: el valor se multiplica por 100 y se truncan los decimales. Ej: 1234.5600000000123456 en 14 posiciones
Fecha SICOREFormato dd/mm/aaaa (10 caracteres fijos, incluyendo las barras)
CUIT / CUIL (como número de documento)IzquierdaEspacios a la derechaTipo Texto: 11 dígitos sin guiones, alineado izquierda. Ej: 20123456789 (20 pos. en retenciones.txt, 11 pos. en sujetos_retenidos.txt)

Nota: El campo "Número de documento del retenido" (pos. 112-131 en retenciones.txt, pos. 1-11 en sujetos_retenidos.txt) es tipo Texto según el formato oficial SICORE v9.0 exportado por la aplicación SICORE. El CUIT/CUIL de 11 dígitos se ubica alineado a la izquierda con espacios de relleno a la derecha.

Restricciones globales:

  • Todos los registros de un mismo archivo tienen exactamente la misma longitud (retenciones.txt = 145, sujetos_retenidos.txt = 83).
  • Codificación del archivo: Windows-1252.
  • Terminación de línea: CRLF (\r\n).

Tipo de Documento ARCA

ARCA distingue el tipo de documento del sujeto retenido según el prefijo del número de CUIT/CUIL. Este campo ocupa 2 posiciones en ambos archivos.

Prefijos del identificadorTipoCódigo ARCADescripción
20, 23, 24, 27CUIL86Persona física
30, 33, 34CUIT80Persona jurídica
Cualquier otro prefijoCUIT80Fallback (tratado como persona jurídica)

La detección está implementada en Core/Afip/IdentificadorFiscal::codigoTipoDocumentoAfip(). El campo se emite de forma dinámica en función del CUIT del proveedor — no es un valor fijo.


Helpers de Formato

La clase Core/Afip/FormatoAfip centraliza los helpers de formato de posición fija utilizados en la generación de ambos archivos. Sus métodos son estáticos:

MétodoCuándo usar
texto(string $val, int $len)Campos alfanuméricos: razón social, domicilio, localidad, número de comprobante
entero(int|string $val, int $len)Campos numéricos enteros: código de comprobante, código de impuesto, número certificado
importeCentavos(float|string $val, int $len)Importes monetarios: importe del comprobante, base de cálculo, importe de retención
fechaDdMmAaaa(?string $fechaIso)Fechas SICORE (dd/mm/aaaa): fecha del comprobante, fecha de retención, fecha de vigencia
padIzquierdaCeros(string $text, int $length)Relleno numérico genérico izquierda con ceros

La clase Core/Afip/IdentificadorFiscal complementa a FormatoAfip para campos relacionados con identificadores fiscales:

MétodoCuándo usar
padLeft(int $len)Disponible en IdentificadorFiscal para uso genérico; no se usa para el campo número de documento en SICORE (ese campo usa FormatoAfip::texto())
codigoTipoDocumentoAfip()Tipo de documento del retenido (pos. 110-111 en retenciones.txt y pos. 82-83 en sujetos_retenidos.txt)

Limitaciones Actuales

LimitaciónDescripciónEstado
Código de impuestoHardcodeado a 0217 (Ganancias) mediante la constante CODIGO_IMPUESTO_GANANCIAS. ARCA define también los códigos 064, 172, 210, 218, 219, 466 y 767 para otros regímenes.Constante nombrada — extensible con patrón Strategy cuando se incorporen otros impuestos
Código de operaciónHardcodeado a 1 (Retención) mediante la constante CODIGO_OPERACION_RETENCION. ARCA define también el código 2 (Percepción) y 4 (Imposibilidad de retención).Constante nombrada — extensible con patrón Strategy
Código de condiciónSolo mapea 01 (Inscripto) y 02 (No inscripto). ARCA define 19 códigos de condición posibles. La base de datos solo almacena el estado inscripto/no inscripto del proveedor en el campo detgan.Limitación de la estructura de datos actual
Notas de CréditoEl campo "número de certificado original" (pos. 132-145) usa 0 como valor de fallback para NCs, porque la tabla detgan no almacena el número del certificado original que se revierte. Se emite un error_log con el número de comprobante afectado para trazabilidad.Deuda técnica — ver Roadmap
Beneficiarios del exteriorNo soportado. ARCA requiere campos adicionales para estos casos (CUIT del país, denominación del ordenante, acrecentamiento, CUIT del ordenante).Fuera del scope actual

Roadmap de Extensibilidad

Impuesto y Operación (patrón Strategy)

Las constantes CODIGO_IMPUESTO_GANANCIAS (0217) y CODIGO_OPERACION_RETENCION (1) están declaradas con nombre explícito en SicoreRetenciones. Cuando el sistema incorpore retenciones de IVA (código 767) u otros impuestos, estas constantes deberán convertirse en una estrategia configurable por régimen, de manera que la lógica de construcción de línea no cambie — solo la configuración de qué impuesto y operación emitir.

El diseño actual con constantes nombradas facilita esa transición sin reescribir la lógica de formato.

Notas de Crédito

Para exportar correctamente el campo "número de certificado original" en NCs, se requiere agregar el campo numret_original INT NULL a la tabla detgan, populado en el momento en que se registra la retención de crédito en el proceso de orden de pago. Con ese dato disponible, se elimina el fallback 0 en SicoreRetenciones::buildLineaRetencion().

Beneficiarios del Exterior

Para soportar este caso se necesitan campos adicionales en el registro de retención: denominación del ordenante, tipo de acrecentamiento, CUIT del país y CUIT del ordenante. Ver instructivo ARCA SICORE v8.0 r9, sección 4.3.1.1.


Referencia de Clases

ClaseUbicaciónResponsabilidad
IdentificadorFiscalCore/Afip/IdentificadorFiscalValue Object canónico para CUIT/CUIL: normalización (strip guiones/espacios), detección del tipo de documento ARCA (80/86), validación por dígito verificador, padding numérico izquierda con ceros
FormatoAfipCore/Afip/FormatoAfipHelpers estáticos de formato de posición fija: texto, entero, importe centavos, fechas SICORE y Libro IVA
SicoreRetencionesmodels/modulo-compra/SicoreRetencionesConstrucción del archivo retenciones.txt y sujetos_retenidos.txt; orquestado por SicoreRetencionesController

Referencias


Sistema Bautista ERP - Módulo Compras