Parte 1 — Para el cliente
¿Qué es la licencia?
Es un archivo llamado license.lic que autoriza el uso de ROOT POS. Contiene, de forma firmada e inalterable:
- El nombre de tu negocio
- La fecha de vencimiento (o "perpetua" si no vence)
- Opcionalmente, el equipo autorizado (la licencia solo funciona en esa computadora)
- Un número de licencia único
El sistema la revisa cada vez que arranca. No necesita internet: la validación es local.
¿Dónde va el archivo?
En la misma carpeta donde está ROOT_POS.exe, con el nombre exacto license.lic. Si instalaste con el instalador oficial, esa carpeta es:
C:\Users\<tu usuario>\AppData\Local\ROOT_POS
El instalador también te permite seleccionar el archivo de licencia durante la instalación, para no tener que copiarlo a mano.
Prueba gratuita de 5 días
No necesitas licencia para empezar: al instalar, ROOT POS funciona completo durante 5 días en modo de prueba. El periodo cuenta desde la primera vez que lo abres. Al terminar la prueba, el sistema pide la licencia — tus datos (ventas, inventario, clientes) permanecen intactos y vuelven a estar disponibles al activarla.
¿Cómo activo la licencia?
Si abres ROOT POS sin licencia una vez agotada la prueba (o con una licencia vencida), aparece la ventana de activación:
- La ventana muestra tu ID de equipo con un botón Copiar — envíaselo a tu proveedor si aún no tienes licencia.
- Cuando recibas tu licencia, pega el código en el cuadro de texto, o presiona "Seleccionar archivo…" y elige tu
license.lic. - Presiona Activar. Si la licencia es válida, el sistema la guarda y continúa arrancando de inmediato.
Si la licencia no corresponde (vencida, de otro equipo, alterada), la ventana te explica el motivo exacto para que se lo comuniques a tu proveedor.
Avisos de vencimiento
Desde 15 días antes del vencimiento, el sistema te avisa al arrancar cuántos días quedan, para que renueves con tiempo y sin interrupciones.
¿Cómo renuevo o pido una licencia?
- Consigue tu ID de equipo: aparece en la ventana de activación, en el instalador, o al abrir
ROOT_POS.exesin licencia. - Envíaselo a tu proveedor junto con el nombre de tu negocio.
- Recibirás un código o archivo
license.licnuevo. - Actívalo en la ventana de activación (pegar código o seleccionar archivo), o reemplaza el archivo anterior en la carpeta de instalación y vuelve a abrir el sistema.
license.lic. Cualquier modificación, aunque sea de una letra, invalida la firma digital y el sistema la rechazará.Preguntas frecuentes
| Pregunta | Respuesta |
|---|---|
| ¿Puedo probar el sistema antes de comprar? | Sí: funciona completo 5 días desde el primer arranque, sin licencia. |
| ¿Necesito internet para activar? | No. Todo es local. |
| ¿Puedo usar la misma licencia en dos computadoras? | Solo si la licencia no está atada a un equipo. Las licencias atadas funcionan únicamente en el equipo autorizado. |
| Formateé mi PC / cambié de computadora | El ID de equipo cambia. Pide a tu proveedor una licencia nueva con el ID nuevo. |
| ¿La licencia limita ventas o usuarios? | No. Solo controla la vigencia y el equipo. |
| Cambié la fecha de la PC, ¿pasa algo? | La validación usa la fecha del sistema; mantén la fecha correcta para evitar rechazos accidentales. |
Parte 2 — Para el proveedor
Cómo funciona por dentro
El esquema es firma digital Ed25519 (criptografía de clave pública):
- Tú tienes la clave privada (
licensing_keys/license_private.pem). Con ella firmas licencias. - La aplicación lleva incrustada la clave pública (en
reflex_app/licensing.py). Con ella verifica las firmas. - Una licencia es un token de una línea:
ROOTPOS.<datos en base64>.<firma>. Los datos incluyen cliente, plan, fechas y equipo. - Al arrancar,
windows_launcher.pyvalida: firma → vencimiento → equipo. Si algo falla, el sistema no inicia y explica por qué.
Como el cliente no tiene la clave privada, no puede crear ni modificar licencias: cualquier cambio en el token rompe la firma.
El ID de equipo
Se deriva del identificador único de Windows (MachineGuid) pasado por SHA-256, en formato XXXX-XXXX-XXXX-XXXX. Lo muestran:
- El instalador, en la página de licencia.
ROOT_POS.exeal arrancar sin licencia válida.- El comando
python scripts/license_admin.py machine-id(en el equipo consultado).
Administrador de Licencias (interfaz gráfica)
La forma más fácil de emitir licencias es el Administrador de Licencias: doble clic en Administrador_Licencias.bat (raíz del proyecto) o python scripts/license_manager_gui.py. Desde ahí puedes:
- Registrar al cliente con nombre, teléfono y correo (los datos viajan dentro de la licencia firmada y quedan en tu registro).
- Elegir vigencia en días o perpetua, plan e ID de equipo (con botón "Este equipo").
- Emitir y guardar el archivo
.lic, con el código copiado automáticamente al portapapeles para enviarlo por WhatsApp o correo. - Verificar cualquier archivo de licencia.
- Ver el historial de licencias emitidas y renovar con un clic (rellena el formulario con los datos del cliente).
El historial se guarda en licensing_keys/registro_licencias.csv (privado, fuera de git; se abre en Excel).
Comandos del día a día (alternativa por terminal)
# Ver el ID del equipo actual
python scripts/license_admin.py machine-id
# Licencia anual atada a un equipo (lo habitual para clientes)
python scripts/license_admin.py issue --customer "Taller López" --days 365 --machine A355-BCB9-994F-1D03
# Licencia perpetua sin atar a equipo
python scripts/license_admin.py issue --customer "Taller López" --perpetual
# Con plan y archivo de salida específicos
python scripts/license_admin.py issue --customer "Taller López" --days 30 --plan demo --output C:\entregas\lopez.lic
# Verificar cualquier archivo de licencia
python scripts/license_admin.py inspect license.lic
Flujo de venta típico
- Instalas ROOT POS en el equipo del cliente con
Setup_ROOT_POS.exe. - El instalador muestra el ID de equipo — anótalo.
- En tu máquina:
issue --customer "..." --days 365 --machine <ID>. - Copias el
license.licresultante a la carpeta de instalación del cliente (o lo seleccionas en el propio instalador). - Para renovar: repites el
issuecon el mismo ID y reemplazas el archivo.
Seguridad de la clave privada
licensing_keys/license_private.pemes el activo más importante: quien la tenga puede emitir licencias ilimitadas.- Nunca la incluyas en el instalador, en
dist/, ni en respaldos que entregues a clientes. Ya está excluida de git (.gitignore) y del empaquetado de PyInstaller. - Guarda una copia de respaldo en un lugar seguro (USB cifrada, gestor de contraseñas): si la pierdes, no podrás emitir licencias compatibles con los ejecutables ya entregados.
- Si se filtrara: genera claves nuevas (
gen-keys), actualizaPUBLIC_KEY_PEMenreflex_app/licensing.py, recompila y redistribuye; las licencias viejas dejarán de validar en los ejecutables nuevos.
Desarrollo y pruebas
- En tu máquina de desarrollo ya hay una licencia perpetua (
license.licen la raíz del proyecto) atada a tu equipo. reflex run(modo desarrollo) no pasa por el launcher, así que no exige licencia.run_production.baty el.exesí la exigen. Para saltarla temporalmente en una instalación desde código fuente, agregaROOT_POS_LICENSE_SKIP=1al.env. El ejecutable compilado ignora esa variable: en el.exela licencia siempre se verifica.
Alcance honesto del esquema
Esta protección es disuasiva, no inviolable — como toda licencia offline. Un usuario técnico con acceso al binario podría alterarlo. Para un punto de venta comercial este nivel es el estándar práctico: impide compartir licencias entre clientes, controla vigencias y evita alteraciones casuales, sin molestar al cliente legítimo con activaciones por internet.