Last modified by admin on 2026/07/18 17:45

Show last authors
1 = CAEA {{id name="caea" /}}=
2
3 == Ampliaciones al modulo LYEI {{id name="ampliaciones-al-modulo-lyei" /}}==
4
5 = Nuevas entradas en C_ExternalService {{id name="nuevas-entradas-en-c_externalservice" /}}=
6
7 == Homo {{id name="homo" /}}==
8
9 MTXCAService Homologacion\\https://fwshomo.afip.gov.ar/wsmtxca/services/MTXCAService\\WebService de Gestion de CAEA y otras operaciones. Ambiente de Homologacion.
10
11 == Prod {{id name="prod" /}}==
12
13 MTXCAService Produccion\\https://serviciosjava.afip.gob.ar/wsmtxca/services/MTXCAService\\WebService de Gestion de CAEA y otras operaciones. Ambiente de Produccion.
14
15 = Nuevas columnas en C_Invoice {{id name="nuevas-columnas-en-c_invoice" /}}=
16
17 *. **LYEICAEAInformed**: para que el proceso de informe de comprobantes sepa qué documentos debe informar. La semántica del campo es la siguiente
18 **. NULL (por defecto): no debe realizarse actividad alguna relacionada con CAEA, ya sea por no ser factura electrónica o por haber obtenido su CAE de manera tradicional.\\
19 **. P (pending): pendiente a informar si es que la factura se generó mediante CAEA.\\
20 **. A (Aprobado)\\
21 **. O (Observado)\\
22 **. R (Rechazado)\\
23 **. E (error): se obtuvo un error al intentar informar\\
24 *. **LYEICAEAInformedDetail**: se almacena información de respuesta ya sea un error, una observación o un rechazo (dependiendo el campo LYEICAEAInformed).
25
26 Cuando se está trabajando con un punto de venta con CAEA, al completar la factura, en el campo CAE de la misma se volcará el CAEA obtenido con anterioridad.
27
28 **Cuando el campo LYEICAEAInformed no es NULL estaremos entonces en presencia de una factura cuyo CAE fue obtenido mediante CAEA**.
29
30 = Nueva tabla de historico de CAEAs obtenidos {{id name="nueva-tabla-de-historico-de-caeas-obtenidos" /}}=
31
32 Tabla:
33
34 *. **C_LYEICAEARequest**
35
36 En la tabla se almacenarán únicamente los pedidos autorizados. En los casos donde se presenten errores, los mismos quedarán registrados en los logs del proceso de recuperación de CAEA.
37
38 Campos principales (segun pagina 66 de la documentacion oficial):
39
40 *. **Periodo**. Indica año y el mes al que corresponde el CAEA. Formato AAAAMM, tal como lo usa/requiere el servicio de AFIP.\\
41 *. **Orden**. Especifica el orden de secuencia en el trascurso del tiempo. Valores permitidos: 1: primer quincena 2: segunda quincena.\\
42 *. **CAEA**. El CAEA obtenido\\
43 *. **FechaDesde**. Fecha de inicio de la vigencia del CAEA.\\
44 *. **FechaHasta**. Fecha de fin de la vigencia del CAEA.\\
45 *. **FechaTopeInforme**. Fecha tope para informar los comprobantes donde se utilizó el CAEA.\\
46 *. **Observaciones**. Indica los motivos por los cuales el pedido fue aceptado con observaciones, en caso de corresponder. No son errores.\\
47 *. **Ambiente**: Homo o Prod
48
49 = Nueva tabla de historico de CAEAs no usados {{id name="nueva-tabla-de-historico-de-caeas-no-usados" /}}=
50
51 Tabla:
52
53 *. **C_LYEICAEANotUsed**
54
55 En esta tabla se almacenarán los resultados de informar un CAEA no utilizado. Dado que este informe puede ser por punto de venta, se requiere una tabla adicional para almacenar el resultado de dicha ejecución por cada punto de venta. Esta sería una tabla “detalle” de la tabla **C_LYEICAEARequest**. Si para un **C_LYEICAEARequest** no existen entradas en **C_LYEICAEANotUsed** significa que o bien todavía no se notificó al respecto a AFIP o bien el CAEA sí fue utilizado para todos los puntos de venta.
56
57 *. **C_LYEICAEARequest_ID**, es una referencia al CAEA obtenid\\
58 *. **PtoVta**: El punto de venta sobre el cual se informa que no se utilizó el CAEA (referencia a **C_LYEIElectronicPOSConfig_ID**). Será NULL si es que se informa para todos los PtoVta. Si hay varios puntos de venta informados, se tendrán varios registros asociados al CAEA en cuestión.\\
59 *. **Status**:. Estado de informar a AFIP, opciones:
60 **. A (Aprobada): Cuando al informar el CAEA no utilizado, el proceso recibe que la solicitud es aceptada.\\
61 **. R (Rechazada): Cuando al informar el CAEA no utilizado, el proceso recibe que la solicitud es aceptada.\\
62 *. **Detail**: Informacion relacionada con potenciales errores al informar CAEA no utilizado.\\
63 *. **Ambiente**: Homo o Prod
64
65 Estas 2 nuevas tablas serán sendas pestañas en la ventana de Facturacion Electronica.
66
67 = Cambios en configuracion de pto.vta. electronico {{id name="cambios-en-configuracion-de-pto.vta.-electronico" /}}=
68
69 Nuevo drop down con las opciones de **Metodo obtencion CAE** (CAE o CAEA), con posibilidad de incorporar otras alternativas si en el futuro es necesario.
70
71 [[image:image1.png]]
72
73 Si para el punto de venta se selecciona CAE se obtendrá el CAE mediante WSFE (como hasta ahora).
74
75 Si para el punto de venta se selecciona CAEA, se obtendrá el CAE usando el CAEA obtenido con anterioridad. Si al completar una factura no se obtuvo un CAEA de manera acorde a los plazos requeridos por AFIP, se informará el error en cuestión.
76
77 = Nuevas clases cliente del WS {{id name="nuevas-clases-cliente-del-ws" /}}=
78
79 Según: https://serviciosjava.afip.gob.ar/wsmtxca/services/MTXCAService?wsdl
80
81 Package: ar.gov.afip.wsmtxca.service.impl.service
82
83 Si bien en primera instancia pueden generarse mediante el AxisJar.jar del proyecto Libertya (java -classpath AxisJar.jar org.apache.axis.wsdl.WSDL2Java), es necesario generar las clases con el soporte para la recuperación del XMLRequest y XMLResponse, dado que ante algún inconveniente AFIP requiere esta información.
84
85 Para esto se deberán aplicar las modificaciones correspondientes al proyecto Axis y generar las clases autogeneradas con dichos cambios. Ver revisión r10 de LYEI.
86
87 = Completando una factura {{id name="completando-una-factura" /}}=
88
89 En el completado de una factura, el provider seguirá siendo la clase de registración de facturas electrónicas con nombre: **org.libertya.locale.ar.electronicInvoice.utils.LYEIWSFE**, sin embargo una vez instanciada la clase y recuperada la información de configuración (**posConfig**), al ejecutar el **generateCAE()** se deberá evaluar si se debe obtener un CAE de AFIP o bien simplemente copiar el CAEA obtenido con anterioridad (ver proceso de obtención de CAEA), dependiendo la configuración del punto de venta electrónico.
90
91 En caso de que el punto de venta utilice CAEA, se copiará éste al campo CAE de la factura y el campo **LYEICAEAInformed** pasará de NULL a **P** (Pending).
92
93 Tener en cuenta que la factura es recibida a LYEIWSFE, pero el metodo generateCAE() solo retorna un mensaje de error o nada si no hay errores, con lo cual es importante ver cómo setear el LYEICAEAInformed en la factura desde LYEI pero SIN tener que tocar LY CORE.
94
95 = Proceso de obtención de CAEA {{id name="proceso-de-obtención-de-caea" /}}=
96
97 Ver 2.4.4 de la documentación de AFIP: //“Esta operación permite solicitar un CAEA. El cliente envía el requerimiento, el cual es atendido por el WS, superadas las validaciones se otorgará un CAEA y su respectivo período de vigencia (fecha de validez desde y fecha de validez hasta). Podrá ser solicitado dentro de los 5 (cinco) días corridos anteriores al comienzo de cada quincena y hasta el final de la misma. Habrá dos quincenas, la primera abarca desde el primero hasta el quince de cada mes y la segunda desde el dieciséis hasta el último día del mes.”//.
98
99 El proceso debe obtener un nuevo CAEA accediendo al servicio en cuestión, teniendo en cuenta el ambiente (homo / prod).
100
101 Si el proceso nota que ya tiene un CAEA válido para el período en cuestión (basándose en la tabla **C_LYEICAEARequest**), no debe gestionar uno nuevo. Esto es: el proceso debe ser idempotente en estos casos.
102
103 Proceso (con posibilidad de invocación desde terminal):
104
105 *. **org.libertya.locale.ar.electronicInvoice.process.LYEICAEARequestProcess**
106
107 Argumentos:
108
109 *. **Compañía**\\
110 *. **Organización**\\
111 *. **Ambiente (homo / prod)**\\
112 *. **CurrentPeriod (actual o siguiente?)**
113
114 La ejecución del mismo dependerá de las tareas programadas / cron que se definan según las necesidades del caso.
115
116 La ejecución del proceso deberá generar información relevante (invocación, argumentos, errores) a los archivos de log a fin de poder hacer el seguimiento correspondiente.
117
118 = Proceso de información de comprobante CAEA {{id name="proceso-de-información-de-comprobante-caea" /}}=
119
120 Ver 2.4.5 de la documentación de AFIP: //“Por cada comprobante se enviará una solicitud”//.
121
122 El proceso deberá barrer con las facturas que tengan estado **LYEICAEAInformed** = **P** (Pending) o **E** (Error) y actualizar la informacion en **LYEICAEAInformed** / **LYEICAEAInformedDetail**.
123
124 Proceso (con posibilidad de invocación desde terminal):
125
126 *. **org.libertya.locale.ar.electronicInvoice.process.LYEICAEANotifyDocumentProcess**
127
128 Argumentos:
129
130 *. **Compañía**\\
131 *. **Organización**\\
132 *. **C_Invoice_ID** si se desea informar un comprobante en particular o sin argumento si se desean informar todos los comprobantes pendientes a informar\\
133 *. **PtoVta** si se desea informar un punto de venta en particualr o sin argumento si se desean informar todos\\
134 *. **CAEA** si se desea informar los comprobantes de un CAEA en particular o sin argumento si se desean informar todos los comprobantes pendientes a informar
135
136 La ejecución del mismo dependerá de las tareas programadas / cron que se definan según las necesidades del caso.
137
138 Si bien el resultado de la ejecución (aceptado, rechazado, observado) quedará almacenado en cada comprobante, la ejecución del proceso deberá generar información relevante (invocación, argumentos, errores) a los archivos de log a fin de poder hacer el seguimiento correspondiente para otros casos de ejecución problemáticos, por ejemplo por temas de conectividad.
139
140 Por ahora que sea un proceso que se pueda ejecutar desde una ventana o croneado en LY.
141
142 = Proceso información CAEA no utilizado / Proceso información CAEA no utilizado para un PtoVta {{id name="proceso-información-caea-no-utilizado-proceso-información-caea-no-utilizado-para-un-ptovta" /}}=
143
144 Ver 2.4.5 de la documentación de AFIP: //“Este método permite informar un CAEA que no fue utilizado, es decir que ningún comprobante fue emitido con ese CAEA. Cabe aclarar que el CAEA no deberá ser utilizado en comprobantes que se emitan posteriormente”//.
145
146 Ver 2.4.8 de la documentación de AFIP: “Este método permite informar un CAEA que no fue utilizado para un Punto de Venta, es decir que ningún comprobante fue emitido con ese CAEA y ese Punto de Venta. Cabe aclarar que el CAEA y Punto de Venta indicados no deberán ser utilizados en comprobantes que se emitan posteriormente.”
147
148 El proceso deberá validar que no exista ninguna factura generada con dicho CAEA y realizar la notificación correspondiente a AFIP. Esto debería realizarse siempre vencido el plazo de utilización del CAEA en cuestión. Se debe gestionar los campos **Status** y **Detail** de la tabla C_LYEICAEANotUsed acordemente.
149
150 Podemos tener que para un CAEA algunos puntos de venta han emitido y otros no. Esto es similar al anterior pero además del CAEA se debe enviar el PtoVta, esto es: en la tabla C_LYEICAEANotUsed se debe incluir también el PtoVta sobre el cual se está informando.
151
152 Por consiguiente, el proceso deberá barrer con las facturas cuyo LYEICAEAInformed no es null a fin de determinar si existen o no facturas cuyo CAE fue obtenido mediante un CAEA en particular, agrupándolas por punto de venta. En función del caso se informará por cada punto de venta que no haya emitido (contrastando con la configuración de obtención de CAE en la pestaña de configuración de punto de venta electrónico), o bien sin punto de venta si ninguno de estos han emitido.
153
154 Proceso (con posibilidad de invocación desde terminal):
155
156 *. **org.libertya.locale.ar.electronicInvoice.process.LYEICAEANotUsedProcess**
157
158 Argumentos:
159
160 *. **Compañía**\\
161 *. **Organización**\\
162 *. **CAEA** si se desea especificar un CAEA en particular. Si no se especifica, se toma el CAEA más reciente pero que no sea del período actual.
163
164 La ejecución del mismo dependerá de las tareas programadas / cron que se definan según las necesidades del caso.
165
166 Si bien el resultado de la ejecución (aceptado, rechazado) quedará almacenado en las entradas de la tabla **C_LYEICAEANotUsed**, la ejecución del proceso deberá generar información relevante (invocación, argumentos, errores) a los archivos de log a fin de poder hacer el seguimiento correspondiente para otros casos de ejecución problemáticos, por ejemplo por temas de conectividad.
167
168 = Numeración sin saltos en Facturas {{id name="numeración-sin-saltos-en-facturas" /}}=
169
170 **Esto para LY CORE**: la numeración en FE no puede tener saltos. Documentos en borrador van usando nuevos números de secuencia. Actualmente la secuencia utilizada es la definida en el tipo de documento.
171
172 La idea es no utilizar esa secuencia sino hasta completar, y temporalmente asignarle otro valor único como el primary Key (C_Invoice_ID) o algo así al guardar y dejarlo en borrador.
173
174 Al final del complete de la factura asignar la secuencia actualizando la misma para garantizar que no existan.
175
176 Tabla: AD_Sequence, secuenciadores de LY.
177
178 DocumentNo_M_Product\\DocumentNo_AD_Org\\…\\DocumentNo_C_Invoice_CAEA
179
180 Verlo inicialmente para facturas.
181
182 *. para todos los tipos de factura, lo que es draft con un numero previsorio y luego uno posta al completar\\
183 *. si es cae o fiscal se considera el de AFIP/fiscal\\
184 *. si son manuales o CAEA, queda el número que está en secuenciador al final del complete
185
186 [[image:image2.png]]
187
188 == Secuencias: alternativa para versión 1 de CAEA bajo LYEI {{id name="secuencias-alternativa-para-versión-1-de-caea-bajo-lyei" /}}==
189
190 Dada la complejidad en la gestión de secuencias en LY (no se encuentra centralizado en una única clase, por ejemplo para facturas es un híbrido entre MInvoice, CalloutInvoiceExt y MSequence), se propone la siguiente alternativa más directa, al menos en una etapa inicial del módulo LYEI.
191
192 La solución consiste en atacar la problemática específicamente para la necesidad de numeración CAEA:
193
194 1) Dejar la lógica de secuencias actual sin modificaciones.
195
196 2) Crear nueva columna en **AD_Sequence** bajo el componente LYEI llamada por ejemplo **lyeicurrentnextcaea** (en realidad 2 columnas una para la seq. de homo y una para la seq. de prod).
197
198 3) Actuar de manera similar a cuando AFIP devuelve el número de documento del comprobante autorizado para comprobantes CAE. O sea, en LYEIWSFE para CAE hacemos:
199
200 ~/~/ CAE RECIBIDO\\electronicInvoiceCae = resp.getFeDetResp()[0].getCAE();\\~/~/ FECHA VTO RECIBIDO\\electronicInvoiceVtoCae = new java.sql.Timestamp(parsedDate.getTime());\\~/~/ NRO COMPROBANTE\\**electronicInvoiceNroCbte** = ""+resp.getFeDetResp()[0].getCbteDesde();
201
202 Y luego el CORE de LY (MInvoice) toma el valor de **electronicInvoiceNroCbte** como el que debe asignarse a la factura en cuestión.
203
204 Por consiguiente, para CAEA podríamos aplicar el mismo criterio:
205
206 ~/~/ CAEA obtenido\\electronicInvoiceCae = mtxca.currentCAEA().getCAEA();\\~/~/ CAE Vto\\electronicInvoiceVtoCae = mtxca.currentCAEA().getFechaHasta();\\~/~/ Numero de comprobante…\\**electronicInvoiceNroCbte** = createNroComprobanteCAEA();
207
208 En donde **createNroComprobanteCAEA()** gestiona el campo **currentnextcaea** de **AD_Sequence**, y el valor retornado por dicho método es el que se le asigna finalmente al comprobante que se está completando en ese momento.
209
210 Al utilizar transacciones en la instanciación de la secuencia, en caso de cualquier rollback de la transacción, el valor de **lyeicurrentnextcaea** vuelve a su valor original previo a la transacción.
211
212 Dado que **lyeicurrentnextcaea** es utilizado exclusivmente en la instancia de obtención de CAE mediante CAEA, no se presentarán problema de saltos de numeración como actualmente ocurre con la gestión tradicional.
213
214 Esta solución tiene la ventaja de:
215
216 *. El esfuerzo de desarrollo es considerablemente menor con respecto a una solución más abarcativa.\\
217 *. Continúa la misma lógca que para la numeración de documentos bajo CAE.\\
218 *. No se requerirá contar con una nueva versión de CORE dado que los cambios son exclusivos de LYEI.\\
219 *. Centralizamos en un único lugar la resolución para este requerimiento específico de CAEA.\\
220 *. No es invasivo al aislar la problemática exclusivamente a comprobantes CAEA, conlleva menos riesgo.\\
221 *. No genera conflictos si a futuro se decide desarrollar una solución más general para las secuencias.
222
223 = Informes {{id name="informes" /}}=
224
225 CAEA -> Informe: Comprobantes pendientes de informar. Parametro: Periodo y Quincena (obligatorio?). PtoVta (opcional). Organizacion (opcional). ¿Ambiente (Homo/Prod)?
226
227 CAEA -> Informe: CAEA sin usar pendientes de informar. Parametro: Periodo y Quincena (obligatorio?). PtoVta (opcional). Organizacion (opcional). ¿Ambiente (Homo/Prod)?