Aceptacion de Compras Electronicas

Guia completa del flujo de aceptacion, procesamiento y reglas del modulo de compras electronicas

AY-002
Menú Ayuda

Enviarle este manual a un usuario

El enlace abre solo este manual, sin el menú del sistema. El usuario no necesita clave ni entrar a FactuPOS: se ve en cualquier navegador y en el celular.

El WhatsApp sale del número de Soporte Real y el correo de info@soportereal.com. Con Compartir desde este teléfono sale de su propio WhatsApp y elige el contacto de su lista, sin escribir el número.

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):

TipoDocumentoQué pasa
01Factura electrónicaSe procesa
02Nota de débitoSe procesa
03Nota de créditoSe procesa
08Factura electrónica de compraPasa el filtro, pero no se acepta: la emite la propia empresa
09Factura de exportaciónSe procesa
04 · 10 · otrosTiquete, recibo de pago, mensajes de Hacienda, XML que no se lee o sin emisor o receptorSe borra de una vez: no se guarda, no se anota en la bitácora y no cuenta como error
Venta propiaEl emisor tiene la misma cédula que el receptor: es una venta de la propia empresa que llegó por error al buzón de comprasSe 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:

CasoQué pasa
La cédula no es de ninguna empresaNo 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 empresaSe acepta ahí, aunque el correo no coincida o el XML no traiga correo
La cédula es de dos o más empresasManda 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 variasNo 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 coincideNo 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
Cómo leer el registro (Panel → Aceptación de Compras → Actividad): cada factura sale en una sola línea que empieza con el resultado — ✓ ACEPTADA → base o ✗ NO SE ACEPTÓ. Si trae un ⚠ al final, es una nota de cómo se identificó la empresa (por ejemplo «solo por cédula»), no un error: la factura igual quedó aceptada. Las de cédula que no es de ninguna empresa salen como · sin empresa y se cuentan aparte («Sin empresa hoy»), no como error.
Correos: los dos lados admiten varios correos separados por coma o punto y coma, y basta con que uno coincida. La comparación es exacta, letra por letra. Si varias empresas comparten la cédula (sucursales), cada una debe tener su propio correo de compras: es lo único que las distingue. Se carga en Configuración → Datos de Empresa.

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

CarpetaQué guarda
EntradaXML recién bajados, esperando revisión (lo normal es que esté casi vacía)
BuenasCompras válidas esperando ser aceptadas
Pendientes de aceptación manualFacturas 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 identificadasFacturas 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 aceptadasFacturas 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
AceptadasCompras ya registradas, una carpeta por mes. No se borran
Volver a procesar: si cambió una regla o se le corrigió el correo de compras o la cédula a una empresa, en Panel → Monitoreo → Carpetas de compras → No aceptadas (y también en No identificadas, por ejemplo cuando se agrega una empresa nueva) está el botón «Mover todo a la entrada»: todo vuelve a pasar con las reglas de hoy. Mientras se procesan, las compras nuevas esperan su turno. Las Aceptadas no se vuelven a pasar.

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).

  1. Abra el recuadro: sale cada factura con el proveedor, el número, el total y qué otras empresas también la pueden aceptar.
  2. 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.
  3. 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.
  4. 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.

Para que no vuelvan a quedar pendientes: cada empresa tiene que tener su propio correo de compras (Configuración → Datos de Empresa). El sistema no deja guardar un correo de compras que ya tiene otra empresa con la misma cédula.

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.

  1. Entre a Verificación en 2 pasos con ese Gmail y actívela (si ya la tiene, siga al paso 2).
  2. Entre a Contraseñas de aplicaciones, escriba un nombre (por ejemplo FactuPOS) y toque Crear.
  3. 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.

Si el botón se pone naranja: Google dejó de aceptar la contraseña de algún Gmail ligado (por ejemplo, porque se cambió la clave del Gmail o se borró la contraseña de aplicación). Abra Ligar Gmail: ahí dice cuál es y qué pasó. Saque una contraseña de aplicación nueva y vuelva a ligarlo con el mismo Gmail.
Correos de empresa (Google Workspace): si su correo no termina en @gmail.com pero es de Google, el administrador de su dominio tiene que permitir las contraseñas de aplicación y el acceso IMAP. Si no se puede, use el reenvío (abajo).

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:

ColumnaContenido
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

1

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).

2

Identificacion de Empresa

Para cada XML, el sistema identifica a cual empresa (base de datos) corresponde:

  1. Paso 1 - Cedula + Correo: Busca en dbnegocio las 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.
  2. 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.
Si la cedula es de una sola empresa, la factura entra. No hay en cual confundirse: se acepta aunque el correo que trae no este en su correo de compras.

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.
No se pierde ninguna factura. Si el correo no permite saber de cuál empresa es, la factura queda en Pendientes de aceptación manual: cada empresa con esa cédula la ve en Compras → Aceptación de Compras y en el botón naranja de avisos del menú, y la que la reconoce la acepta con un clic. Y si esa dirección también es suya, agréguela a su correo de compras: de ahí en adelante esas facturas entran solas.
Una factura entra en una sola empresa. Si varias empresas comparten la misma cedula y la factura ya se acepto en una de ellas, no se acepta de nuevo en otra.
3

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.
4

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.

5

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.

6

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.

7

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

  1. Cargue los XML como siempre y marque los que va a devolver.
  2. Toque Rechazar. Se abre la ventana MC-020 con la lista de lo que va a rechazar.
  3. Escriba el motivo. Puede tocar uno de los motivos sugeridos y editarlo. El boton de confirmar no se enciende hasta que haya un motivo.
  4. 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:

BotonFuncionIntervalo
AutoDescarga XMLs de los buzones POP3Cada 41 segundos
Acept. AutoAcepta automaticamente los XMLs descargadosCada 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:

ColumnaFuenteColor
Cedula EmisorXMLGris
Nombre EmisorXMLBlanco
Email EmisorXMLAmarillo
Cedula ReceptorXMLGris
Email ReceptorXMLAmarillo
BDdbnegocio.serverdbAzul
Email BDdbnegocio.email_comprasPurpura
Matchemail (verde) / cedula (naranja)Variable
EstadoResultadoOK / 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:

  1. Fallback primario: Codigo 10 (IVA 0%)
  2. 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.

  1. Si el XML trae un tipo de cambio mayor a 1, se usa ese.
  2. 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.
  3. 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:

PasoValidacionError si falla
4i-1Todas las lineas deben tener cuenta contable asignada"N linea(s) sin cuenta contable"
4i-2Lineas 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 ParametrosEmpresa no 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

  1. Extrae del XML: Receptor.Identificacion.Numero (cédula) y Receptor.CorreoElectronico (emails)
  2. Busca en dbnegocio todas las empresas con esa cédula
  3. Por cada empresa, compara los emails del XML contra el email_compras (param 117) de la empresa
  4. Separa por , y ; (una empresa puede tener múltiples emails de compras configurados)
  5. 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:

  1. Buscar o crear proveedor en Proveedor (por cédula+moneda)
  2. Verificar que la factura no esté ya procesada (Estado NOT IN 0,1)
  3. Eliminar borradores previos (Estado 0 o 1)
  4. Insertar cabecera en CompraMadre (estado 0, tipo = posiciones 9-10 del consecutivo)
  5. Insertar líneas en CompraHija (valida código de tarifa IVA con fallback "10")
  6. Actualizar totales de CompraMadre con suma real de líneas
  7. Homologar artículos con ProveedorArticuloHomologacion + asignar CABYS + cuenta contable + ajustar UxM
  8. Insertar XML original en XmlDocumentos (Base64)
  9. Generar MensajeReceptor XML con clave y consecutivo tipo 05 (solo si la empresa tiene FE activa, param 125 = 1)
  10. Insertar confirmación en fac_bitacora (servidor del cliente; auto-registra en fac_compania si 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ódigoNombreQué autorizaDó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
Procesamiento automático El proceso de aceptación electrónica corre como un servicio de fondo (daemon POP3). No requiere permiso de usuario para ejecutarse, ya que opera con credenciales del sistema.

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ódigoNombreQué controlaValores
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
Cómo se asigna Lo asigna quien administre los permisos de usuario de su empresa, en Seguridad → Usuarios 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.