Printer Universal
Interconecta aplicaciones web con hardware de escritorio para imprimir
AtentiPOS es el punto de venta que convierte tu tienda en un negocio que vende más y se controla solo.
Qué incluye
Una tienda, un abarrote, una farmacia chica: cobrar rápido con lector de código de
barras, pesar a granel, fiar y cobrar después, cuadrar la caja y saber qué se
vendió.
AtentiPOS-MX hace eso. Lo que todavía no hace es timbrar el CFDI, y esa frase
está en el tercer párrafo de la ficha a propósito, no en la letra chica.
Es un producto en su versión 1.0.5, nacido de portar un POS chileno de
producción al mercado mexicano. El zip trae el fuente completo, el instalador y
el backend de licencias. 128.732 líneas de C# y AXAML que compilan sin un solo
error, contadas archivo por archivo y verificadas con dotnet build, no
estimadas.
Y aquí va la comparación desfavorable, delante y no escondida: easyRest tiene
diez versiones etiquetadas y cuarenta mil palabras de documentación. Esto tiene
cero y cero. Ni repositorio git, ni una sola prueba automatizada, ni un README.
Lo que hay es código —mucho— y esta página diciéndote exactamente en qué estado
está.
Si programas y vendes software
Tu cliente quiere un POS para su tienda y tú no quieres escribir por enésima vez
el carrito, el corte de caja y la impresión térmica.
Te llevas 80.461 líneas de C# sobre Avalonia y Firebird embebido, y con ellas
las partes que de verdad cuestan: el motor único de cálculo de venta que
reconcilia el encabezado con el detalle al céntimo, la impresión ESC/POS en 58 y
80 mm con diseño de ticket configurable, 44 migraciones de esquema con su tabla
de control, cuentas por cobrar y por pagar, promociones N×M, lealtad por puntos,
báscula por puerto serie y un sistema de permisos por rol.
Todo el código y todos los comentarios están en español.
Si tienes una tienda
Se instala en una tarde. Se entra con PIN. Cobra, descuenta stock, imprime
ticket, abre el cajón y cierra el turno con arqueo.
Pago único. Nadie te cobra renta mensual por cobrar en tu propio mostrador.
Pero lee la sección "lo que no hace" antes de decidir. Si necesitas factura
timbrada hoy, este programa todavía no te la da.
Dicho aquí arriba para que no pierdas el tiempo:
AtentiPOS-MX no se diseñó por lista de funciones. Hay tres invariantes que el
código defiende en varios sitios a la vez, y explican casi cada decisión rara que
vas a encontrar:
1 · La caja nunca deja de cobrar.
Ninguna función accesoria puede tumbar una venta. El motor de promociones y el de
sugerencias devuelven lista vacía ante cualquier excepción en vez de propagarla.
El buscador de productos nunca lanza a la UI. Y el control de licencia falla
abierto: el comentario en Services/LicenseService.cs:104 dice literalmente
"Fail-OPEN: nunca dejar la caja sin abrir por un bug de licencia", con 30 días
de gracia sin internet encima. Un POS que se cierra solo es un POS que se
desinstala el mismo día.
2 · El total es la suma de las líneas, o no es.
Hay un solo motor de cálculo (Services/VentaCalculadora.cs) y lo usan la
pantalla, el cobro, el INSERT y el ticket. El encabezado no se calcula aparte: se
define como la suma del detalle, de modo que Σ VENTADETALLE == VENTA por
construcción. El descuento global se reparte proporcional entre las líneas y el
residuo del redondeo se le asigna a la última línea, no se pierde. El IVA se
calcula línea por línea y sólo sobre las afectas.
3 · Lo que no se puede confirmar va en null. No se rellena.
El buscador de productos por código de barras cruza Open Food Facts con scraping
de corroboración, y su encabezado es explícito: "Todo lo que no se pueda
confirmar → se excluye o va null. NUNCA se inventan datos." Lo mismo hace el
emisor fiscal: con la emisión desactivada devuelve un error con su motivo escrito
en español, no un folio falso.
El peor fallo de un punto de venta no es el que se ve. Es el que da por timbrado
lo que no se timbró, o el que cuadra en pantalla y no cuadra en el detalle —
porque los dos devuelven un número plausible que nadie cuestiona hasta que llega
el contador, o el SAT.
En el mostrador
Al cobrar
Al cerrar el turno
Para saber cómo va el negocio
wa.me (abre la app del equipo; no esPara administrarlo
Todas estas cifras salen de contar archivos y líneas en el proyecto, hoy.
| | |
|---|---|
| La aplicación | 466 archivos de C# · 80.461 líneas |
| Las pantallas | 59 vistas Avalonia · 47.735 líneas de AXAML |
| La lógica de pantalla | 55 ViewModels · 24.916 líneas · 545 comandos |
| Los servicios | 53 servicios de dominio · 13.860 líneas |
| La impresión | 22 archivos · 12.078 líneas (ESC/POS 58 y 80 mm, PDF, etiquetas) |
| El esquema de datos | 44 migraciones · 3.648 líneas · 71 tablas · 237 índices |
| El sistema de diseño | 536 líneas de AXAML · 44 brushes con nombre · 34 estilos |
| El backend de licencias | 12 archivos PHP sobre Laravel · 974 líneas |
| El instalador | proyecto de Advanced Installer + Install_AtentiPOS.exe |
| La documentación | 784 palabras, y son el INSTALL del backend |
| El historial de versiones | no hay |
128.732 líneas entre C# y AXAML, en 526 archivos. Ponle tú el número de
meses. Ése es el precio real de esta página.
Un detalle que dice más que el total: el código detrás de las 59 vistas suma
2.061 líneas para 47.735 de AXAML. La lógica está en los ViewModels, no
pegada a los controles. Eso es lo que hace que se pueda modificar.
1 · Un motor de temas de verdad, no un interruptor claro/oscuro.
Cinco paletas completas (Oscuro, Verde claro, Morado gris, Rojo negro, Azul
blanco) y 22 claves de color editables desde dentro de la aplicación, que se
guardan en la tabla CONFIGURACION y se aplican en caliente sobre los brushes
con nombre. Para ponerle a un cliente sus colores no hay que recompilar ni tocar
un archivo. Es la pieza más reutilizable del zip en otros proyectos Avalonia.
2 · Un buscador de productos que se niega a inventar.
Escaneas un código que no tienes dado de alta y la app sale a buscarlo: Open Food
Facts como fuente estructurada, más scraping de corroboración. Sólo etiqueta como
verificado lo que concuerda en dos fuentes independientes; el resto se
excluye o queda en null, y una nota te dice cuántos de los diez esperados faltan
y por qué. Ese comentario de "NUNCA se inventan datos" está escrito tres veces en
el código, en tres archivos distintos.
3 · El sistema de licenciamiento viene completo y por los dos lados.
La aplicación lleva sólo la clave pública: puede verificar tokens, nunca
falsificarlos. El servidor que los firma es un backend Laravel de 974 líneas que
también va en el zip, con su generador de claves y su panel. Huella de hardware
por SHA-256 de identificadores del equipo, 60 días de prueba, 30 de gracia
offline. Si vendes software, esto solo te ahorra una semana — y si no lo quieres,
está en un servicio aislado y se quita.
La cuarta, de propina: 44 migraciones de esquema con su tabla
MIGRATION_CONTROL,
escritas a mano porque Firebird hace commit implícito en DDL y no se pueden
envolver en una transacción. Está comentado en el código, con el porqué.
Ésta es la sección larga, y es la razón de ser de la página. Léela entera: si
algo de aquí es imprescindible para ti, no compres.
EmisionActiva = false y devuelve siempre "Emisión de CFDI 4.0 noFISCAL_HABILITADO=0. No están rotos: están ocultos a propósito. PeroAssert en lasAppInfo.cs dice 1.0.5 yLicenseService.cs manda 1.0.7 al servidor. Es un descuido pequeño y loSystem.Security.Cryptography.Xml 10.0.8. dotnet restore lo grita cada vez..FDB con la aplicaciónSUCURSAL y SYNCCONTROL, pero la sincronización noMath.Round(x, 0). Se creó un Money.Round central a 2Money.Round frente a 22 Math.Round(x, 0)bin\Debug\net8.0 y empaqueta el .pdb. Funciona,AppInfo.Web sigue diciendo uvo.cl. SeSobre Firebird embebido, porque es donde más gente se estrella. La base no es
un servidor: es un archivo .FDB junto al programa, y el motor va como
bibliotecas nativas al lado del ejecutable — fbclient.dll, ib_util.dll,
fbintl, y las tres de ICU con su icudt63l.dat de 27 MB. Si copias el
ejecutable sin ese acompañamiento, la aplicación arranca y falla al abrir la base
sin decirte que le falta una DLL. Por eso hay instalador: úsalo, o replica su
lista de archivos exactamente. El zip incluye una base ya migrada y una base en
blanco para arrancar de cero.
AtentiPOS-MX se publica ahora. No tengo clientes mexicanos que enseñarte y no
pienso fabricar reseñas ni contar instalaciones.
Y voy más lejos, porque este producto es más joven de lo que su tamaño sugiere
y sería facilísimo disimularlo detrás de 128.732 líneas: esas líneas vienen en
buena parte de un POS chileno en producción, y el trabajo mexicano encima —moneda,
IVA al 16 %, RFC, direcciones, compras, temas— es reciente y no está probado en
campo.
Lo único que puedo enseñarte es lo que se puede verificar: el código, una
compilación con cero errores y esta lista de limitaciones. No hay diez versiones
etiquetadas detrás, ni cuarenta mil palabras de documentación, ni 42 pruebas
automatizadas. Hay un sistema grande, con costuras, y una página que te las
enseña.
Un testimonio se escribe en un minuto. Ciento veintiocho mil líneas, no.
Un zip con el código fuente completo de la aplicación, el proyecto del
instalador, el backend Laravel de licencias y la base de datos de arranque.
Versión 1.0.5. Acceso de por vida a las actualizaciones que se publiquen —
sabiendo que el autor no se obliga a publicar ninguna.
Lo que la licencia te deja hacer
Todavía no hay valoraciones. Si lo compras, la tuya será la primera.