From 17e0823fb2fd28d95ad42bc2fb8e0e9931732fbf Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Sat, 11 Mar 2017 23:09:59 +0000
Subject: factura (11mar17)

git-svn-id: svn://tug.org/texlive/trunk@43470 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/tex/latex/factura/factura.cls | 149 +++++++++++++++++-------
 1 file changed, 109 insertions(+), 40 deletions(-)

(limited to 'Master/texmf-dist/tex/latex/factura/factura.cls')

diff --git a/Master/texmf-dist/tex/latex/factura/factura.cls b/Master/texmf-dist/tex/latex/factura/factura.cls
index 01d934a7c6c..29bf5f523f3 100644
--- a/Master/texmf-dist/tex/latex/factura/factura.cls
+++ b/Master/texmf-dist/tex/latex/factura/factura.cls
@@ -6,7 +6,7 @@
 %%
 %% factura.dtx  (with options: `class')
 %% 
-%% Copyright 2016 Emilio Lazo Zaia <emiliolazozaia@gmail.com>
+%% Copyright 2017 Emilio Lazo Zaia <emiliolazozaia@gmail.com>
 %% 
 %% This work may be distributed and/or modified under the
 %% conditions of the LaTeX Project Public License, either
@@ -36,7 +36,7 @@
 %% 
 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
 \ProvidesClass{factura}
-[2016/06/25 v2.82
+[2017/03/11 v3.00
 Clase para elaborar facturas legales
 en la República Bolivariana de Venezuela.
 ]
@@ -55,6 +55,7 @@ en la República Bolivariana de Venezuela.
 \newif\if@descuentos
 \newif\if@denom
 \newif\if@sinnumero
+\newif\if@sintotales
 \newif\if@conlineasha
 \newif\if@linea
 \newif\if@lineacompleta
@@ -86,11 +87,14 @@ en la República Bolivariana de Venezuela.
 \newif\if@nombre
 \newif\if@pagado
 \newif\if@impdesc
+\newif\if@centradesc
+\newif\if@sinmarcas
 \newif\if@pruebaref
 
 \RequirePackage{etoolbox}%  'etoolbox' para los condicionales binarios.
 
 \newbool{Descuentos}
+\newbool{Subtotal}
 \newbool{SinCantidad}
 \newbool{SinLineasVertInt}
 \newbool{SinLineasVertExt}
@@ -119,11 +123,26 @@ en la República Bolivariana de Venezuela.
 \DeclareOption{unafirma}{\@unafirmatrue\@confirmastrue}%  No agrega el espacio para que firme quien recibe.
 \DeclareOption{dosfirmas}{\@unafirmafalse\@confirmastrue}%  Pone las dos firmas para firmar.
 \DeclareOption{descuentos}{\booltrue{Descuentos}\@descuentostrue}%  Para los descuentos individuales.
+\DeclareOption{subtotal}{%  Para la columna extra del subtotal antes del descuento.
+ \if@descuentos
+  \booltrue{Subtotal}
+ \else
+  \ClassWarning{factura}{La opción 'subtotal' no aplica sin descuentos individuales. Sin efecto opción 'subtotal'}{}
+ \fi}
 \DeclareOption{sincondiciones}{\@concondicionesfalse}%  No agrega el texto con las condiciones del documento.
 \DeclareOption{denom}{\@denomtrue}%  Agrega el texto con la denominación del documento, para las formas libres que no tienen el número de factura.
 \DeclareOption{sinnumero}{\@sinnumerotrue\@denomtrue}%  Escribir el texto de la denominación del documento pero sin escribir el número.
 \DeclareOption{G}{\@Gtrue}%  Con esta opción sale la letra 'G' en los items con IVA general, y sale el porcentaje en la base imponible general.
 \DeclareOption{filas}{\@filastrue}%  Estilo de totalización en filas.
+\DeclareOption{sintotales}{\@sintotalestrue%  No escribe los totales al final, por ejemplo para cotizaciones de productos similares.
+ \if@filas
+  \ClassWarning{factura}{La opción 'sintotales' no aplica para el modo de totalización en filas. Sin efecto opción 'filas'.}{}
+  \@filasfalse
+ \fi
+ \if@cotizacion
+ \else
+  \ClassWarning{factura}{La opción 'sintotales' no debe usarse en facturas sino en cotizaciones. No es válida una factura sin totales.}{}
+ \fi}
 \DeclareOption{centrado}{%  Total y exento 'centrado'; sólo para estilo 'filas'
  \if@filas
   \@centradotrue
@@ -137,6 +156,8 @@ en la República Bolivariana de Venezuela.
   \@agrupadotrue
  \fi}
 \DeclareOption{impdesc}{\@impdesctrue}%  Para el tipo de impuesto en la descripción y no en el precio unitario y total.
+\DeclareOption{centradesc}{\@centradesctrue}%  Para centrar la descripción de cada ítem.
+\DeclareOption{sinmarcas}{\@sinmarcastrue}%  Para evitar que aparezcan los caracteres especiales cuando la descripción es larga.
 \DeclareOption{numitem}{\booltrue{NumItem}}%  Para poner una columna extra al principio con el número del ítem.
 \DeclareOption{dcu}{%  Descripción, luego cantidad y luego precio unitario.
  \@dcutrue\@cdufalse\@ducfalse
@@ -195,7 +216,7 @@ en la República Bolivariana de Venezuela.
 \DeclareOption{csv}{%  Para la salida en modo csv también.
  \if@factura
   \@csvtrue
-  \AtEndDocument{\@EscribeTotalesEnCSV}
+  \if@sintotales\else\AtEndDocument{\@EscribeTotalesEnCSV}\fi
  \else
   \ClassWarning{factura}{La opción 'csv' require generar la factura. Sin efecto opción 'csv'.}{}
  \fi}
@@ -271,7 +292,10 @@ en la República Bolivariana de Venezuela.
    \ClassWarning{factura}{** Fecha del documento\space \@Fecha\space distinta de la fecha de hoy. **}{}%
   \fi
  \fi
- \if@factura\ClassInfo{factura}{\@@Total: \space\space\space \Moneda \Total}{}\fi}
+ \if@sintotales
+ \else
+  \if@factura\ClassInfo{factura}{\@@Total: \space\space\space \Moneda \Total}{}\fi
+ \fi}
 
 %% La geometría en formato de factura y de reporte.
 %% El margen superior está definido desde el encabezado con los datos del cliente.
@@ -420,6 +444,9 @@ en la República Bolivariana de Venezuela.
 %% Separación horizontal entre las cajas del encabezado y separación interna entre la línea y el texto.
 \def\SepEncabez#1#2{\setlength{\@SeparaEncabez}{#1}\setlength{\@SeparaInternaEncabez}{#2}}
 
+%% Separación extra entre los elementos en la factura.
+\def\SepItemsExtra#1{\setlength{\@SeparaItemsExtra}{#1}}
+
 %% Separación interna entre la línea y el texto de la descripción.
 \def\SepDescrip#1{\setlength{\@SeparaInternaDescrip}{#1}}
 
@@ -604,6 +631,7 @@ en la República Bolivariana de Venezuela.
 \newlength{\@TamCantidad}
 \newlength{\@TamDescrip}
 \newlength{\@TamPrecioU}
+\newlength{\@TamPrecioS}
 \newlength{\@TamDescuento}
 \newlength{\@TamPrecioT}
 \newlength{\@GrosorLineaFirmas}
@@ -632,6 +660,8 @@ en la República Bolivariana de Venezuela.
 \newlength{\@EspacioVacioInicial}
 \newlength{\@EspacioVacioFinal}
 \newlength{\@SeparaEncabez}
+\newlength{\@SeparaItemsExtra}
+\newlength{\@SeparaItemsExtraFinal}
 \newlength{\@SeparaInternaEncabez}
 \newlength{\@SeparaInternaDescrip}
 \newlength{\@SeparaElementos}
@@ -694,6 +724,12 @@ en la República Bolivariana de Venezuela.
  \RequirePackage{zref-savepos}%  Para la firma, que debe ser cargado aquí porque \FirmaReporte no se ejecuta desde el preámbulo.
 \fi
 
+\if@sinmarcas
+ \setlength{\@SeparaFinLineaDesc}{0pt}
+ \def\@CaracterCR{\mbox{}}
+ \def\@CaracterCeldasVacias{\mbox{}}
+\fi
+
 %% Comando para escribir el encabezado en la factura.
 \newcommand\@EncabezadoFactura{%
  \ifdefvoid{\@Resumen}{\@EscribeDatos}{\@EscribeDatosResumen}%
@@ -726,15 +762,18 @@ en la República Bolivariana de Venezuela.
 %% http://tex.stackexchange.com/questions/248944/how-to-put-before-lines
 \newcommand{\@DescripcionAuxCmd}[2]{%
  \immediate\write\@auxout{\gdef\noexpand\@TamDescrip{\the\linewidth}}% Para poder establecer la línea diagonal hay que saber el tamaño del campo de la descripción.
- \setbox0\hbox{\parbox[t]{\linewidth}{#1%
+ \setbox0\hbox{\parbox[t]{\linewidth}{\if@centradesc\centering\arraybackslash\fi#1%
   \if@impdesc\hfill\ \@EscribeTipoDeImpuesto{#2}\fi%
   \par\global\count1=\prevgraf}}%
  \ifnum\count1 = 1
-  #1%
-  \if@impdesc\hfill\ \@EscribeTipoDeImpuesto{#2}\fi
+  \if@centradesc\centering\arraybackslash\fi#1%
+  \if@impdesc\vskip-\baselineskip\hfill\ \@EscribeTipoDeImpuesto{#2}\fi
  \else
   \parbox[t]{\linewidth-\wd\@CajaCaracterCR-\@SeparaFinLineaDesc}{%
-   \David@XStart#1\David@XEnd
+   \David@XStart
+   \if@centradesc\centering\arraybackslash\fi
+   #1%
+   \David@XEnd
    \par
    \count0=\prevgraf
    \count2=\prevgraf
@@ -771,6 +810,11 @@ en la República Bolivariana de Venezuela.
  \ifdim\wd\@CajaPrueba > \@TamPrecioU \global\@TamPrecioU=\wd\@CajaPrueba\fi
  \parbox[t]{\@TamPrecioU}{#1}}
 
+\newcommand{\@PrecioSAuxCmd}[1]{%
+ \savebox{\@CajaPrueba}{#1}%
+ \ifdim\wd\@CajaPrueba > \@TamPrecioS \global\@TamPrecioS=\wd\@CajaPrueba\fi
+ \parbox[t]{\@TamPrecioS}{#1}}
+
 \newcommand{\@DescuentoAuxCmd}[1]{%
  \savebox{\@CajaPrueba}{#1}%
  \ifdim\wd\@CajaPrueba > \@TamDescuento \global\@TamDescuento=\wd\@CajaPrueba\fi
@@ -1020,13 +1064,17 @@ en la República Bolivariana de Venezuela.
  \ifbool{DUC}{c}{r}
  % Quinta línea.
  \ifbool{SinLineasVertInt}{}{|}
+ % Columna 'r' para subtotal antes del descuento, o columna fantasma si no se especifica 'subtotal').
+ \ifbool{Subtotal}{r}{l@{\extracolsep{0pt}}}
+ % Sexta línea, que sale solamente cuando hay columna de subtotales.
+ \ifbool{Subtotal}{\ifbool{SinLineasVertInt}{}{|}}{}
  % Columna 'c' para 'descuentos' y columna 'r' sin espacio si no hay descuentos individuales.
  \ifbool{Descuentos}{c}{r@{\extracolsep{0pt}}}
- % Sexta línea, que sale solamente cuando hay descuentos.
+ % Séptima línea, que sale solamente cuando hay descuentos.
  \ifbool{Descuentos}{\ifbool{SinLineasVertInt}{}{|}}{}
  % Columna 'r' siempre.
  r
- % Séptima y última línea.
+ % Octava y última línea.
  \ifbool{SinLineasVertExt}{}{|}}
 
 %% Comando auxiliar para abrir la tabla del cuadro de la factura y expandir completamente las columnas.
@@ -1034,7 +1082,7 @@ en la República Bolivariana de Venezuela.
 
 %% Comando auxiliar para abrir el '\multicolumn' para los totales en el modo de columnas y expandir completamente las columnas cuando hay o no barras verticales.
 \edef\@ColumnasMultiColumnTotalesAuxCmd{%
- \noexpand\multicolumn{6}{\ifbool{SinLineasVertExt}{}{|} r}\begingroup
+ \noexpand\multicolumn{7}{\ifbool{SinLineasVertExt}{}{|} r}\begingroup
    \noexpand\ifdim \noexpand\ht\noexpand\@CajaEspacioVacio=0pt
    \noexpand\else
     \noexpand\if@linea\noexpand\zsaveposx{LineaNodoBCoordX}\noexpand\zsaveposy{LineaNodoBCoordY}\noexpand\fi\noexpand\fi% Fijamos la posición (x,y) final para la línea ya que estaremos justo en el punto donde escribimos el total, y hasta allí llega la línea en el modo de columnas.
@@ -1046,8 +1094,10 @@ en la República Bolivariana de Venezuela.
  % Calculamos.
  \FPupn\PrecioU{#4 \@DigitosMoneda{} round}%
  \ifx\\#5\\\FPset\Dcto{0}\else\FPupn\Dcto{#5 \@DigitosPorc{} round clip}\fi% Fijamos en 0 el descuento si no se especifica.
- \FPupn\PrecioT{100 \Dcto{} 100 - / #2 * \PrecioU{} * \@DigitosMoneda{} round}%
+ \FPupn\PrecioS{#2 \PrecioU{} * \@DigitosMoneda{} round}%
+ \FPupn\PrecioT{100 \Dcto{} 100 - / \PrecioS{} * \@DigitosMoneda{} round}%
  \global\let\PrecioU\PrecioU
+ \global\let\PrecioS\PrecioS
  \global\let\Dcto\Dcto
  \global\let\PrecioT\PrecioT
  % Suma el elemento actual al subtotal acumulado.
@@ -1057,6 +1107,7 @@ en la República Bolivariana de Venezuela.
  \expandafter\gdef\csname @Item@\romannumeral\value{@NumItem}@Cantidad\endcsname{\numprint{#2}}%
  \expandafter\gdef\csname @Item@\romannumeral\value{@NumItem}@Descripcion\endcsname{#3}%
  \expandafter\global\expandafter\edef\csname @Item@\romannumeral\value{@NumItem}@PrecioU\endcsname{\noexpand\numprint{\PrecioU}}%
+ \expandafter\global\expandafter\edef\csname @Item@\romannumeral\value{@NumItem}@PrecioS\endcsname{\noexpand\numprint{\PrecioS}}%
  \expandafter\global\expandafter\edef\csname @Item@\romannumeral\value{@NumItem}@Descuento\endcsname{\noexpand\numprint{\Dcto}}%
  \expandafter\global\expandafter\edef\csname @Item@\romannumeral\value{@NumItem}@PrecioT\endcsname{\noexpand\numprint{\PrecioT}}}
 
@@ -1074,6 +1125,7 @@ en la República Bolivariana de Venezuela.
 \gdef\cantref#1{\@pruebaref{#1}\if@pruebaref \csname @Item@\expandafter\romannumeral\csname @Etiqueta@#1\endcsname @Cantidad\endcsname \fi}
 \gdef\descref#1{\@pruebaref{#1}\if@pruebaref \csname @Item@\expandafter\romannumeral\csname @Etiqueta@#1\endcsname @Descripcion\endcsname \fi}
 \gdef\puref#1{\@pruebaref{#1}\if@pruebaref \csname @Item@\expandafter\romannumeral\csname @Etiqueta@#1\endcsname @PrecioU\endcsname \fi}
+\gdef\subtref#1{\@pruebaref{#1}\if@pruebaref \csname @Item@\expandafter\romannumeral\csname @Etiqueta@#1\endcsname @PrecioS\endcsname \fi}
 \gdef\dctoref#1{\@pruebaref{#1}\if@pruebaref \csname @Item@\expandafter\romannumeral\csname @Etiqueta@#1\endcsname @Descuento\endcsname \fi}
 \gdef\ptref#1{\@pruebaref{#1}\if@pruebaref \csname @Item@\expandafter\romannumeral\csname @Etiqueta@#1\endcsname @PrecioT\endcsname \fi}
 
@@ -1149,7 +1201,8 @@ en la República Bolivariana de Venezuela.
   % Si no es el primer ítem, entonces hace falta \\ para terminar el ítem anterior.
   \ifnum\value{@NumItem}=1%
   \else
-   \\
+   \setlength{\@SeparaItemsExtraFinal}{\numexpr\the\count1\normalbaselineskip-\normalbaselineskip+\@SeparaItemsExtra}%
+   \\[\@SeparaItemsExtraFinal]
    \if@conlineasha\hline\fi% Líneas para separar cada ítem, si hiciera falta.
   \fi
   % Primer -opcional- campo: El número del ítem.
@@ -1186,8 +1239,15 @@ en la República Bolivariana de Venezuela.
       \if@impdesc\else\@EscribeTipoDeImpuesto{##1}\fi \hfill \@LetraNumeros \numprint{\PrecioU}
      \fi}}% dcu y cdu.
    \fi}%
+  & % Quinto -opcional- campo: Subtotal (para luego descuentos).
+  \ifbool{Subtotal}{%
+   \David@XRight{\@PrecioSAuxCmd{%
+    \ifx##1X \hfill \@CaracterItemXVacio \hfill\mbox{}%
+    \else
+     \if@impdesc\else\@EscribeTipoDeImpuesto{##1}\fi \hfill \@LetraNumeros \numprint{\PrecioS}
+    \fi}}}{}
   &
-  % Quinto -opcional- campo: Descuento.
+  % Sexto -opcional- campo: Descuento.
   \ifbool{Descuentos}{%
    \David@XRight{\@DescuentoAuxCmd{%
     \ifx##1X \hfill \@CaracterItemXVacio \hfill\mbox{}%
@@ -1195,7 +1255,7 @@ en la República Bolivariana de Venezuela.
      \mbox{}\hfill \@LetraNumeros \numprint{\Dcto}\%\hfill\mbox{}%
     \fi}}}{}% Tenemos que usar un condicional booleano porque si no da problemas con el condicional \FPifeq.
   &
-  % Sexto campo: El total.
+  % Séptimo campo: El total.
   \David@XRight{\@PrecioTAuxCmd{%
    \ifx##1X \hfill \@CaracterItemXVacio \hfill\mbox{}%
    \else
@@ -1258,6 +1318,8 @@ en la República Bolivariana de Venezuela.
    \else
     \@PrecioUAuxCmd{\mbox{}\hfill \@LetraTitCuadro \@@PrecioU \space (\Moneda)\hfill\mbox{}}%
    \fi}%
+ &% Avanzamos hasta el subtotal, que puede o no existir,
+ \ifbool{Subtotal}{\@PrecioSAuxCmd{\mbox{}\hfill \@LetraTitCuadro \@@PrecioS \space (\Moneda)\hfill\mbox{}}}{}%
  &% Avanzamos hasta el descuento, que puede o no existir.
  \if@descuentos \@DescuentoAuxCmd{\mbox{}\hfill \@LetraTitCuadro \@@Descuento \hfill\mbox{}}\fi
  &% Avanzamos hasta el precio total.
@@ -1274,7 +1336,7 @@ en la República Bolivariana de Venezuela.
   \ifdim \ht\@CajaEspacioVacio=0pt
    \ifbool{SinLineasHoriExt}{}{\if@conlineasha\else\hline\fi}% Verificamos si hay que poner la línea horizontal. Si está 'conlineasha' ya salió debido a esta opción.
   \else
-   \ifbool{PrimeroDescrip}{&\usebox{\@CajaEspacioVacio}&&&&\\}{&&\usebox{\@CajaEspacioVacio}&&&\\}%
+   \ifbool{PrimeroDescrip}{&\usebox{\@CajaEspacioVacio}&&&&&\\}{&&\usebox{\@CajaEspacioVacio}&&&&\\}%
    \ifbool{SinLineasHoriExt}{}{\hline}% Siempre que hay relleno se pone la línea acá.
   \fi
  \else
@@ -1283,27 +1345,34 @@ en la República Bolivariana de Venezuela.
   \ifdim \ht\@CajaEspacioVacio=0pt
   \else
    % Rellenamos la tabla con espacio espúreo, y le agregamos las lineas externas, si aplica.
-   \ifbool{SinLineasVertExt}{\multicolumn{6}{c}{\usebox{\@CajaEspacioVacio}}}{\multicolumn{6}{|c|}{\usebox{\@CajaEspacioVacio}}}\\
+   \ifbool{SinLineasVertExt}{\multicolumn{7}{c}{\usebox{\@CajaEspacioVacio}}}{\multicolumn{7}{|c|}{\usebox{\@CajaEspacioVacio}}}\\
   \fi
-  % Modo de columnas: Abrimos la tabla para escribir los totales, y le agregamos las líneas verticales externas, si aplica.
-  \@ColumnasMultiColumnTotalesAuxCmd
-  \@CalculaTotalesI
-  \if@agrupado
-   \@EscribeTotalColAgrupado
+  % Si pedimos sin totalizaciones, entonces cerramos la tabla ya, si no, calculamos los totales y los escribimos
+  \if@sintotales
   \else
-   \if@Exento \@EscribeTotalCol{E}\fi
-   \if@BIR\@EscribeTotalCol{R}\if@ivaexpresado\@EscribeTotalColAlicuota{R}\fi\fi
-   \@EscribeTotalCol{G}\if@ivaexpresado\@EscribeTotalColAlicuota{G}\fi
-   \if@BIA\@EscribeTotalCol{A}\if@ivaexpresado\@EscribeTotalColAlicuota{A}\fi\fi
+   % Modo de columnas: Abrimos la tabla para escribir los totales, y le agregamos las líneas verticales externas, si aplica.
+   \@ColumnasMultiColumnTotalesAuxCmd
+   \@CalculaTotalesI
+   \if@agrupado
+    \@EscribeTotalColAgrupado
+   \else
+    \if@Exento \@EscribeTotalCol{E}\fi
+    \if@BIR\@EscribeTotalCol{R}\if@ivaexpresado\@EscribeTotalColAlicuota{R}\fi\fi
+    \@EscribeTotalCol{G}\if@ivaexpresado\@EscribeTotalColAlicuota{G}\fi
+    \if@BIA\@EscribeTotalCol{A}\if@ivaexpresado\@EscribeTotalColAlicuota{A}\fi\fi
+   \fi
+   \if@ivaexpresado\cline{2-2}\fi
+   \hfill \@LetraTitTotal\@@Total & \@LetraNumTotal\numprint{\Total}\\
+   \end{tabular}\endgroup
+   \\
+   \ifbool{SinLineasHoriExt}{}{\hline}%
   \fi
-  \if@ivaexpresado\cline{2-2}\fi
-  \hfill \@LetraTitTotal\@@Total & \@LetraNumTotal\numprint{\Total}\\
-  \end{tabular}\endgroup
-  \\
-  \ifbool{SinLineasHoriExt}{}{\hline}%
  \fi
  \end{tabularx}%
  %
+ % Generamos la macro \Total vacía para que no dé error en algún posible uso dentro del documento.
+ \if@sintotales\gdef\Total{}\fi
+ % Si pedimos no totalizar (sintotales), la opción filas queda desactivada.
  \if@filas
   \@CalculaTotalesI
   \@LetraNumTotales
@@ -1377,13 +1446,13 @@ en la República Bolivariana de Venezuela.
  \vspace*{\@SeparaElementos}\par}
 
  \ifbool{SinCantidad}
- % Definamos todos los comandos \Item***.
+ % Definamos todos los comandos \Item***. El descuento es opcional; por eso usamos G{0} en \NewDocumentCommand.
  {%
   \if@descuentos
-   \newcommand{\Item}[3]{\@ITEM{G}{1}{#1}{#2}{#3}}% Ítem normal.
-   \newcommand{\ItemR}[3]{\global\@BIRtrue\global\@Gtrue\@ITEM{R}{1}{#1}{#2}{#3}}% Ítem con IVA reducido.
-   \newcommand{\ItemA}[3]{\global\@BIAtrue\global\@Gtrue\@ITEM{A}{1}{#1}{#2}{#3}}% Ítem con IVA reducido.
-   \newcommand{\ItemE}[3]{\global\@Exentotrue\global\@Gtrue\@ITEM{E}{1}{#1}{#2}{#3}}% Ítem con IVA reducido.
+   \NewDocumentCommand{\Item}{m m G{0}}{\@ITEM{G}{1}{#1}{#2}{#3}}% Ítem normal.
+   \NewDocumentCommand{\ItemR}{m m G{0}}{\global\@BIRtrue\global\@Gtrue\@ITEM{R}{1}{#1}{#2}{#3}}% Ítem con IVA reducido.
+   \NewDocumentCommand{\ItemA}{m m G{0}}{\global\@BIAtrue\global\@Gtrue\@ITEM{A}{1}{#1}{#2}{#3}}% Ítem con IVA reducido.
+   \NewDocumentCommand{\ItemE}{m m G{0}}{\global\@Exentotrue\global\@Gtrue\@ITEM{E}{1}{#1}{#2}{#3}}% Ítem con IVA reducido.
   \else
    \newcommand{\Item}[2]{\@ITEM{G}{1}{#1}{#2}{0}}% Ítem normal.
    \newcommand{\ItemR}[2]{\global\@BIRtrue\global\@Gtrue\@ITEM{R}{1}{#1}{#2}{0}}% Ítem con IVA reducido.
@@ -1401,10 +1470,10 @@ en la República Bolivariana de Venezuela.
   \fi}
  {%
   \if@descuentos
-   \newcommand{\Item}[4]{\@ITEM{G}{#1}{#2}{#3}{#4}}% Ítem normal.
-   \newcommand{\ItemR}[4]{\global\@BIRtrue\global\@Gtrue\@ITEM{R}{#1}{#2}{#3}{#4}}% Ítem con IVA reducido.
-   \newcommand{\ItemA}[4]{\global\@BIAtrue\global\@Gtrue\@ITEM{A}{#1}{#2}{#3}{#4}}% Ítem con IVA adicional.
-   \newcommand{\ItemE}[4]{\global\@Exentotrue\global\@Gtrue\@ITEM{E}{#1}{#2}{#3}{#4}}% Ítem exento de IVA.
+   \NewDocumentCommand{\Item}{m m m G{0}}{\@ITEM{G}{#1}{#2}{#3}{#4}}% Ítem normal.
+   \NewDocumentCommand{\ItemR}{m m m G{0}}{\global\@BIRtrue\global\@Gtrue\@ITEM{R}{#1}{#2}{#3}{#4}}% Ítem con IVA reducido.
+   \NewDocumentCommand{\ItemA}{m m m G{0}}{\global\@BIAtrue\global\@Gtrue\@ITEM{A}{#1}{#2}{#3}{#4}}% Ítem con IVA adicional.
+   \NewDocumentCommand{\ItemE}{m m m G{0}}{\global\@Exentotrue\global\@Gtrue\@ITEM{E}{#1}{#2}{#3}{#4}}% Ítem exento de IVA.
   \else
    \newcommand{\Item}[3]{\@ITEM{G}{#1}{#2}{#3}{0}}% Ítem normal.
    \newcommand{\ItemR}[3]{\global\@BIRtrue\global\@Gtrue\@ITEM{R}{#1}{#2}{#3}{0}}% Ítem con IVA reducido.
-- 
cgit v1.2.3

