Sistema Licencias Excel

Documentacion completa · boliviaimpuestos.com

Actualizado — Abril 2026

Links rapidos

Que es este sistema

Sistema de venta automatizada de Excels con licencia para boliviaimpuestos.com. El cliente paga via Yape Bolivia, el sistema detecta el pago automaticamente y genera un Excel personalizado con los datos del comprador.

Dominio: https://e.lexova.work/licenciasexcel/

Arquitectura del sistema

[Cliente web] [Celular con Yape] | | | 1. Ve producto | 2. Paga via QR Yape | escanea QR | v v index.php App Yape (BCP Bolivia) | | | 3. Polling | Notificacion de pago | cada 2s v v YapeListener (APK) check.php <--- BD <--- | ^ | 4. POST monto, | | remitente +------------ pago.php (registra pago) | | 5. Pago detectado! v activar.php | | 6. Marca pago como usado | 7. Genera Excel personalizado (Python) | 8. Crea licencia con token | 9. Sync Google Sheet v descargar.php?token=xxx (max 3 descargas)

Infraestructura

ComponenteUbicacionDetalle
Servidor produccion Droplet 3 root@165.227.81.34 (droplet-3-lexova-cosas)
Ruta web Droplet 3 /var/www/e.lexova.work/licenciasexcel/
Base de datos Droplet 3 MySQL licencias_excel, usuario licencias
Codigo fuente APK WSL local /home/beto/YapeListener/
Servidor anterior Droplet 2 root@146.190.65.66 — migrado, ya no tiene estos archivos
Dominio anterior e.taxlawbolivia.com (ya no activo para licencias)
Zona horaria: El servidor esta en UTC. Las fechas se convierten a Bolivia (UTC-4) en PHP via date_default_timezone_set('America/La_Paz') en config.php.

Archivos PHP del servidor

Archivos principales

ArchivoFuncion
config.php Config BD, password admin, timezone. Todas las paginas lo incluyen.
admin.php ADMIN Panel de administracion: productos, licencias, pagos, config Google Sheet
index.php PUBLICO Pagina de compra del producto. Muestra QR, formulario de datos, polling de pago
check.php API GET Verifica si hay pago disponible (monto >= precio, no usado, <30 min)
activar.php API POST Marca pago como usado, genera Excel personalizado, crea licencia, sync Google
pago.php API POST Recibe notificaciones de pago desde la APK YapeListener
api_pagos.php API GET Lista todos los pagos registrados (requiere token)
descargar.php PUBLICO Descarga Excel comprado via token hex (max 3 descargas)
generar_vbs.php INTERNO Genera script VBS para proteger Excel (uso de Roberto)

Scripts Python

ArchivoFuncion
scripts/generar_demo.py Genera Excel demo (solo lectura) desde el original. Usa openpyxl con data_only=True
scripts/generar_completo.py Genera Excel personalizado con nombre, NIT y celular del comprador

Estructura de directorios

/var/www/e.lexova.work/licenciasexcel/ ├── admin.php, index.php, config.php, ... ├── qr/ # Imagenes QR de pago por producto ├── scripts/ # Scripts Python de generacion │ ├── generar_demo.py │ └── generar_completo.py ├── descargas/ │ ├── originals/ # Excels originales subidos por admin │ ├── demos/ # Excels demo auto-generados (protegidos) │ └── compras/ # Excels personalizados por token ├── YapeListener.apk # APK V1 └── YapeListenerV2.apk # APK V2 (recomendada)

Base de datos MySQL

Base de datos: licencias_excel

Tabla: productos

CampoTipoDescripcion
idintID autoincremental
nombrevarcharNombre visible del producto
slugvarcharIdentificador unico (ej: Control_CF_IVA)
preciodecimalPrecio en Bs
qr_imagenvarcharNombre del archivo QR en /qr/
activotinyint1=activo, 0=inactivo
archivo_subidotinyint1=tiene Excel original subido

Tabla: licencias

CampoTipoDescripcion
idintID autoincremental
productovarcharSlug del producto
celularvarcharCelular del comprador
nombrevarcharNombre del comprador
nitvarcharNIT del comprador
contrasenavarchar(legacy, vacio en metodo excel)
metodovarchar"excel" o "password"
token_descargavarcharToken hex de 32 chars para descargar
descargadointContador de descargas (max 3)
activotinyint1=activa, 0=revocada
fecha_activaciondatetimeFecha de creacion (UTC en BD)

Tabla: pagos_recibidos

CampoTipoDescripcion
idintID autoincremental
app_origenvarcharSiempre "yape"
montodecimalMonto en Bs
mensajetextTexto completo de la notificacion
remitentevarcharNombre del remitente
usadotinyint0=disponible, 1=ya asignado a una licencia
fecha_recibidodatetimeTimestamp del pago (UTC en BD)

Panel Admin (admin.php)

Acceso: admin.php con password

Pestanas

PestanaFuncion
Licencias Lista de licencias emitidas. Revocar/reactivar. Ver nombre, NIT, celular, metodo, descargas, estado
Pagos Pagos recibidos via YapeListener. Auto-refresh cada 5s. Estado: usado/disponible
Productos CRUD productos. Subir Excel original (.xlsx), genera demo automaticamente. Editar precio, QR
Config URL de Google Apps Script para sync de facturacion

Flujo para agregar un nuevo producto

  1. Ir a Productos > "Agregar nuevo producto" (nombre, slug, precio, imagen QR)
  2. Click en "Editar" en el producto creado
  3. Subir el Excel Original (.xlsx) en la seccion "Subir Excel Original"
  4. El sistema genera automaticamente el demo protegido via generar_demo.py
  5. El producto aparece en index.php?producto=SLUG

Flujo de compra (detallado)

  1. Cliente abre index.php?producto=Control_CF_IVA
  2. Ve info del producto, precio y QR de Yape
  3. Puede descargar el demo gratis (Excel protegido, solo lectura)
  4. Escanea el QR y paga via Yape en su celular
  5. YapeListener (APK en otro celular) detecta la notificacion de pago
  6. APK envia POST a pago.php con monto, remitente y mensaje
  7. pago.php guarda el pago en pagos_recibidos (usado=0)
  8. La pagina del cliente hace polling a check.php cada 2 segundos
  9. check.php busca un pago disponible (monto >= precio, no usado, <30 min)
  10. Cuando detecta pago, el cliente llena formulario (nombre, NIT, celular)
  11. POST a activar.php que:
    • Marca el pago como usado=1
    • Ejecuta generar_completo.py para crear Excel personalizado
    • Crea licencia con token de descarga
    • Sync a Google Sheet (opcional)
  12. Cliente recibe link de descarga: descargar.php?token=abc123...
  13. Puede descargar max 3 veces

App Android - YapeListener

Para documentacion detallada de la APK: Ver documentacion YapeListener

Resumen

DatoValor
Codigo fuente/home/beto/YapeListener/ (WSL)
Packagecom.boliviaimpuestos.yapelistener
LenguajeJava
GradleAGP 8.5.1, compileSdk 35
Endpointhttps://e.lexova.work/licenciasexcel/pago.php
App Yape detectadacom.bcp.bo.wallet

Clases principales

ClaseFuncion
MainActivityUI: config URL/token, permisos, inicio/parada, log
YapeNotificationListenerPRIMARIO NotificationListenerService + foreground
YapeAccessibilityServiceFALLBACK Para Android 15+ (notifs censuradas)
SendPaymentWorkerWorkManager: envio HTTP con reintentos
BootReceiverReinicio automatico al encender
KeepAliveServiceWatchdog cada 3 min

Compilar la APK

# Desde WSL cd /home/beto/YapeListener ./gradlew assembleRelease # APK generada en: app/build/outputs/apk/release/app-release-unsigned.apk

Notas importantes

Duplicados: La APK tiene proteccion contra duplicados (ventana de 5 seg + mismo monto). Si dos personas pagan el mismo monto al mismo tiempo, el sistema podria asignar el pago a la primera que complete el formulario.