Impuesto Sobre La Renta (ISLR)

ISLR retenciones

El pasado 12 de mayo se cumplieron 20 años del Decreto Presidencial 1.808 el cual dicta las normas y procedimientos para las retenciones del Impuesto Sobre La Renta (ISLR). En todo ese tiempo hemos tenido dos Constituciones (enmienda incluida), varios Presidentes de la República, Congreso de Diputados y Senadores y luego una Asamblea Nacional Legislativa e infinidad de Ministros y Ministras ¿Cómo es posible que este decreto haya sobrevivido tanto tiempo?

Advertencia.
Advertencia.

Por supuesto que este artículo está dirigido a los venezolanos y venezolanas que hace muchísimos años nos retienen el Impuesto Sobre La Renta  “ISLR” en nuestro trabajo intelectual de servicios a las empresas privadas (nunca hemos laborado ni contratado con el sector público). No somos licenciados, ni contadores, mucho menos abogados, pero ya saben como reza el dicho “se puede desconocer la Ley pero la Ley no lo desconoce a usted” Y POR ESO ES MEJOR ESTUDIAR LA LEGISLACIÓN AL RESPECTO ya que estamos directamente involucrados. Vamos pues a este proceso de aprendizaje (o redescubrimiento, en realidad) de las Ciencias Sociales, rama Tributaria.

Impuesto Sobre La Renta (ISLR)
Impuesto Sobre La Renta (ISLR)

Antecedentes.

Acá hemos reportado sobre lo que es la Gaceta Oficial de la República, el Registro de Información Fiscal (ley de identificación incluída), las Normas de Emisión de Documentos, las retenciones de impuesto al valor agregado, la Unidad Tributaria y hasta un glosario tributario: todo esto, y aún más , “toca” y/o se ve relacionado con la Ley de Impuesto Sobre la Renta.

Las razones por las que a perdurado esta normativa tributaria fue debido a la quiebra del Banco Latino y que generó una seguidilla de quiebras a lo que llevó a la “crisis bancaria” de 1994 (esencialmente los dueños de los bancos usaron nuestros ahorros, compraron dólares estadounidenses en gran cuantía y se los llevaron a EEUU y otros paraísos fiscales para poner de rodillas al gobierno del Dr. Rafael Caldera -quien no es santo de nuestra devoción-).

Tenemos un artículo que trata sobre el tema, ya que lo que hacemos acá en Venezuela es vivir de la renta petrolera y al bajar los precios y los banqueros robarse las reservas internacionales con nuestros ahorros (teníamos cuenta en el Banco de Maracaibo y como iba a quebrar nos pasamos al Banco de Venezuela… el cual también quebró pero lo reflotaron, privatizaron y volvieron a nacionalizar y ahora es el primer banco del país) se descalabra la economía nacional toda.

Banco de Maracaibo libretas de ahorro 1994
Banco de Maracaibo libretas de ahorro 1994

Para no aburrirlos con nuestras historias que vivimos en carne propia acá una entrevista al Presidente (E) José Guillermo Andueza, padre del Decreto Presidencial 1.808 (el Dr. Rafael Caldera debido a su edad en su segundo mandato estaba muy aquejado de salud) ofrece declaraciones de lo que sucedía en el país para aquel entonces (cualquier similitud al dia de hoy NO es pura coincidencia, son los ciclos de altas y bajas de los precios del petróleo):

En 1997 con esa situación económica no solo se tenían que recaudar más impuestos sino que había que recortar “gastos” y aunque era el sector público el del problema, el sector privado también sufrió mucho por el aumento indiscrimidado de la divisa US$ así que el Doctor Rafel Caldera tuvo que echar marcha atrás en sus ideales (él es el padre de la Ley del Trabajo) y así lo anunciaba en ese mismo año 1997:

De aquella época guardamos los folletos que entregaba la Guardia Nacional, negocio por negocio, y recordamos la Ley de Remisión Tributaria que fue una ley de amnistías fiscal (si es que ese término existe) porque la evasión era espantosa, EXISTÍA MUY POCA CULTURA TRIBUTARÍA EN ESE PERÍODO PRESIDENCIAL pero afortunadamente DISIP y Guardia Nacional pudieron poco a poco enmendar el capote.

Impresión y emisión de factura y otros documentos LEY DE REMISIÓN TRIBUTARIA 1994
Impresión y emisión de factura y otros documentos LEY DE REMISIÓN TRIBUTARIA 1994
Máquinas fiscales 1994
Máquinas fiscales 1994
Disposición transitoria ICSVM 1994
Disposición transitoria ICSVM 1994

Volver al futuro: estamos en el año 2017, veinte años después.

Lo que era el Ministerio de Hacienda desapareció y vino el Ministerio de Finanza en sus distintos nombres pero lo que no ha cambiado su nombre es el Servicio Nacional Integrado de Administración Tributaria y Aduanera (SENIAT). Como ente encargado de la recolección de impuestos se ha modernizado mucho con el tiempo y de un tiempo a esta parte mantienen en línea un Portal Fiscal donde almacenan la información relevante y actualizada. Primero la Constitución, luego las Leyes, después los Reglamentos, Decretos, Resoluciones y Providencias (en ese orden y apenas “rasguñamos” la burocracia) es entonces que vamos a concentrarnos en los Reglamentos.

Enlaces para la descarga de los documentos.

Página web del SENIAT “Portal Fiscal”.

En este enlace del Portal Fiscal, sección “Tributos Internos-> Impuesto Sobre La Renta-> Leyes” aparece el «Decreto con Rango, Valor y Fuerza de Ley de impuesto sobre la Renta» vigente al momento de escribir este artículo.

En este otro enlace del Portal Fiscal, sección “Tributos Internos-> impuesto Sobre La Renta-> Reglamentos” aparecen el «Reglamento de la Ley de Impuesto Sobre la Renta» y el objeto de nuestro somero y humilde estudio de hoy, el «Decreto 1.808, Reglamento Parcial de la Ley de Impuesto Sobre la Renta en Materia de Retenciones».

Documentos en formato PDF.

No obstante vamos a colocar los enlaces directos de donde pueden descargar los ejemplares electrónicos de las Gacetas Oficiales primero primero desde el Portal Fiscal del SENIAT:

No, no están viendo mal, el Reglamento Parcial está de primero en orden cronológico, luego viene el Reglamento y de último y más reciente está la Ley. De hecho, el Reglamento reconoce en su artículo 220 que se derogan cualesquiera otras disposiciones reglamentarias que se opongan o colidan con el Reglamento.

Detalles acerca del Reglamento del ISLR.

Otros detalles del Reglamento, antes de comenzar con el Reglamento Parcial:

  • El artículo 27 especifica que se deben especificar por separado el pago a capital y el pago de intereses y de no hacerlo se considerará que todo el pago es a intereses lo cual genera tributo y los bancos se cuidan muy bien de ello.
  • El artículo 30 (Título II, Capítulo I) del Reglamento viene a ser copia del artículo 14 (Capítulo V) del Reglamento Parcial (por no decir que son idénticos).
  • El artículo 31 del Reglamento es el Parágrafo Único del artículo 14 del Reglamento Parcial.
  • El artículo 32 del Reglamento contienen los literales de la a) a la e) del artículo 14 del Reglamento Parcial.
  • El artículo 33 del Reglamento es el artículo 15 del Reglamento Parcial.
  • El Reglamento incluye una larguísima normativa sobre los ajustes de inflación los cuales se revirtieron con la útlima reforma de la Ley del Impuesto Sobre La Renta (si estamos equivocados: Twitter @ks7000).
  • El Título V, Capítulo I habla sobre las normas de facturación y que son ratificadas en la Providencia 00071 del SENIAT .
  • El Título V, Capítulo II versa sobre el movimiento y registro de los inventarios (“magnético” -léase computarizado- sí y sólo sí el SENIAT autoriza a la persona jurídica a llevarlo de esta manera el SENIAT NO CERTIFICA SOFTWARE NI APLICACIONES; al hacer una inspección fiscal ellos y ellas observan cómo funciona el sistema, los campos que llevan los informes impresos y dan luz verde para que soliciten el permiso de manera escrita por ante la oficina regional correspondiente).
  • El artículo 104 y 119 introducen el concepto de “procedimiento tradicional del costo de ventas” con el cual todos los contadores y contadoras con que hemos laborado nos piden constantemente (incluso tenemos una rutina automatizada para ello); es el famosísimo “…inventario inicial más las compras menos el inventario final.
  • El Título V, Capítulo III especifica la instauración y amntenimiento del Registro de información Fiscal el cual posteriormente es formalmente creado por la Providencia 0013 del SENIAT en el año 2006 y es modificada para adecuarla a los progresos en computación en la Providencia 0048 del SENIAT en el año 2013.
  • El Título V, Capítulo IV indica que el Registro Inmobiliario queda en manos del SENIAT y es por ello que allí registramos nuestra vivienda principal para asuntos de declaración de impuesto sobre la renta de cada año.
  • Todo lo relacionado con el ISLR en Venezuela, país petrolero, está íntimamente relacionado con empresas extranjeras en suelo patrio o de nuestros trabajadores en el exterior: por ello las tarifas y tratamientos son marcadamente diferenciados si se tratan de personas (naturales o jurídicas) residenciadas o no residenciadas en nuestro país, eso lo veremos en el Reglamento Parcial.
  • Para finalizar el somero estudio del Reglamento, se norma que cualquier reclamo en cuanto a errores de declaración del impuesto sobre la renta cada oficina regional del SENIAT será quienes diriman dichos asuntos, los cuales son variopintos.

Reglamento Parcial de la Ley De Impuesto Sobre La Renta en Materia de Retenciones.

Al final de esta entrada y como suplemento, próximamente, hallarán la transcripción de las Gacetas Oficiales lo cual haremos con ayuda del Tesseract OCR.

Artículo uno: sujetos obligados a retener.

Entrando en materia y al grano, son objeto de retenciones, básicamente:

  1. Ganancias fortuitas (loterías -juegos de azar- y caballos).
  2. Enajenación de acciones en la Bolsas de Valores.
  3. Sueldos y salarios (excluídos viáticos y alimentación).
  4. Honorarios Profesionales con las siguientes excepciones:
    • carpintería.
    • herrería.
    • latonería.
    • pintura.
    • mecánica.
    • electricidad.
    • albañilería.
    • plomería.
    • jardinería.
    • zapatería.
    • cualquier otro de naturaleza manual (…pues ¡ de haber comenzado por ahí ! ).
  5. Servicios cuando sean principales las obligaciones de hacer, excepto los siguientes:
    • suministro de agua.
    • electricidad.
    • gas.
    • telefonía fija o celular.
    • aseo domiciliario.
  6. Fletes en el territorio nacional.
  7. Primas de seguros y reaseguros.
  8. Cánones de Arrendamiento de bienes muebles e inmuebles.
  9. Intereses de Capitales.
  10. Comisiones de ventas de bienes muebles e inmuebles.
  11. Impuestos proporcionales.
  12. Rentas presuntas.
  13. Publicidad y Propaganda.

Artículo 21: plazos para enterar

En el caso número uno del artículo uno, se deben enterar (es decir, pagar al gobierno, al Tesoro Nacional) al día siguiente hábil de la retención (para poder pagar el premio se debe hacer primero la retención correspondiente).

En el caso número dos del artículo uno se deben enterar los siguientes tres días hábiles, esto es exclusivamente con las bolsas de valores.

Del tercer caso en adelante se hacen los tres primeros días hábiles del mes excepto si se es nombrado como “contribuyente especial” ya que tienen un calendario especial según el parágrafo único (nosotros ya hicimos una entrada al respecto por estos lares con respecto a retenciones de IVA y cuyo calendario coincide con lo del ISLR).

Artículos 2 al 8: retenciones de sueldos y salarios.

En el renglón tercero del artículo uno, lo correspondiente a retenciones de sueldos y salarios la materia es densa y delicada, por ello los remitimos a profesionales especializados que han hecho una guía práctica al respecto.

Artículo 9: tabla de retenciones.

Del renglón cuarto al séptimo son los más comunes, es por ello que nos enfocaremos más en esos casos.

Se debe prestar especial atención si la persona natural es residente o NO residente en nuestro país porque los porcentajes de retención que se aplican en el segundo caso son prácticamente los mismos establecidos en la declaración anual ISLR (34%), así que ojo con eso (igual sucede con las personas jurídicas domiciliadas). Hay un detalle en el artículo 3, parágrafo primero del Reglamento Parcial que estipula que si una persona natural demuestra que ha permanecido 180 días en el país (de manera contínua o no) se debe considerar RESIDENTE y se ha de tramitar un RIF de oficio con el SENIAT. Osea, el hecho de que tengan pasaporte no necesariamente es indicativo de que NO es residente, atención a esto.

 

Cuando aquí nombremos a “residentes” nos referimos a las “Personas Naturales Residentes en nuestro país”. Cuando acá nombremos a “domiciliadas”nos referimos a las “Personas Jurídica Domiciliadas en nuestro país”. Cuando escribimos “UT” nos referimos a “Unidad(es) Tributaria(s)”.

 

Los «beneficiarios de la remuneración» que son residentes tienen un porcentaje distinto de retención de la domiciliadas.

 

En el caso de los NO residentes y NO domiciliados los porcentajes de retención pueden ser varios debidos a los montos en función con cantidad de unidades tributarias. Por ejemplo especifican que hasta dos mil UT un 15%, desde dos mil hasta tres mil UT un 22% y para más de tres mil UT un 34%, Y ATENCIÓN si el pago OTRO EJEMPLO es por el equivalente a siete mil UT se debe retener 15% a las primeras 2000 UT, 22% a las próximas 1000 UT y 34% a las restantes 4000 UT. Es por ello que nuestra tabla de causales será un maestro y en otra tabla de detalles colocaremos los porcentajes de retención a todos los causales y con cada uno de sus condicionales en el caso de haber más de un procentaje de retención. OTRA COSA IMPORTANTE es que cada una de los “escalones” retenidos deberán ser informado al SENIAT en registros separados para cada monto (por supuesto, repitiendo los numeros de factura y los numeros de control para cada registro) POR ELLO DECIDIMOS REALIZAR PARA CADA REGISTRO UN NÚMERO DE COMPROBANTE DISTINTO E INDIVIDUALIZADO.

En el artículo 9°, parágrafo segundo, tuvieron un “gazapo”: en el monto mínimo de las retenciones a domiciliadas (cuando el porcentaje a retener es del 5% y 3%) COLOCARON LOS MONTOS DE MANERA ABSOLUTA (1250 y 750) , ES DECIR, NO EN FUNCIÓN DEL VALOR DE LA UNIDAD TRIBUTARIA. En 2007 se le aplicó, tal como establece la Ley de Reconversión Monetaria, estos montos quedaron en 1,25 (si el porcentaje de retención es del 5%) y 0,75 (idem 3%) LO QUE QUIERE DECIR, EN LA PRÁCTICA -Y DESDE HACE MUCHOS AÑOS- QUE SE RETIENE A TODO MONTO EN ESTOS CASOS (y se cumple con el espíritu del legislador ya que las retenciones con porcentaje del 3% y 1% es a todo monto por eso entrecomillamos la palarbra gazapo al principio de esta cita citable). ¡ATENCIÓN! La ley es la ley, así que cuando programamos debemos colocar este valor absoluto de 1,25 y 0,75, respectivamente en el código de nuestro programa, así signifique en la práctica que se retiene a todo monto a persona jurídica domiciliada en nuestro país.

Artículo 25: sistemas computarizados especiales.

Y ahora es que llegamos a la aparte de la programación, lo que se empeñan en llamar el “manual técnico”. En este artículo se establece, con visión de futuro, que el SENIAT (mejor dicho, la Administración Tributaria, cualquiera sea el nombre que tenga o tuviere en ese o este momento) colocará lineamientos generales o específicos y en este caso vaya que son bien específicos.

Todo deriva del manual vigente que a la fecha de escribir estas líneas tiene establecido el SENIAT en su Portal Fiscal. Lo primero que tenemos que aclarar es que vamos a generar un archivo en lenguaje XML que contendrá los datos de la retención pero que en realidad serán calculados por “los servidores web del SENIAT” y nos devolverá un valor con la suma de las retenciones. Nosotros lo vemos como un “doble ciego”: con el programa que hagamos calculamos y hacemos las retenciones oportunamente y su sumatoria ha de ser igual al cálculo -según los datos fidedignos que le enviemos- a los “servidores web” del SENIAT, ¿qué les parece?

Pero esperen, aún hay más: el propio SENIAT pone a nuestra disposición un XML con el que podemos comprobar los datos antes de enviarlos siempre y cuando tengamos un software confiable que realice dicha comprobación.

Es entonces que aparte del trabajo del XML y sus correspondientes tablas y campos en la base de datos, también debemos establecer otros datos que necesitaremos para cumplir con el artículo 24 que tratamos a continuación.

Artículo 24: de la obligatoriedad de entregar comprobantes de retención, entre otros datos.

Este artículo es el mejor de todos: los dos campos obligatorios son el monto de lo pagado y la cantidad retenida, tal cual. He aquí que se nos abre nuestra vena creativa siempre teniendo en cuenta las reglas de normalización de las bases de datos. Como abrebocas la tabla que contendrá al RIF:

  • El campo RIF, el cual será único según la ley respectiva, lo guardaremos en una tabla junto con un identificador autonumérico entero, indexado, y en otras tablas el resto de los datos de los “beneficiarios de la remuneración”.
  • Nombre o razón social en una tabla aparte, ya que los nombres de las empresas pueden cambiar con el tiempo y nuestros documentos deben ser fidedignos a como fueron impresos, esto se logra agregando un campo lógico verdadero/falso llamado “activo” y que será verdadero en el único caso del último cambio de razón social y válido para las nuevas retenciones; las anteriores retenciones van relacionadas con el nombre o razón social que tenían al momento de hacer el comprobante. También necesitaremos un campo autonumérico entero, indexado, para identificar el nombre o razón social que lleva el comprobante.
  • Dirección fiscal: igual al ítem anterior pero con algo añadido si la persona jurídica tiene sucursales, lo mejor es guardar cada dirección aparte para saber con quién “hicimos negocio” (de hecho las normas contables en una sucursal son las mismas como si fuera empresa independiente, la “pesadilla” es para los contadores y auditores que tienen que consolidar en la casa matríz o principal todos los días).
  • Teléfonos: pues los que sean necesarios, aunque no es un requisito de ley vaya que nos ahorramos problemas y malentendidos con una simple llamada telefónica.
  • Correo(s) electrónico(s): que a pesar que el ISLR ni sus reglamentos son obligatorios -a diferencia de las retenciones de IVA que si están claramente tipificadas el comprobante por vía electrónica- cumple el mismo papel de los números de teléfonos.
  • Cualesquiera de otros datos que consideremos necesarios: pues bien, creamos una tabla con el identificador numérico relacionado con la tabla que contiene los RIF, un identificador autonumérico entero, un campo lógico para indicar si está activo o no y el campo a guardar (fecha, texto, numérico, etc).

Manual técnico: descripción de los elementos del archivo.

Ya nos “apartamos” un poco del Reglamento Parcial y estamos de lleno con lo nuestro, la programación y los ordenadores. A diferencia de la sección anterior, artículo 24, el Manual Técnico ordena unos campos mínimos con características muy precisas que debemos colocarlas en nuestra base de datos sin más:

  1. RifAgente: <elemento raíz>, tipo cadena, 10 caracteres, primero una letra y luego dígitos que identifica al Agente de Retención.
  2. Periodo: <elemento raíz>, mes cuando se hizo la retención en el formato “AAAAMM” (año completo 4 dígitos y número de mes incluyendo cero a la izquierda de enero a septiembre ).
  3. RifRetenido: <elemento>, igual a (1) pero identifica al “beneficiario de la remuneración”.
  4. NumeroFactura: <elemento>, mínimo 1 caracter (cero si no es factura), máximo diez caracteres (los últimos 20 dígitos, de ser más largo el número de factura).
  5. NumeroControl: <elemento>, mínimo 1 caracter, máximo 10 (colocar “NA” si no es factura).
  6. FechaOperacion: <elemento>, campo fecha, que en el Manual Técnico NO APARECE porque fue a partir de septiembre de 2014 que lo implementaron para poder tomar el valor de la UT correcto (esto se requiere una vez al año, cuando aumenta la UT pero en teoría de programación -LEYES APARTE- serviría para cualquier aumento O MODIFICACIÓN del valor de la UT). Dicha fecha debe coincidir con el perído que se declara. No debemos confundir FechaOperacion con, por ejemplo, la fecha de una factura, son cosas distintas (entiéndase que es la fecha cuando hicimos el comprobante).  Para mayor información, descargar en el siguiente comunicado publicado el Portal Fiscal.
  7. CodigoConcepto: <elemento>, tabla tipificada por el SENIAT que analizaremos luego que consiste en dos dígitos (aunque acepta máximo tres caracteres ¿visión a futuro, números con mantisa o signo?).
  8. MontoOperación: <elemento>, el separador decimal es el punto con máximo dos posiciones decimales, el valor mínimo es cero, un caracter “0”.
  9. PorcentajeRetencion: <elemento>, mínimo cero, máximo cien, separador decimal el punto, dos posiciones decimales.

Para los sistemas informáticos del SENIAT no existen acentos ni caracteres especiales. Además, en el caso que permitan el separador decimal, éste siempre será el punto. Advertidos todos y todas.

Advertencia.
Advertencia.

En el Manual Técnico se asegura que es posible sumar y declarar todas las operaciones que tengan el mismo “CodigoConcepto” colocandole los datos  de una FACTURA CUALQUIERA (“NumeroFactura” y “NumeroControl”) DEL PERÍODO CORRESPONDIENTE, PERO EN LA PRÁCTICA NADIE HACE ESO debido a la sencilla razón de que uno, “el beneficiario de la remuneración” revisa por medio  de nuestra Clave de Usuario en el Portal Fiscal cada una de las retenciones, POR AQUELLOS DE QUE “CUENTAS CLARAS MANTIENEN AMISTADES (Y NEGOCIOS también)”.

 

Eso es lo que exige el SENIAT en los datos y campos a transferir pero para nuestro programa tenemos que agregar unos campos que consideramos necesarios ya que varían en el tiempo:

  • En una tabla aparte que llamaremos (¡qué original!) Unidad_Tributaria con un campo identificador autonumérico entero, valor monetario, fecha de inicio de vigencia, fecha de finalización (la unidad tributaria vigente finaliza el 31 de diciembre de 9999 nueve mil novecientos noventa y nueve y cambiará a un día antes de la fecha de entrada en vigencia de una nueva unidad tributaria -la cual generalmente cambia una vez al año en febrero-). Las restricciones de fecha son relativas  a otros registros, no en valores absolutos: la fecha de inicio de vigencia no podrá ser menor que la mayor fecha de inicio registrada y en cascada para la fecha de finalización.
  • Otra tabla llamada Unidad_Tributaria_Gaceta contendrá información tales como número, fecha y tipo de Gaceta Oficial donde se decretó el valor de la unidad tributaria y otra tabla llamada Unidad_Tributaria_Gaceta_Enlaces con las posibles direcciones web de donde descargar u obtener más información al respecto. Estas tablas puede esperar, no las definiremos ahora, no en esta entrada.

Diseñando la base de datos en MySQL y phpMyAdmin.

La base de datos que vamos a crear la llamaremos (pecando de originales) “ks7000_ks7000” con un ordenamiento de caracteres utf8_spanish_ci (ordena la eñe entre la ene y la letra o, y la che es una letra entre ce y de e igual la doble ele). El almacenamiento InnoDB (y en otra entrada hablaremos de MySQL con calma). Como comentario le colocaremos “Valores de la Unidad Tributaria a lo largo de los años”, veamos:

1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE `Unidad_Tributaria` (
`UT_id` INT(10) UNSIGNED NOT NULL,
`UT_val` DECIMAL(10,0) NOT NULL DEFAULT '0',
`UT_fec_ini` DATE NOT NULL DEFAULT '1994-01-01',
`UT_fec_fin` DATE NOT NULL DEFAULT '9999-12-31'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci COMMENT='Valores de la Unidad Tributaria a lo largo de los años.';

ALTER TABLE `Unidad_Tributaria`
ADD PRIMARY KEY (`UT_id`);

ALTER TABLE `Unidad_Tributaria`
MODIFY `UT_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;

Volviendo al tema de los comprobantes de retención del ISRL, necesitamos el valor de la Unidad Tributaria actual para poder realizar el cálculo de la retención. Según el Manual Técnico, TODOS los datos son obligatorios y puede darse el caso que una “retención” no tenga monto, es decir, debido al monto de la remuneración no procede ningún monto a retener más sin embargo debemos informarle esto al SENIAT quienes de nuevo harán al cálculo para certificar que esto es cierto. Esto es análogo al caso de las retenciones de IVA y la caja chica pero éstas (facturas de caja chica) no debemos reportarlas en el txt a “subir” al SENIAT.

Atención: recordemos que los trabajos por labores manuales (carpintería, herrería, etc.) al igual que los servicios de agua, telefonía, etcétera, NO llevan retención ISLR alguna. NO LOS INCLUIREMOS EN EL XML (más si le haremos su respectiva retención de IVA si su monto es más de 20 UT).

Hemos visto el caso de empresas que retienen ISLR indebidamente (¡ups!), pues nada se le reintegra al “beneficiario de la remuneración” acompañado de una disculpa e incluso hay casos que expresan que le hagan una nota de crédito (nada que ver con IVA ni formas libres ni impresoras fiscales) en el estado de cuenta (CxP) para la próxima vez que cobren otro “trabajo”, que no sabemos cuando será pero eventualmente se producirá; así da gusto trabajar con la gente, que tomen las cosas con calma.

Creando la tabla que alojará los comprobantes de retención.

Dicha tabla la llamaremos de manera muy explícita ISLR_retenciones y contendrá los campos que anuncia el Manual Técnico y, según nuestro criterio, de manera adicional los siguientes campos:

  • ISLR_idNumeroComprobante: autonumérico, entero, indexado; como para cada documento hay una sola retención ISLR (a diferencia de las retenciones de IVA) este autonumérico puede funcionar como número de comprobante y al SENIAT le importa un pepino esto, ya que para ellos no es obligatorio sin embargo nosotros, maniáticos del orden y decoro es necesario para nosotros.
  • ISLR_UnidadTributariaValor: el valor en sí de la UT para nuestros memorias (los servidores web del SENIAT simplemente aplican el valor vigente de la UT a la fecha según el campo FechaOperacion y hacen el cálculo ¿Ven ahora por qué debemos llevar aparte en una tabla los valores históricos de la UT?). Como es un valor preferimos colocarlo, pero miren el próximo campo.
  • ISLR_idUnidadTributariaValor: aquí si podemos normalizar para los detalles que dijimos, número de Gaceta Oficial, enlaces web, etc.

Creando la tabla que alojará los causales de retención.

Estos causales están basados en el Manual Técnico sin embargo no es suficiente para nuestros usuarios de software, aquellos quienes pagan nuestras habilidades de programación.

Nuestra genialidad estriba en desarrollar software para que nuestros usuarios escojan rápidamente y de acuerdo a las restricciones los llevamos a un solo resultado, la realización de la retención. Es así que nuestros usuarios expresarán “¡QUÉ FÁCIL Y SENCILLO ES HACER RETENCIONES DE ISLR!”.

Como ya habíamos adelantado, tenemos una tabla maestra que llamaremos ISLR_RetencionesCausales:

  • idCausal: campo autonumérico para identificar cada causal.
  • El segundo campo lo llamaremos “Codigo” tipo CHAR de 4 caracteres que utilizaremos para especificar nuestros propios causales (que no generan ni retencion -ni su declaración informativa- de ISRL) a partir de mil en potencias de base dos (1002, 1004, 1008, etcétera) y para menores de mil los especificados en el Manual Técnico.
  • El segundo campo lo llamaremos “Actividad” y lo rellenaremos tal como lo describen en el Manual Técnico. Para nuestros causales mayores en código a mil le colocaremos “NA” tal como estila el Manual Técnico cuando “No Aplica”.
  • BaseExenta: monto a partir del cual podremos retener, puede ser un monto específico o un monto calculado dependiente de el valor de la Unidad Tributaria y una constante cuyo valor es 83,3334. Deberemos, a futuro, colocar un disparador cuando se agregue un registro (nuevo valor) de la Unidad Tributaria para recalcular dichos montos que dependan de la fórmula (ver siguiente campo). Si el valor es cero entonces es todo pago.
  • BaseExentaFormula: sirve para indicar si BaseExenta depende de una fórmula que debamos aplicar si se agrega un nuevo valor de la Unidad TRibutaria, por defecto cero, falso.
  • Sustraendo: es un monto que depende siempre de una fórmula, misma consideración que con BaseExenta pero no necesita un campo lógico adicional, el disparador actualizará automáticamente -según fórmula, UT multiplicada por el procentaje de retención y el resultado multiplicado por la constante de ley 83,3334.
  • BaseImponible: algunos causales especifican que NO es todo el monto al cual vamos a retener sino un porcentaje o del mismo al cual luego le aplicaremos el procentaje correspondiente de retención, esto es para no residente o no domiciliados, que son casos que consideramos “especiales”.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE TABLE `ISLR_RetencionesCausales` (
`idCausal` INT(11) NOT NULL,
`Codigo` CHAR(4) COLLATE utf8_spanish_ci NOT NULL DEFAULT '0000',
`Actividad` VARCHAR(255) COLLATE utf8_spanish_ci NOT NULL DEFAULT 'NA' COMMENT 'Así lo llama el Manual Técnico.',
`BaseExenta` DECIMAL(10,0) NOT NULL DEFAULT '0' COMMENT 'Monto mínimo para hacer retención ya sea valor o fórmula UT*83,3334',
`BaseExentaFormula` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Si BaseExenta depende de fórmula',
`Sustraendo` DECIMAL(10,0) NOT NULL DEFAULT '0' COMMENT 'Valor según fórmula UT*%ret*83,3334',
`BaseImponible` DECIMAL(10,0) NOT NULL DEFAULT '100' COMMENT 'Porcentaje del monto al cual aplicarle procentaje de retención'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

ALTER TABLE `ISLR_RetencionesCausales`
ADD PRIMARY KEY (`idCausal`),
ADD KEY `Codigo` (`Codigo`);

ALTER TABLE `ISLR_RetencionesCausales`
MODIFY `idCausal` INT(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;

La acompañaremos de una tabla con los detalles de los porcentajes de retención y la llamaremos  ISLR_RetencionesPorcentajes:

  • idCausal: entero, que está relacionado con IdCausal de la tabla anterior.
  • Porcentaje: decimal, explícito.
  • Monto: en el caso que explicamos (no domiciliada) que se debe retener “en escalones” según las unidades tributarias pero colocamos aquí el monto “de una vez” y con el disparador al agregar un valor de la UT se multipilicará ese nuevo valor por el próximo campo NumeroUT.
  • NumeroUT: ver renglón anterior.
  • Ordinal: lo tendremos en cuenta para retribuir en el orden correcto de la base de datos los “escalones” a los cuales les haremos retenciones. Este campo cambia si y solo si modifican el Reglamento Parcial.

Rellenando los causales de retención.

 

Descripción completa de los causales de retención, según Manual Técnico.

Decidimos compartir con todos los venezolanos y venezolanas (y unos cuantos extranjeros tal vez les sea útil esta información) por medio de un repositorio en GitHub de manera pública en este enlace web. Lo publicamos en dos formatos diferentes, en lenguaje SQL y en XML, no obstante acá publicamos también ambos códigos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
-- phpMyAdmin SQL Dump
-- version 4.5.4.1deb2ubuntu2
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tiempo de generación: 24-06-2017 a las 16:14:24
-- Versión del servidor: 5.7.18-0ubuntu0.16.04.1
-- Versión de PHP: 7.0.18-0ubuntu0.16.04.1
-- Creado por: Jimmy Olano
-- Correo-e: olano@ks7000.net.ve
-- Códigos por concepto de retención de Impuesto Sobre La Renta
-- según Manual técnico SENIAT N° 60.40.40.039, Versión 2.3, enero 2017,
-- disponible en el Portal Fiscal en formato pdf en el siguiente enlace web:
-- http://declaraciones.seniat.gob.ve/portal/page/portal/MANEJADOR_CONTENIDO_SENIAT/05MENU_HORIZONTAL/5.3ANUNCIOS_CARTELES/5.3.2CARTELES_NOTIFICACION/CARTELES/MT_Retenciones%20ISLRV3.0_2014.pdf
-- Según artículo 25 del Reglamento Parcial de la Ley De Impuesto Sobre La Renta
-- en Materia de Retenciones publicado en la Gaceta Oficial N° 36.203,
-- de fecha lunes 12 de mayo de 1997.
--
-- Usted es libre de usar y/o distribuir esta información
-- según la siguiente licencia:
-- https://creativecommons.org/licenses/by-sa/3.0/ve/

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "-04:00";

&nbsp;

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Base de datos: `seniat-islr`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `seniat_codigo_concepto_retencion_islr`
--

CREATE TABLE `seniat_codigo_concepto_retencion_islr` (
`codigo` tinyint(4) NOT NULL,
`concepto` VARCHAR(1024) COLLATE utf8_spanish_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci COMMENT='Manual técnico SENIAT N° 60.40.40.039 Versión 2.3 enero 2017';

--
-- Volcado de datos para la tabla `seniat_codigo_concepto_retencion_islr`
--

INSERT INTO `seniat_codigo_concepto_retencion_islr` (`codigo`, `concepto`) VALUES
(1, 'Sueldos y Salarios'),
(2, 'Honorarios Profesionales No Mercantiles (PNR)'),
(3, 'Honorarios Profesionales No Mercantiles (PNNR)'),
(4, 'Honorarios Profesionales No Mercantiles (PJD)'),
(5, 'Honorarios Profesionales No Mercantiles (PJND)'),
(6, 'Honorarios Profesionales Mancomunados No Mercantiles(PNR)'),
(7, 'Honorarios Profesionales Mancomunados No Mercantiles(PNNR)'),
(8, 'Honorarios Profesionales Mancomunados No Mercantiles(PJD)'),
(9, 'Honorarios Profesionales Mancomunados No Mercantiles(PJND)'),
(10, 'Honorarios Profesionales pagados a Jinetes,Veterinarios, Preparadores o Entrenadores (PNR)'),
(11, 'Honorarios Profesionales pagados a Jinetes, Veterinarios, Preparadores o Entrenadores (PNNR)'),
(12, 'Honorarios Profesionales pagados por Clínicas, Hospitales, Centros de Salud, Bufetes, Escritorios, Oficinas, Colegios Profesionales u otra Institución Profesionales No Mercantiles a Profesionales sin relación de dependencia (PNR)'),
(13, 'Honorarios Profesionales pagados por Clínicas, Hospitales, Centros de Salud, Bufetes, Escritorios, Oficinas, Colegios Profesionales u otra Institución Profesionales No Mercantiles a Profesionales sin relación de dependencia (PNNR)'),
(14, 'Comisiones pagadas por la venta de bienes inmuebles (PNR)'),
(15, 'Comisiones pagadas por la venta de bienes inmuebles (PNNR)'),
(16, 'Comisiones pagadas por la venta de bienes inmuebles (PJD)'),
(17, 'Comisiones pagadas por la venta de bienes inmuebles (PJND)'),
(18, 'Cualquier otra Comisión distintas a Remuneraciones accesorias de los sueldos, salarios y demás remuneraciones similares (PNR)'),
(19, 'Cualquier otra Comisión distintas a Remuneraciones accesorias de los sueldos, salarios y demás remuneraciones similares (PNNR)'),
(20, 'Cualquier otra Comisión distintas a Remuneraciones accesorias de los sueldos, salarios y demás remuneraciones similares (PJD)'),
(21, 'Cualquier otra Comisión distintas a Remuneraciones accesorias de los sueldos, salarios y demás remuneraciones similares (PJND)'),
(22, 'Intereses de Capitales tomados en préstamo e invertidos en la producción de la renta (PNNR)'),
(23, 'Intereses de Capitales tomados en préstamo e invertidos en la producción de la renta (PJND)'),
(24, 'Intereses provenientes de préstamos y otros créditos pagaderos a instituciones financieras constituidas en el exterior y no domiciliadas en el país (PJND)'),
(25, 'Intereses pagados por las personas jurídicas o comunidades a cualquier otra persona natural, jurídica o comunidad (PNR)'),
(26, 'Intereses pagados por las personas jurídicas o comunidades a cualquier otra persona natural, jurídica o comunidad (PNNR)'),
(27, 'Intereses pagados por las personas jurídicas o comunidades a cualquier otra persona natural, jurídica o comunidad (PJD)'),
(28, 'Intereses pagados por las personas jurídicas o comunidades a cualquier otra persona natural, jurídica o comunidad (PJND)'),
(29, 'Enriquecimientos Netos de las Agencias Internacionales cuando el pagador sea una personas jurídica o comunidad domiciliada en el país (PJND)'),
(30, 'Enriquecimientos Netos de Gastos de Transporte conformados por fletes pagados a agencias o empresas de transporte internacional constituidas y domiciliadas en el exterior (PNNR)'),
(31, 'Enriquecimientos Netos de Gastos de Transporte conformados por fletes pagados a agencias o empresas de transporte internacional constituidas y domiciliadas en el exterior (PJND)'),
(32, 'Enriquecimientos Netos de Exhibición de Películas, Cine o la Televisión (PNNR)'),
(33, 'Enriquecimientos Netos de Exhibición de Películas, Cine o la Televisión (PJND)'),
(34, 'Enriquecimientos obtenidos por concepto de regalías y demás participaciones análogas (PNNR)'),
(35, 'Enriquecimientos obtenidos por concepto de regalías y demás participaciones análogas (PJND)'),
(36, 'Enriquecimientos obtenidos por las Remuneraciones, Honorarios y pagos análogos por Asistencia Técnica (PNNR)'),
(37, 'Enriquecimientos obtenidos por las Remuneraciones, Honorarios y pagos análogos por Asistencia Técnica (PJND)'),
(38, 'Enriquecimientos obtenidos por Servicios Tecnológicos utilizados en el país o cedidos a Terceros (PNNR)'),
(39, 'Enriquecimientos obtenidos por Servicios Tecnológicos utilizados en el país o cedidos a Terceros (PJND)'),
(40, 'Enriquecimientos Netos derivados de las Primas de Seguros y Reaseguros (PJND)'),
(41, 'Ganancias Obtenidas por Juegos y Apuestas (PNR)'),
(42, 'Ganancias Obtenidas por Juegos y Apuestas (PNNR)'),
(43, 'Ganancias Obtenidas por Juegos y Apuestas (PJD)'),
(44, 'Ganancias Obtenidas por Juegos y Apuestas (PJND)'),
(45, 'Ganancias Obtenidas por Premios de Loterías y de Hipódromos (PNR)'),
(46, 'Ganancias Obtenidas por Premios de Loterías y de Hipódromos (PNNR)'),
(47, 'Ganancias Obtenidas por Premios de Loterías y de Hipódromos (PJD)'),
(48, 'Ganancias Obtenidas por Premios de Loterías y de Hipódromos (PJND)'),
(49, 'Pagos a Propietarios de Animales de Carrera por concepto de Premios (PNR)'),
(50, 'Pagos a Propietarios de Animales de Carrera por concepto de Premios (PNNR)'),
(51, 'Pagos a Propietarios de Animales de Carrera porconcepto de Premios (PJD)'),
(52, 'Pagos a Propietarios de Animales de Carrera por concepto de Premios (PJND)'),
(53, 'Pagos a Empresas Contratistas o Subcontratistas domiciliadas o no en el país, por la ejecución de obras o de la prestación de servicios en base a valuaciones y ordenes de pago (PNR)'),
(54, 'Pagos a Empresas Contratistas o Subcontratistas domiciliadas o no en el país, por la ejecución de obras o de la prestación de servicios en base a valuaciones y ordenes de pago (PNNR)'),
(55, 'Pagos a Empresas Contratistas o Subcontratistas domiciliadas o no en el país, por la ejecución de obras o de la prestación de servicios en base a valuaciones y ordenes de pago (PJD)'),
(56, 'Pagos a Empresas Contratistas o Subcontratistas domiciliadas o no en el país, por la ejecución de obras o de la prestación de servicios en base a valuaciones y ordenes de pago (PJND)'),
(57, 'Pagos a los Arrendadores de los bienes inmuebles a los Arrendadores de los bienes inmuebles situados en el país (PNR)'),
(58, 'Pagos a los Arrendadores de los bienes inmuebles a los Arrendadores de los bienes inmuebles situados en el país (PNNR)'),
(59, 'Pagos a los Arrendadores de los bienes inmuebles a los Arrendadores de los bienes inmuebles situados en el país (PJD)'),
(60, 'Pagos a los Arrendadores de los bienes inmuebles a los Arrendadores de los bienes inmuebles situados en el país (PJND)'),
(61, 'Cánones de Arrendamientos de Bienes Muebles situados en el país (PNR)'),
(62, 'Cánones de Arrendamientos de Bienes Muebles situados en el país (PNNR)'),
(63, 'Cánones de Arrendamientos de Bienes Muebles situados en el país (PJD)'),
(64, 'Cánones de Arrendamientos de Bienes Muebles situados en el país (PJND)'),
(65, 'Pagos de las Empresas Emisoras de Tarjetas de Crédito o Consumo por la Venta de Bienes y servicios, o cualquier otro concepto (PNR)'),
(66, 'Pagos de las Empresas Emisoras de Tarjetas de Crédito o Consumo por la Venta de Bienes y servicios, o cualquier otro concepto (PNNR)'),
(67, 'Pagos de las Empresas Emisoras de Tarjetas de Crédito o Consumo por la Venta de Bienes y servicios, o cualquier otro concepto (PJD)'),
(68, 'Pagos de las Empresas Emisoras de Tarjetas de Crédito o Consumo por la Venta de Bienes y servicios, o cualquier otro concepto (PJND)'),
(69, 'Pagos de las Empresas Emisoras de Tarjetas de Crédito por la venta de gasolina en las Estaciones de Servicios (PNR)'),
(70, 'Pagos de las Empresas Emisoras de Tarjetas de Crédito por la venta de gasolina en las Estaciones de Servicios (PJD)'),
(71, 'Pagos por Gastos de Transporte conformados por Fletes (PNR)'),
(72, 'Pagos por Gastos de Transporte conformados por Fletes (PJD)'),
(73, 'Pagos de las Empresas de Seguro, las Sociedades de Corretaje de Seguros y las Empresas de Reaseguros por las Prestaciones de Servicios que le son propios (PNR'),
(74, 'Pagos de las Empresas de Seguro, las Sociedades de Corretaje de Seguros y las Empresas de Reaseguros por las Prestaciones de Servicios que le son propios (PJD)'),
(75, 'Pagos de las Empresas de Seguro a sus Contratistas por la Reparación de Daños sufridos de sus Asegurados (PNR)'),
(76, 'Pagos de las Empresas de Seguro a sus Contratistas por la Reparación de Daños sufridos de sus Asegurados (PJD)'),
(77, 'Pagos de las Empresas de Seguros a Clínicas, Hospitales y/o Centros de Salud por la Atención Medica a sus Asegurados (PNR)'),
(78, 'Pagos de las Empresas de Seguros a Clínicas, Hospitales y/o Centros de Salud por la Atención Medica a sus Asegurados (PJD)'),
(79, 'Cantidades que se paguen por adquisición de Fondos de Comercio situados en el país (PNR)'),
(80, 'Cantidades que se paguen por adquisición de Fondos de Comercio situados en el país (PNNR)'),
(81, 'Cantidades que se paguen por adquisición de Fondos de Comercio situados en el país (PJD'),
(82, 'Cantidades que se paguen por adquisición de Fondos de Comercio situados en el país (PJND)'),
(83, 'Pagos por Servicios de Publicidad y Propaganda y la Cesión de la Venta de Espacios para tales fines (PNR)'),
(84, 'Pagos por Servicios de Publicidad y Propaganda y la Cesión de la Venta de Espacios para tales fines (PJD)'),
(85, 'Pagos por Servicios de Publicidad y Propaganda y la Cesión de la Venta de Espacios para tales fines (PJND)'),
(86, 'Pagos por Servicios de Publicidad y Propaganda y la Cesión de la Venta de Espacios para tales fines a Emisoras de Radio (PJD)');

--
-- Índices para tablas volcadas
--

--
-- Indices de la tabla `seniat_codigo_concepto_retencion_islr`
--
ALTER TABLE `seniat_codigo_concepto_retencion_islr`
ADD PRIMARY KEY (`codigo`);

--
-- AUTO_INCREMENT de las tablas volcadas
--

--
-- AUTO_INCREMENT de la tabla `seniat_codigo_concepto_retencion_islr`
--
ALTER TABLE `seniat_codigo_concepto_retencion_islr`
MODIFY `codigo` tinyint(4) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=87;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

&nbsp;

Una vez hallamos creado esta tabla en nuestra base de datos nos valemos de dos archivos para conectar a ella y obtener mediante el identificador único de cada causal. Nosotros utilizamos una variable numérica autoincrementada, pero bien sabemos que los verdaderos causales son tipo cadena con ceros a la izquierda como relleno hasta completar una longitud de tres caracteres, así que recuerden hacer una función que realizar este ajuste de número a cadena de texto(y viceversa para consultar la base de datos, de cadena de texto a número).

El archivo principal que va a recibir una consulta tipo GET es el siguiente:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
&lt;?php
  if ( $_GET['causal'] !='' )
   {
   // conectar($servidor , $usuario, $contra, $basedato) ¡usen sus propios valores!
   include("seniat-islr-conectar.php");
   $link=conectar( "localhost", $usuario, $contra, "ks7000ne_seniat-islr");

   if ( $_GET['causal'] !='' )
   {
   // conectar($servidor , $usuario, $contra, $basedato) ¡usen sus propios valores!
   include("seniat-islr-conectar.php");
   $link=conectar( "localhost", $usuario, $contra, "ks7000ne_seniat-islr");

   if ( !$link )
     {
       echo "ERROR Fallo la funcion conectar(ks7000ne_seniat).&lt;br&gt;";
     }

   if ( $link )
     {
       $sql = "SELECT * FROM `seniat_codigo_concepto_retencion_islr` WHERE `codigo` = ".$_GET['causal'].";";
       $result = mysql_query($sql, $link);

   if (!$result)
     {
       echo "ERROR Fallo la consulta de datos.&lt;br&gt;";
     }

   if ($result)
     {
       while($row = mysql_fetch_array($result))
         {
           printf(" %s ", $row['concepto'] );
         }
      mysql_free_result($result);
      mysql_close($link);
      }
    }
  }
?&gt;

Nos valemos de la siguiente función para conectar a la base de datos (nos gusta obtener siempre un mensaje para saber donde ocurre una excepción, de haberla):


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
&lt;?php
 function conectar($servidor , $usuario, $contra, $basedato){
   if (!($link=mysql_connect($servidor, $usuario, $contra)))
     {
       echo "Error conectando a la base de datos.&lt;br&gt;";
       return 0;
       //exit();
     }
   if (!($seleccion=mysql_select_db( $basedato, $link)))
     {
       echo "Error seleccionando la base de datos.&lt;br&gt;";
       return 0;
       //exit();
     }
   return $link;
   }
 ?&gt;

Así podemos consultar, por ejemplo, el código 77, de esta manera, prueben:

http://www.ks7000.net.ve/wp-content/uploads/2017/06/seniat-islr.php?causal=77

Seguimos

 

Fuentes consultadas (todas en castellano).

Copias de documentos almacenados en esta vuestra página web.

El RIF en Venezuela (Registro de Información Fiscal).

Registro de Información Fiscal ( RIF ): su historia en Venezuela.

Sobre el RIF me contaba una fallecida Contadora Pública (que en paz descanse+) con la cual tuve la feliz oportunidad de trabajar, que en los años 70 cuando ella estudiaba en la Universidad de Carabobo ya en clases calculaban el dígito verificador (que viene a ser similar a los códigos de barra), sólo que en aquella época las computadoras NO estaban al alcance del pueblo (ni siquiera las calculadoras electrónicas -oh cómo recuerdo mi querida Casio A1, ¡si A1! funcionaba con una sola pila doble A de pantalla verde-) y ellos/ellas lo hacían manualmente. En fin, que yo conocía lo del RIF desde los años 80 pero desconocía lo del cálculo del dígito verificador hasta que ella me lo dijo:

SIR RIF 07
SIR RIF 07

Al principio de este siglo me dí a la tarea de buscar dicha fórmula y conseguí el siguiente algoritmo escrito en javascript, desconozco su autoría pero es el que he venido utilizando esta última década (más adelante explicaré cómo funciona):

function VerifRIF(RIF)
{
//
// Función JavaScript VerifRIF Versión 1, 18/Marzo/2002
// Recibe el Numero de RIF sin separadores y devuelve
// True si el RIF es correcto
//
var SumRIF;
var NumRif;
NumRif = RIF
var cadena = new Array();
if (NumRif.length == 10)
{
for (i = 0; i < 10; i++)
{
cadena[i] = NumRif.substr(i,1);
}
cadena[0] = 0;
if ((NumRif.substr(0,1) == "V")||(NumRif.substr(0,1) == "v")) cadena[0] = 1
if ((NumRif.substr(0,1) == "E")||(NumRif.substr(0,1) =="e")) cadena[0] = 2
if ((NumRif.substr(0,1) == "J")||(NumRif.substr(0,1) == "j")) cadena[0] = 3
if ((NumRif.substr(0,1) == "P")||(NumRif.substr(0,1) == "p")) cadena[0] = 4
if ((NumRif.substr(0,1) == "G")||(NumRif.substr(0,1) == "g")) cadena[0] = 5
cadena[0] = cadena[0] * 4
cadena[1] = cadena[1] * 3
cadena[2] = cadena[2] * 2
cadena[3] = cadena[3] * 7
cadena[4] = cadena[4] * 6
cadena[5] = cadena[5] * 5
cadena[6] = cadena[6] * 4
cadena[7] = cadena[7] * 3
cadena[8] = cadena[8] * 2
SumRIF = cadena[0] + cadena[1] + cadena[2] + cadena[3] +
cadena[4] + cadena[5] + cadena[6] + cadena[7] + cadena[8];
EntRIF = parseInt(SumRIF/11);
Residuo = SumRIF - (EntRIF * 11)
DigiVal = 11 - Residuo;
if (DigiVal > 9)
DigiVal = 0;
if (DigiVal == cadena[9])
return true;
else
return false;
}
else return false;
}

Yo obtuve mi RIF en 1998 (acompañado de un NIT) y escribo estas lineas porque ME SORPRENDO al leer por los buscadores de internet que primero fue el NIT (Número de Identificación Tributaria) y que luego fue en el 2006 que CREARON el RIF lo cual considero una información errada. He buscado por GOOGLE  y obtuve la información de cuando se eliminó el NIT e inclusive cuándo se creó el RIF en este siglo (Gaceta Oficial N° 38.389 del jueves 2 de marzo de 2006) y creo que le volví a agarrar una que este popular buscador no se sabe:

SIR RIF 07
SIR RIF 07

Es así ahora  que recuerdo, con ayuda de mi envejecido y primer comprobante de RIF que fue el Decreto N° 193 del 2 de julio de 1979 (la cual pueden descargar desde la Procuraduría General de la República Bolivariana  o desde nuestro sitio web -gracias a “pdfsam” son tres hojas de la Gaceta ) y bajo la Presidencia de Luis Herrera Campíns cuando se estableció de manera obligatoria dicho registro y era muy amplios los datos que debía contener:

n) Cualquier otra información que requiera la Administración del Impuesto Sobre la Renta.

¡hasta exigían apartado postal! (que para la época fungía como suerte de correo electrónico). Interesante es el artículo 10 el cual ya establecía exhibir el RIF y dejar constancia en las facturas que emitieran ¡no fue sino hasta 1994 que el Presidente Rafael Caldera mandó a crear al SENIAT y muchos años después que emitieron normas de facturación e incluyeron ese punto!

Al final del decreto se aclara que quedan derogados los decretos: N° 2.920 del 24 de octubre de 1978 (creación original del RIF) y el decreto N° 3.102 del 23 de febrero de 1979 (prorrogación de entrada en vigencia del mismo). La diferencia fundamental entre ambos decretos (N° 2.920 y N° 193 -diferentes presidentes de la República, Carlos Andrés Pérez y Luis Herrera Campíns-) estriba en que originalmente sólo se les exigía inscribirse a quienes o cuales hubieran obtenido enriquecimiento neto anual -a partir de 1977- mayor a Bs. 24 mil o “ingresoss” (sic) brutos mayor a Bs. 72 mil anual. En el Decreto de Luis Herrera se obliga a todo el mundo a inscribirse y dado el caso la persona o entidad manifestare que no está obligada a hacerlo (artículo 11, parágrafo único), le dieran igual curso a los trámites que a bien tuvieran que hacer ante el Gobierno pero debía ser reportado en paralelo al Ministerio de Hacienda. En ambos decretos (artículo 7) se establecen los famosos “operativos de RIF” que se ejecutan desde la Presidencia de Hugo Rafael Chávez Frías e indican que se extenderá un comprobante provisional y luego de 3 meses emitirán el comprobante definitivo (imagino que debido a la tecnología de la época: yo, por ejemplo, hacía mis trabajos del liceo en una viejísima máquina de escribir que mi tío desechó de una de sus oficinas la cual yo reparé y ajustaba constantemente). Al día de hoy uno mismo llena los datos por primera vez por internet (basado en el número de cédula en las personas naturales y el tomo y registro en las personas jurídicas) para luego ir en persona a la sede más cercana del SENIAT donde le emiten de una vez el RIF ELECTRÓNICO (en este blog explican de manera más detallada el proceso) luego las renovaciónes se hacen vía web sin necesidad de acudir a las oficinas del SENIAT. Dicho proceso ha logrado reducir en 60% las colas en esa institución .

El RIF DIGITAL tal como lo conocemos hoy en día fue creado en la Gaceta Oficial N° 40.214 del jueves 25 de julio de 2013 y entre otras novedades establece 3 códigos de seguridad para evitar su falsificación así como un servicio en línea por internet para comprobar su veracidad con ayuda de un código QR para ahorrar tiempo evitando escribir la dirección en la computadora o teléfono celular.

Es de hacer notar que en este último decreto se exceptúan de la obligatoriedad de inscripción a los menores de edad (siempre y cuando no posean bienes ni realicen actividades económicas) así como exhibir, reflejar y colocar en productos, publicidad, páginas web (internet), libros contables, facturas, etc. También anuncia la extinción definitiva de la forma “SIR RIF 07” con la cual yo obtuve mi primer comprobante de RIF en 1998.

Los puntos más resaltante del RIF DIGITAL es que se denomina ahora “REGISTRO ÚNICO DE INFORMACIÓN FISCAL” (artículo 4 providencia N° SNAT/2013/0048) y especifica que es “…único, exclusivo y excluyente…” y en el artículo 7 se establece la condición “activo o inactivo” (lo cual pienso yo es reflejo del uso de bases de datos por ordenadores) bajo ciertas condiciones (muerte de persona natural, por ejemplo).

Volviendo al artículo 4 podemos observar la necesidad de identificar con correspondencia unívoca las personas naturales o jurídicas a un código alfanumérico.

He aquí entonces que volvemos a la fórmula del “número de chequeo” (así lo llamaba el SENIAT en 1998) y procedo a explicar el código arriba mostrado:

  • Declaración de variables y una matriz para luego almacenar cada letra y dígito, lo que se le pasa a la función en la variable “RIF” se almacena en otra variable llamada “NumRif”:
var SumRIF;
var NumRif;
NumRif = RIF
var cadena = new Array();
  • Importante: el RIF a verificar debe tener exactamente 10 caracteres, si no la función devuelve FALSO:
if (NumRif.length == 10)
  • Cada uno de los caracteres se almacena en la matriz declarada al principo, importante asignar cero a “cadena[0]” ya que si el primer caracter NO es ninguno de los ya normalizados el cálculo mediante fórmula no coincidará con el dígito verificador:
for (i = 0; i < 10; i++)
{
cadena[i] = NumRif.substr(i,1);
}
cadena[0] = 0;

El primer caracter del RIF debe ser alguno de los siguientes:

  • “V”: Venezolano o venezolana.
  • “E”: extranjero o extranjera (número de cédula mayor a 80 millones).
  • “P”: Pasaporte, por ejemplo es útil para los cantantes que se presentan en nuestro país y que hay que retenerles Impuesto sobre la renta.
  • “J”: Persona jurídica, osea, compañías anónimas, sociedades anónimas, S.R.L., etc.
  • “G”: Gobierno, entes gubernamentales, de cualquier Poder, estado, municipio e incluso organismos “autónomos” (ejemplo Universidad de Carabobo RIF G-20000041-4).

 

A futuro es importante considerar lo siguiente:

  • ACTUALIZACIÓN AL 25 DE MARZO DE 2015: el Presidente de la República Nicolás Maduro Moros ordenó al SENIAT identificar a las Comunas y Consejos Comunales (imagino yo que será extensivo a las Cooperativas, pienso yo PERO el Presidente no las nombró, esto es idea mía) con la letra “C” las cuales antes se venían registrando con la letra “J”.

  • Dependiendo del primer caracter se le asigna el valor a “cadena[0]” según lo siguiente:
if ((NumRif.substr(0,1) == "V")||(NumRif.substr(0,1) == "v")) cadena[0] = 1
if ((NumRif.substr(0,1) == "E")||(NumRif.substr(0,1) =="e")) cadena[0] = 2
if ((NumRif.substr(0,1) == "J")||(NumRif.substr(0,1) == "j")) cadena[0] = 3
if ((NumRif.substr(0,1) == "P")||(NumRif.substr(0,1) == "p")) cadena[0] = 4
if ((NumRif.substr(0,1) == "G")||(NumRif.substr(0,1) == "g")) cadena[0] = 5
  • IMAGINO YO que los RIF que comienze por la letra “C” se les asignará el siguiente valor disponible, el seis (ES UNA SUPOSICIÓN MÍA, SE DEBE ESPERAR EL PRONUNCIAMIENTO OFICIAL DEL SENIAT):
if ((NumRif.substr(0,1) == "C")||(NumRif.substr(0,1) == "c")) cadena[0] = 6
  • Luego ese valor asignado a “cadena[0]” se multiplica por 4, los demás caracteres que deben ser números se multiplican por los siguientes valores correspondientes (importante acotar que esta función le falta discriminar si en realidad son números lo que introduce el usuario en la variable “RIF”  de lo contrario asigna cero y el cálculo no dará correctamente):
cadena[0] = cadena[0] * 4
cadena[1] = cadena[1] * 3
cadena[2] = cadena[2] * 2
cadena[3] = cadena[3] * 7
cadena[4] = cadena[4] * 6
cadena[5] = cadena[5] * 5
cadena[6] = cadena[6] * 4
cadena[7] = cadena[7] * 3
cadena[8] = cadena[8] * 2
  •  Luego sumamos cada uno de los valores de la matriz y los guardamos en la variable “SumRIF”:
SumRIF = cadena[0] + cadena[1] + cadena[2] + cadena[3] +
cadena[4] + cadena[5] + cadena[6] + cadena[7] + cadena[8];
  • Lo siguiente es calcular el residuo resultante de dividir “SumRIF” entre 11 y para ello se utiliza la función de javascript “parseINT()” que devuelve la parte entera y al multiplicarla por 11 y restar de “SumRIF” devuelve dicho valor.
EntRIF = parseInt(SumRIF/11);
Residuo = SumRIF - (EntRIF * 11)

RECORDAR los miembros que componen una división inexacta (en nuestro ejemplo el divisor es una constante, 11, número primo):

división

  • Por último vamos a calcular la diferencia entre el residuo y la constante 11 teniendo en cuenta que si el residuo es 0 u 1 el dígito de verificación valdrá cero :
DigiVal = 11 - Residuo;
if (DigiVal > 9)
DigiVal = 0;
  • Y listo ya sólo queda comparar si coincide nuestro cálculo con el valor que introdujo el usuario a la función:
if (DigiVal == cadena[9])
return true;
else
return false;

 

Hagamos un cálculo de ejemplo, para ello tomaremos a la Corporación Socialista del Cemento S.A  cuyo RIF es el siguiente: G-20009048-0, comenzemos por eliminar los guiones: G200090480.

  • “G” toma el valor de 5 multiplicado por 4 =20
  • 2 multplicado por 3 =   6
  • 0 multplicado por 2 =   0
  • 0 multplicado por 7 =   0
  • 0 multplicado por 6 =   0
  • 9 multplicado por 5 = 45
  • 0 multplicado por 4 =  0
  • 4 multplicado por 3 = 12
  • 8 multplicado por 2 = 16

Sumamos:20+6+0+0+0+45+0+12+16=99

Dividimos por 11 y tomamos el residuo que en este caso es cero: 99÷11=9

Dicho residuo lo restamos de once: 11-0=11 y como es mayor que 9 (tiene dos cifras) ENTONCES el dígito de verificación es cero lo cual corresponde con el RIF suministrado: “G-20009048-0”

Es de acotar que en términos de presentación al usuario mi representación favorita es la siguiente:

rif enmascaradoDicha forma de interfaz al usuario NO PERMITE introducir letra diferentes a las normalizadas (a futuro incluiré la letra “C” en dicho objeto de programación) y sólo permite números en el resto del RIF haciendo el cálculo del dígito de verificación y es el usuario quien lo debe comparar con el que suministra el cliente a quien se le desea facturar, así se garantiza la correcta escritura del nombre o razón social.

En este último punto debemos tocar el tema de la consulta masiva de RIF cuyo servicio es ofrecido por el SENIAT por medio de su página web, esta consulta (aparte de devolver el nombre o razón social, eso nos ahorra el trabajo de escribir) también devuelve el porcentaje de IVA a retener (75% ó 100% actualmente), en el caso de que la farmacia donde trabajemos sea Agente de Retención; como dicho tema es un poco largo de explicar (“Contribuyentes Especiales”) he decidido dejarlo para una entrada posterior.


 

Actualizado el sábado 15 de agosto de 2015:

El día de hoy se tramitó el primer RIF con la letra “C”, dicha noticia la recojo vía Twitter, he aquí que incluyo los mensajes:

 

 

 

También el SENIAT en su página web hace el anuncio oficial, más sin embargo aún no veo una Providencia como tal sobre dicho documento de información fiscal.

El SENIAT imprimió primer RIF con el alfanumérico “C”

 


Actualizado el domingo 16 de agosto de 2015:


 

<Eso es todo, por ahora>.