🔑 Guía

Cómo funciona la licencia

ROOT POS usa licencias firmadas digitalmente que funcionan sin internet. Esta guía tiene dos partes: la primera para el cliente (quien usa el sistema) y la segunda para el proveedor (quien vende e instala el sistema).

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

  1. La ventana muestra tu ID de equipo con un botón Copiar — envíaselo a tu proveedor si aún no tienes licencia.
  2. Cuando recibas tu licencia, pega el código en el cuadro de texto, o presiona "Seleccionar archivo…" y elige tu license.lic.
  3. 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.

✅ Tus datos no se pierden ni se borran: ventas, inventario y clientes siguen intactos en tu equipo. En cuanto actives una licencia válida, todo vuelve a estar disponible.

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?

  1. Consigue tu ID de equipo: aparece en la ventana de activación, en el instalador, o al abrir ROOT_POS.exe sin licencia.
  2. Envíaselo a tu proveedor junto con el nombre de tu negocio.
  3. Recibirás un código o archivo license.lic nuevo.
  4. 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.
⚠️ No edites el archivo license.lic. Cualquier modificación, aunque sea de una letra, invalida la firma digital y el sistema la rechazará.

Preguntas frecuentes

PreguntaRespuesta
¿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 computadoraEl 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):

  1. Tú tienes la clave privada (licensing_keys/license_private.pem). Con ella firmas licencias.
  2. La aplicación lleva incrustada la clave pública (en reflex_app/licensing.py). Con ella verifica las firmas.
  3. Una licencia es un token de una línea: ROOTPOS.<datos en base64>.<firma>. Los datos incluyen cliente, plan, fechas y equipo.
  4. Al arrancar, windows_launcher.py valida: 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:

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:

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

  1. Instalas ROOT POS en el equipo del cliente con Setup_ROOT_POS.exe.
  2. El instalador muestra el ID de equipo — anótalo.
  3. En tu máquina: issue --customer "..." --days 365 --machine <ID>.
  4. Copias el license.lic resultante a la carpeta de instalación del cliente (o lo seleccionas en el propio instalador).
  5. Para renovar: repites el issue con el mismo ID y reemplazas el archivo.

Seguridad de la clave privada

Desarrollo y pruebas

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.