Descripcion General
El modulo de Aceptacion de Compras Electronicas permite recibir facturas XML de proveedores via correo electronico (POP3), procesarlas automaticamente e insertarlas como compras en el sistema. El proceso incluye identificacion de la empresa receptora, creacion automatica de proveedores nuevos, homologacion de articulos y envio de confirmacion a Hacienda.
Cómo funciona la aceptación y sus reglas
Todo es automático, cada minuto: el sistema baja los correos, mira cada XML y lo acepta en la empresa que corresponde. Así decide, en este orden:
1. ¿Es una compra?
Solo se procesan estos tipos de documento (el tipo sale del consecutivo, posiciones 9 y 10, o de la etiqueta principal del XML):
| Tipo | Documento | Qué pasa |
|---|---|---|
| 01 | Factura electrónica | Se procesa |
| 02 | Nota de débito | Se procesa |
| 03 | Nota de crédito | Se procesa |
| 08 | Factura electrónica de compra | Pasa el filtro, pero no se acepta: la emite la propia empresa |
| 09 | Factura de exportación | Se procesa |
| 04 · 10 · otros | Tiquete, recibo de pago, mensajes de Hacienda, XML que no se lee o sin emisor o receptor | Se borra de una vez: no se guarda, no se anota en la bitácora y no cuenta como error |
| Venta propia | El emisor tiene la misma cédula que el receptor: es una venta de la propia empresa que llegó por error al buzón de compras | Se borra de una vez, igual que un tiquete. Si el emisor es otra empresa (aunque también use FactuPOS), sí es una compra para el que compra y sigue |
2. ¿De qué empresa es?
Se busca la cédula del receptor del XML entre las empresas del sistema:
| Caso | Qué pasa |
|---|---|
| La cédula no es de ninguna empresa | No se acepta → carpeta No identificadas. No es un error: la factura no es de ningún cliente. Cada hora se le avisa al correo del receptor y se borra (ver abajo) |
| La cédula es de una sola empresa | Se acepta ahí, aunque el correo no coincida o el XML no traiga correo |
| La cédula es de dos o más empresas | Manda el correo de compras (parámetro 117): entra en la empresa cuyo correo de compras coincide con alguno de los correos del receptor del XML |
| Dos o más empresas y el mismo correo de compras está en varias | No se acepta → Pendientes de aceptación manual, y se avisa. No se elige al azar: el correo de compras tiene que estar en una sola de las empresas |
| Dos o más empresas y ningún correo coincide | No se acepta → Pendientes de aceptación manual, y se avisa (ver abajo). Vale también si alguna o todas no tienen correo de compras cargado: no hay forma de saber de cuál es. Cárguenle el correo de compras a cada una |
3. Una factura, una sola empresa y una sola vez
- Si la factura ya se aceptó en otra empresa de la misma cédula, no se acepta de nuevo.
- Si la empresa ya la tenía (por ejemplo, la metieron a mano), no se duplica: se toma como «ya estaba en el sistema».
4. Avisos
Cuando la cédula es de dos o más empresas y el correo no decide (no coincide con ninguna o está repetido): no se manda ningún correo. Cada empresa candidata lo ve al entrar al sistema, en el botón naranja «Avisos importantes por leer» del menú, y en su bandeja Pendientes de aceptación manual (abajo).
Cuando la cédula no es de ninguna de nuestras empresas (carpeta No identificadas): cada hora se agrupan por el correo que venía en la factura y a cada uno le llega un solo correo con el resumen de sus facturas, explicándole que esa cédula no es cliente de FactuPOS y que deje de enviarlas (quitar el reenvío de su correo o avisarle a sus proveedores). Apenas sale el correo, esos XML se borran: la carpeta se va limpiando sola y a nadie le llega más de un correo por hora. Las que no traen correo del receptor se borran de una vez. En Carpetas de compras → No identificadas el botón «Avisar y borrar ahora» hace lo mismo sin esperar.
5. Las carpetas
| Carpeta | Qué guarda |
|---|---|
| Entrada | XML recién bajados, esperando revisión (lo normal es que esté casi vacía) |
| Buenas | Compras válidas esperando ser aceptadas |
| Pendientes de aceptación manual | Facturas buenas de una cédula que tienen varias empresas, donde el correo de compras no decidió de cuál es. Esperan a que una de esas empresas la acepte o la rechace en su bandeja (ver abajo). No se borran solas |
| No identificadas | Facturas de compra cuyo receptor trae una cédula que no es de ninguna de nuestras empresas. No es un error. Se avisan y se borran cada hora (las que no traen correo se borran sin aviso) |
| No aceptadas | Facturas de compra que fallaron al aceptarse: XML que no se lee, ya aceptada en otra empresa, o errores que no se resolvieron solos. Se borran a los 30 días |
| Aceptadas | Compras ya registradas, una carpeta por mes. No se borran |
6. Pendientes de aceptación manual (la bandeja de cada empresa)
Cuando una factura llega a nombre de una cédula que tienen varias empresas y el correo no permite saber de cuál es, el sistema no adivina: la deja pendiente y cada una de esas empresas la ve en Compras → Aceptación de Compras, en el recuadro naranja «Pendientes de aceptación manual» (solo usuarios con el permiso 575 · Aceptar Compras).
- Abra el recuadro: sale cada factura con el proveedor, el número, el total y qué otras empresas también la pueden aceptar.
- Si es suya, toque «Aceptar aquí»: el servidor de aceptación la toma de su carpeta y la acepta en esta empresa, igual que lo hace el proceso automático (queda como compra y se le avisa a Hacienda). No hay que bajar ni subir nada.
- Si la factura venía a un correo que su empresa no tiene, el sistema pregunta si quiere agregarlo a su correo de compras: así las próximas facturas a ese correo entran solas. No lo ofrece si ese correo ya lo tiene otra empresa de su cédula.
- Si prefiere revisarla antes, toque «Ver»: pasa a la lista de abajo y ahí la acepta o la rechaza como cualquier otra.
Apenas una empresa la acepta o la rechaza, desaparece de la bandeja de las demás. Mientras haya pendientes, en el menú principal sale el botón naranja «Avisos importantes por leer» con el total.
Ligar su Gmail para que las facturas entren solas
Con el botón Ligar Gmail (arriba en esta pantalla; en el celular, el botón Gmail al lado de «Seleccionar archivos XML») usted conecta el Gmail donde le llegan las facturas de sus proveedores. Desde ahí el sistema lo revisa cada 5 minutos, baja los XML y los acepta solo, con las mismas reglas de arriba: ya no hay que descargar ni arrastrar nada.
- No se toca nada en su Gmail: no se borran correos ni se marcan como leídos. Solo se leen los que traen un XML adjunto, sin contar los que usted envió.
- La primera vez se bajan las facturas de los últimos 30 días; las que ya estaban aceptadas se saltan solas.
- Se pueden ligar varios Gmail a la misma empresa (por ejemplo, uno de compras y otro de gastos).
- Hace falta el permiso 575 · Aceptar Compras.
1. Saque la contraseña de aplicación (una sola vez)
Google no deja que otro sistema entre con la clave normal del Gmail: pide una contraseña de aplicación, que son 16 letras que se usan solo para esto.
- Entre a Verificación en 2 pasos con ese Gmail y actívela (si ya la tiene, siga al paso 2).
- Entre a Contraseñas de aplicaciones, escriba un nombre (por ejemplo FactuPOS) y toque Crear.
- Copie las 16 letras que le muestra Google.
2. Lígelo en FactuPOS
En Ligar Gmail escriba el Gmail y la contraseña de aplicación y toque Probar y ligar. El sistema entra a Google en ese momento: si la contraseña está mal, se lo dice de una vez y no guarda nada. La contraseña queda guardada cifrada.
En la misma ventana se ven los Gmail ligados, cuándo se revisaron por última vez y cuántas facturas se han bajado. Con Quitar deja de leerse ese Gmail.
Otra forma: reenviar las facturas a nuestro buzón
Si prefiere no dar una contraseña, su Gmail puede reenviar las facturas a un buzón nuestro
(del tipo fa###@soportereal.com). Pídanos la dirección al 2229-0303 o por WhatsApp; en Gmail se agrega en
Configuración → Reenvío y correo POP/IMAP, y Gmail manda un código de confirmación que le pasamos nosotros.
Después se crea un filtro con filename:xml que reenvíe solo las facturas.
Sea cual sea la forma, la factura entra en la empresa por la cédula del receptor que trae el XML. Si su cédula la usan varias empresas (sucursales), cada una necesita además su propio correo de compras en Configuración → Datos de Empresa.
Pantalla Principal
La pantalla se divide en 3 columnas:
| Columna | Contenido |
|---|---|
| Izquierda (256px) | Servidores POP3 configurados y botones Auto / Acept. Auto |
| Centro (280px) | Lista de empresas. Se resalta automaticamente la empresa cuando se identifica un XML |
| Derecha (flexible) | Arbol de archivos XML entrantes y log de aceptacion (ultimas 50 entradas) |
Flujo de Aceptacion
Descarga POP3
El sistema descarga XMLs de los buzones de correo configurados. Los archivos se guardan en /var/www/xml_compras_entrantes/. Tambien soporta archivos .eml adjuntos (los descompone recursivamente para extraer XMLs).
Identificacion de Empresa
Para cada XML, el sistema identifica a cual empresa (base de datos) corresponde:
- Paso 1 - Cedula + Correo: Busca en
dbnegociolas empresas cuya cedula coincida con la del receptor del XML, y cruza los correos del XML contra el correo de compras de cada una (parametro 117). Los dos lados admiten varios correos separados por coma: basta con que uno coincida. - Paso 2 - Solo cedula: Si ningun correo coincidio, entra por cedula cuando la cedula es de una sola empresa (tenga o no correo de compras), o, si hay varias con esa cedula, unicamente en las que NO tienen correo de compras configurado.
Con dos o mas empresas con la misma cedula, el correo de compras manda. La que lo tiene cargado queda restringida a el: solo recibe los documentos que vengan dirigidos a alguno de sus correos. Si ninguno coincide, el documento no se acepta y queda en
no_localizados/ para revisarlo a mano.
Si la empresa no tiene correo de compras cargado, sigue entrando todo lo que venga a su cedula, como siempre. Y si hay dos empresas con la misma cedula y ninguna con correo, el documento cae en cualquiera de las dos: por eso, cuando se trata de sucursales que comparten cedula, hay que cargarle a cada una su propio correo de compras — es lo unico que las distingue.
El correo de compras se carga en Configuracion → Datos de Empresa.
Proveedor
El sistema busca el proveedor por cedula + moneda del documento:
- Si no existe: Crea uno nuevo con los datos del XML (nombre, cedula, email, telefono, direccion, actividad economica). El tipo de compra default es 01.
- Si ya existe: Usa el proveedor encontrado. No se modifica su actividad economica ni tipo de proveedor.
Insercion de la Compra
Se inserta la cabecera en CompraMadre (estado borrador) y las lineas en CompraHija. Si la factura ya fue procesada (estado distinto de borrador), se rechaza como duplicado. Tambien se rechaza si la factura ya paso al historico de compras (las compras de mas de 4 anos se archivan): el aviso indica la fecha y el proveedor con que quedo registrada, y no se crea otra.
Homologacion de Articulos
El sistema busca en RelCodProveedor si el codigo del articulo del proveedor ya esta relacionado con un articulo local. Si encuentra coincidencia, asigna automaticamente el codigo local, CABYS y cuenta contable.
Desde el 22 de setiembre del 2026, el CABYS que vino en el XML se conserva. La línea solo toma el CABYS del artículo local cuando el del proveedor falta o no tiene los 13 dígitos. Antes se copiaba siempre el del catálogo encima, y el código del proveedor se perdía: por eso el Análisis de compra no podía avisarle cuando el proveedor le factura con un CABYS distinto al suyo.
Ajuste por Unidades por Medida (UxM)
Despues de homologar, si el articulo local tiene UnidadesXMedida > 1, el sistema ajusta automaticamente:
- Cantidad: se multiplica por UxM (ej: 3 cajas x 3 unidades = 9 unidades)
- Costo unitario: se divide por UxM (para mantener el total de linea igual)
Ejemplo: TREX UxM=3, XML envia cantidad=3 y costo=1,299.54. Resultado: cantidad=9, costo=433.18. SubTotal se mantiene en 3,898.62.
Confirmacion a Hacienda
Se genera el XML de MensajeReceptor (aceptacion/rechazo) con consecutivo tipo 05, se inserta en XmlDocumentos y se encola para envio a Hacienda.
La confirmacion espera a que el proveedor registre su factura en Hacienda. Hay proveedores que mandan la factura por correo en el momento, pero la registran en Hacienda horas despues (a veces al dia siguiente). Si la confirmacion saliera antes, Hacienda la rechazaria con el mensaje «el comprobante al cual se esta haciendo referencia no se encuentra registrado» (codigo -29). Por eso, antes de enviarla, el sistema le pregunta a Hacienda si ya tiene la factura: si todavia no, la confirmacion queda pendiente y se vuelve a revisar cada 20 minutos, hasta 8 dias. En cuanto el proveedor la registra, la confirmacion sale sola. No hay que hacer nada.
Correo de la confirmacion: cuando Hacienda acepta o rechaza el MensajeReceptor, se envia el comprobante por correo. El proveedor (emisor del documento original) siempre lo recibe. La copia de respaldo es opcional: solo se envia si la empresa configuro un correo de respaldo (parametro 149); si no, no se manda copia interna (antes llegaba duplicado al correo principal de la empresa).
Que trae el correo de confirmacion: tiene el mismo diseno y colores que el correo de las facturas (desde el 8-oct-2026): arriba el logo y los datos de la empresa, un saludo al proveedor y una franja azul con el numero de la factura del proveedor, su fecha de emision, el total y la clave — no hay que descifrarlos de la clave. Debajo, una marca verde Documento aceptado (o roja Documento rechazado) y dos recuadros: Proveedor (nombre, cedula y correo) y Aceptacion (quien acepto, la fecha de aceptacion, el consecutivo del mensaje y el mensaje de Hacienda), para que no se confundan con los de la factura. Al final, la moneda, los impuestos y el total (con el tipo de cambio si la factura es en dolares). Los avisos de rechazo que le llegan al proveedor (cuando se le rechaza su documento, o cuando Hacienda rechaza una Factura Electronica de Compra) usan el mismo diseno: la franja azul con el documento, una marca roja con el motivo que dio Hacienda y, en el de compra, un recuadro Que hacer.
Adjuntos: el correo lleva cuatro archivos: el XML del mensaje de confirmacion, el XML de la respuesta de Hacienda, el XML de la factura del proveedor y un PDF con la representacion grafica de esa factura (se arma del XML: emisor, receptor, lineas, impuestos y totales). Si el XML de la factura no aparece ni en la base ni en el respaldo de red, el correo sale igual con los dos primeros adjuntos.
Una factura se acepta una sola vez: si el mismo XML vuelve a entrar a la cola (porque alguien lo reenvia, o porque el correo de confirmacion regresa al buzon con la factura adjunta), el sistema lo reconoce y lo archiva sin volver a procesarlo. No se genera un segundo mensaje de aceptacion ni se le manda otro correo al proveedor. En la pantalla de aceptacion ese archivo aparece como ya procesada.
El correo de confirmacion no se vuelve a leer: muchas empresas reenvian su bandeja de compras al buzon que lee FactuPOS, asi que la confirmacion que el sistema envio termina volviendo a ese buzon. Al descargar el correo, esos mensajes se reconocen como propios y se descartan; solo se procesan las facturas que mandan los proveedores.
Rechazar un documento
En Aceptacion de Compras y Gastos (CO-005), junto al boton verde Aceptar esta el boton rojo Rechazar. Se usa cuando el documento que mando el proveedor no corresponde: mercaderia que nunca llego, precios que no son los acordados, una factura repetida o que ni siquiera es de su empresa.
| Si usted... | Que hace el sistema |
|---|---|
| Acepta | Registra la compra como borrador y le avisa a Hacienda que el documento se acepta. |
| Rechaza | No registra ninguna compra. No toca inventario ni contabilidad. Solo le avisa a Hacienda que el documento se devuelve, con el motivo que usted escriba. |
Como se rechaza
- Cargue los XML como siempre y marque los que va a devolver.
- Toque Rechazar. Se abre la ventana MC-020 con la lista de lo que va a rechazar.
- Escriba el motivo. Puede tocar uno de los motivos sugeridos y editarlo. El boton de confirmar no se enciende hasta que haya un motivo.
- Confirme. El sistema muestra los pasos uno por uno, igual que al aceptar.
El motivo lo lee el proveedor. Viaja dentro del mensaje que se le manda a Hacienda, asi que conviene que sea claro y concreto: "No recibi esta mercaderia" dice mas que "error". Admite hasta 160 caracteres, que es el maximo que acepta Hacienda.
El rechazo no se puede deshacer. Una vez enviado, ese documento ya no se va a poder aceptar: si lo intenta, la pantalla le dice cuando se rechazo y con que motivo. Si el proveedor corrige el documento, tiene que enviarle uno nuevo.
Un documento ya aceptado no se puede rechazar. Si la compra ya quedo registrada, la pantalla le dice la fecha en que se acepto. Para deshacerla el camino es anular la compra en el modulo de compras, no rechazar el XML.
Queda constancia. El XML del proveedor se archiva igual que si se hubiera aceptado, y el rechazo queda guardado con el motivo, la fecha, el usuario que lo hizo y el numero con que salio el aviso a Hacienda.
Permiso: es el mismo 575 · Aceptar Compras. Quien puede aceptar puede rechazar.
Ciclo Automatico
Los botones Auto y Acept. Auto activan ciclos automaticos:
| Boton | Funcion | Intervalo |
|---|---|---|
| Auto | Descarga XMLs de los buzones POP3 | Cada 41 segundos |
| Acept. Auto | Acepta automaticamente los XMLs descargados | Cada 30 segundos |
El estado de estos botones se guarda en localStorage y se restaura al recargar la pagina. El log de aceptacion mantiene las ultimas 50 entradas entre ciclos (no se borra al terminar un ciclo).
Log de Aceptacion
El log muestra 9 columnas por cada XML procesado:
| Columna | Fuente | Color |
|---|---|---|
| Cedula Emisor | XML | Gris |
| Nombre Emisor | XML | Blanco |
| Email Emisor | XML | Amarillo |
| Cedula Receptor | XML | Gris |
| Email Receptor | XML | Amarillo |
| BD | dbnegocio.serverdb | Azul |
| Email BD | dbnegocio.email_compras | Purpura |
| Match | email (verde) / cedula (naranja) | Variable |
| Estado | Resultado | OK / Error / Duplicado |
Validacion de Tarifa IVA
Si el XML trae un codigo de tarifa IVA que no existe en la tabla TipoTarifaImpuesto de la empresa, el sistema aplica un fallback automatico:
- Fallback primario: Codigo
10(IVA 0%) - Fallback secundario: El primer codigo disponible en la tabla
Esto evita errores de Foreign Key al insertar las lineas de la compra.
Tipo de cambio en facturas de moneda extranjera
Toda factura en una moneda distinta de la nacional (dolares, euros...) tiene que quedar con un tipo de cambio mayor a 1. Algunos proveedores mandan la factura en dolares con tipo de cambio 1; si se registrara asi, un dolar quedaria como un colon en la lista de compras y en la contabilidad.
- Si el XML trae un tipo de cambio mayor a 1, se usa ese.
- Si trae 1 o menos, el sistema toma el tipo de cambio de venta vigente a la fecha de la factura: primero el de Contabilidad › Tipos de cambio (hasta 7 dias atras) y, en dolares, el del Banco Central. La compra queda con un aviso que lo dice.
- Si no hay ningun tipo de cambio para esa fecha, la compra no se registra y se muestra el motivo: registre el tipo de cambio de esa fecha y vuelva a procesarla.
En una compra digitada a mano en moneda extranjera tambien se exige un tipo de cambio mayor a 1.
Validaciones al Aplicar la Compra
Cuando se aplica una compra desde el editor (CO-006), el sistema valida antes de hacer cualquier cambio:
| Paso | Validacion | Error si falla |
|---|---|---|
| 4i-1 | Todas las lineas deben tener cuenta contable asignada | "N linea(s) sin cuenta contable" |
| 4i-2 | Lineas con cuenta de inventario deben tener articulo local homologado | "N linea(s) con cuenta de inventario sin articulo homologado" |
La cuenta contable determina si la linea va a inventario o a gasto. Si la cuenta empieza con el prefijo del Parametro 92, se considera inventario y requiere articulo local.
Carpeta de XMLs
Los XML pasan por cuatro carpetas (Entrada, Buenas, No aceptadas y Aceptadas), que viven en el servidor de cron. Qué guarda cada una y cómo verlas: Cómo funciona la aceptación y sus reglas.
Configuracion de Emails
El campo email_compras en dbnegocio puede contener multiples emails separados por coma o punto y coma:
compras@empresa.com;bodega@empresa.com,admin@empresa.com
El sistema separa correctamente ambos delimitadores para comparar con el email del XML.
Lista de empresas
La columna central muestra todas las empresas registradas en dbcontrol.dbnegocio.
Cada fila representa una empresa única, agrupada por servidor + base de datos + buzón.
Estructura de cada fila
- Nombre de la BD (
laheredad,botanikalfarma, …): identificador técnico que también se usa como conexión SQL - Nombre comercial: razón social real (sincronizada desde param 54)
- Cédula jurídica/física: sincronizada desde param 66
- Servidor SQL y buzón: dirección IP + número de socket WinSock para descarga POP3
- Email de compras: email al que el emisor del XML envía la factura (param 117)
- Badge de usuarios
[👥 N]: cantidad de usuarios FactuPOS que tienen acceso a la empresa. Hover muestra la lista completa de emails de usuarios
La lista se ordena alfabéticamente por nombre de la base de datos.
Una empresa con múltiples usuarios aparece una sola vez en la lista — los
duplicados de dbnegocio por usuario se colapsan visualmente.
Botón Sync
El botón Sync (nube amarilla, arriba-derecha de la lista de empresas)
recorre todos los servidores SQL configurados en dbcontrol.Servidores y rellena
los campos vacíos de dbnegocio con los valores reales de cada empresa.
Qué lee
Por cada base de datos en cada servidor, consulta ParametrosEmpresa y toma:
- Param 54 → columna
nombre_empresa(razón social) - Param 66 → columna
cedula(sólo dígitos) - Param 117 → columna
email_compras(email receptor de FE)
Protecciones
- Si la BD no existe o está offline, lo marca como warn y NO toca la fila
- Si la tabla
ParametrosEmpresano está creada, salta - Si los 3 parámetros vienen vacíos, NO hace UPDATE (preserva lo que había antes — evita borrar por equivocación)
- Solo escribe cuando al menos 1 de los 3 params trae valor
Conexión SQL
Siempre conecta al puerto SQL default 1433. La columna socket de
dbnegocio es el buzón WinSock VB6 (444, 555, 600, 700…) usado
para correos POP3, NO es el puerto SQL. Se agrupan las empresas por IP y se abre una sola
conexión por servidor.
Respuesta
Al terminar muestra tres contadores:
- Actualizados: filas efectivamente modificadas
- Saltados: BDs con params vacíos (intencionalmente no actualizadas)
- Errores: BDs no accesibles / sin tabla / con excepción
Tarda ~30-60 segundos porque recorre los 15 servidores SQL registrados en Servidores.
Al finalizar, la lista se recarga automáticamente con los datos frescos.
Cuándo correrlo
- Después de crear una empresa nueva en FactuPOS (para que aparezca completa en la lista)
- Cuando una empresa cambió su nombre, cédula o email de compras en Datos Empresa (CF-001)
- Como mantenimiento semanal opcional
Buscador
Arriba de la lista hay un input "Buscar por BD, nombre o cédula…" que filtra las filas en tiempo real (client-side, sin ir al servidor). Busca contra el texto completo de cada fila — nombre técnico, razón social, cédula, servidor, buzón y email.
El contador del header cambia a N/total mientras el filtro está activo.
Para limpiar, borrá el contenido del input.
Match de empresa por XML
Cuando llega un XML por POP3, el sistema busca a qué empresa del sistema pertenece usando
la función identificarEmpresa() en _funciones.php.
Paso 1 — cédula + email_compras
- Extrae del XML:
Receptor.Identificacion.Numero(cédula) yReceptor.CorreoElectronico(emails) - Busca en
dbnegociotodas las empresas con esa cédula - Por cada empresa, compara los emails del XML contra el
email_compras(param 117) de la empresa - Separa por
,y;(una empresa puede tener múltiples emails de compras configurados) - Si hay 1 match → se usa esa empresa (
matchTipo = 'email')
El match sólo usa email_compras (param 117). La columna email
de dbnegocio (que contiene emails de usuarios individuales) no interviene
en el match.
Paso 2 — fallback por cédula
Si no hubo match de email:
- Si hay 1 sola empresa (base) con esa cédula → se usa esa: sin correo de compras
matchTipo = 'cedula'; con correo de compras que no coincidiómatchTipo = 'cedula_unica'(#2825) - Si hay varias → solo entran por cédula las que NO tienen
email_compras; si todas lo tienen, no se acepta (matchTipo = 'correo_no_coincide')
La empresa que resuelva el match aparece resaltada en verde en la lista con scroll automático, mientras se procesa el XML.
Ciclo automático
Desde el 28-sep-2026 la descarga y la aceptación de los XML de compras las hace el servidor solo, cada minuto. Antes dependían de dos pestañas abiertas en un navegador («Auto» y «Iniciar ciclo»): si la pestaña se cerraba o se trababa, las compras dejaban de aceptarse sin avisar.
- Descarga de correos (
compras/cron_descarga_correos.php): lee cada buzón POP3 configurado y guarda los XML en/var/www/xml_compras_entrantes/. - Aceptación (
compras/cron_aceptacion.php): analiza cada XML de la entrada (lo pasa a buenas; lo que no es una factura de compra —acuses de Hacienda, tiquetes electrónicos (04), facturas de compra propias (08), XML que no se lee, sin emisor o receptor— se descarta sin guardarlo ni anotarlo como error; los acuses, tiquetes y facturas de compra propias ni siquiera se guardan al bajar el correo) y acepta los buenos en la empresa identificada, en orden de llegada.
Las pestañas Descarga de Correos y Aceptación de Compras de Procesamiento (Panel Administrativo) muestran lo que va haciendo el servidor en un panel (PR-002, desde el 29-sep-2026): el estado grande (verde trabajando, rojo si pasan 3 minutos sin noticias o la corrida tropezó), los números de hoy (XML guardados, correos leídos, buzones que conectan; aceptadas, esperando, revisadas, repetidas y no aceptadas), la actividad con lo más nuevo arriba y el filtro Avisos y errores, y los gráficos por hora y por día. La Descarga lista además cada buzón con lo que leyó; la Aceptación, cuántos XML hay en cada carpeta (por revisar, buenas, malas, aceptadas).
Agregar o editar cuentas POP3, sincronizar empresas y analizar o aceptar un XML a mano se hacen en la pantalla de siempre, con el botón Pantalla completa del panel. Para volver al panel se toca otra vez la pestaña.
Cada XML tiene un candado: aunque se acepte a mano mientras corre el servidor, la misma factura nunca se acepta dos veces.
Para detener el proceso automático, se borra su archivo de cron en el servidor
(/etc/cron.d/fp-compras-descarga o /etc/cron.d/fp-compras-aceptacion).
Las pantallas lo detectan solas y vuelven a mostrar los botones «Auto» e «Iniciar ciclo».
Inserción en CompraMadre
Cuando el match identifica la empresa correcta, el XML se envía a
/api/compras/procesar_compra_electronica.php, que ejecuta 10 pasos en secuencia
contra la base de datos de la empresa:
- Buscar o crear proveedor en
Proveedor(por cédula+moneda) - Verificar que la factura no esté ya procesada (
Estado NOT IN 0,1) - Eliminar borradores previos (Estado 0 o 1)
- Insertar cabecera en
CompraMadre(estado 0, tipo = posiciones 9-10 del consecutivo) - Insertar líneas en
CompraHija(valida código de tarifa IVA con fallback "10") - Actualizar totales de
CompraMadrecon suma real de líneas - Homologar artículos con
ProveedorArticuloHomologacion+ asignar CABYS + cuenta contable + ajustar UxM - Insertar XML original en
XmlDocumentos(Base64) - Generar
MensajeReceptorXML con clave y consecutivo tipo 05 (solo si la empresa tiene FE activa, param 125 = 1) - Insertar confirmación en
fac_bitacora(servidor del cliente; auto-registra enfac_companiasi no existe) (solo si param 125 = 1)
Empresas sin Factura Electrónica (param 125 ≠ 1): la compra se registra
normalmente (pasos 1 a 8), pero los pasos 9 y 10 se omiten — no se genera
el MensajeReceptor ni se inserta en fac_bitacora, así que no se acepta
ni se envía nada a Hacienda.
Si el proveedor es nuevo, CompraMadreTipo se fuerza a '01'
y se copia ActividadEconomica del XML. Si ya existe, respeta el
CodTipoProveedor que tenga.
El ajuste automático de UxM (multiplicar cantidad, dividir costo) se aplica
incondicionalmente después de la homologación cuando Articulos.UnidadesXMedida > 1.
Los totales de línea se preservan porque cantidad×costo no cambia.
Permisos del módulo
El módulo de Aceptación de Compras Electrónicas no requiere permiso específico propio para acceder, pero el procesamiento posterior sí consume los permisos de compras. Se asignan al grupo de usuarios desde el módulo de Seguridad (SE-001).
| Código | Nombre | Qué autoriza | Dónde aplica |
|---|---|---|---|
552 |
Compras — Aplicar | Una vez aceptada la compra electrónica e insertada en el sistema, se requiere este permiso para aplicarla (registrar inventario y contabilidad). | CO-006, editar_compra |
558 |
Compras — Ver facturas | Las compras procesadas desde este módulo aparecen en CO-001 (Facturas de Compra). Se necesita este permiso para consultarlas. | CO-001 |
Parámetros de empresa
Los parámetros controlan el comportamiento de la aceptación electrónica. Se configuran desde Configuración → Parámetros (CF-004) y también en Datos de la Empresa → Facturación Electrónica.
| Código | Nombre | Qué controla | Valores |
|---|---|---|---|
125 |
Facturación Electrónica activa | Indica si la empresa opera con Hacienda. La compra del proveedor se registra igual en ambos casos; lo que cambia es la aceptación: si está en 0 (o no configurado), NO se genera el MensajeReceptor ni se inserta en fac_bitacora — es decir, no se acepta ni se envía nada a Hacienda. Si está en 1, se completan los pasos 9 y 10 (confirmación a Hacienda). |
1 = activo / 0 = inactivo |
66 |
Cédula jurídica de la empresa | Identifica a la empresa receptora al procesar XMLs. El sistema busca qué empresa de la base de datos corresponde a la cédula en el XML del proveedor. | Cédula (ej: 3-101-123456) |
92 |
Cuenta Contable CxP por defecto | Cuenta de Cuentas por Pagar asignada cuando el proveedor nuevo (creado automáticamente) no tiene cuenta configurada. | Código de cuenta (ej: 210401) |
249 |
Moneda nacional de la empresa | Moneda base para registrar la compra cuando el XML del proveedor viene en otra divisa. | Código ISO (ej: CRC) |
Exportar a Excel: permiso 720
Si el botón Excel aparece gris, no es una falla: exportar este reporte se habilita persona por persona con su propio permiso:
- Permiso 720 — Compras · Histórico de Aceptación
CO-021
SE-001: elegir a la persona, escribir el número del permiso (o la palabra Excel) en el buscador de permisos y marcar la casilla. Toma efecto recargando la pantalla, sin cerrar sesión.
Al pasar el mouse sobre el botón gris, el sistema dice qué le falta. Que a un compañero sí le funcione no significa que esté habilitado para todos: el permiso es por persona (por ejemplo, el usuario del contador suele ser uno aparte y necesita el suyo). Si el mensaje dice en cambio que la exportación está apagada para la empresa, esa no se abre desde el sistema: la solicita el dueño o la gerencia a Soporte Real. Ver el reporte en pantalla no pide este permiso; solo la descarga a Excel. Más detalles en El Excel de los reportes.