PETICIONES SCANNTECH - SISTEMASTOCK
===================================

OBJETIVO
--------
Consultar automaticamente, dos veces por dia, las solicitudes de reenvio que
Scanntech deja en:

- GET /solicitudes/movimientos
- GET /solicitudes/cierresDiarios

Si Scanntech pide una fecha/caja, el modulo reconstruye los datos historicos
y los reenvia automaticamente al endpoint POST correspondiente.

MUY IMPORTANTE - MYSQL SOLO LECTURA
-----------------------------------
Este modulo NO escribe en MySQL.
Las consultas SQL que ejecuta son solamente SELECT.

NO hace INSERT.
NO hace UPDATE.
NO hace DELETE.
NO hace CREATE/ALTER/DROP.
NO crea tablas de log.

Los logs del modulo se guardan como archivos de texto dentro de:
  peticiones/logs/

INSTALACION
-----------
1) Subir la carpeta completa "peticiones" dentro de la raiz del sistema.

   Estructura esperada:

     /sistema/
       concha.php
       peticiones/
       resincronizar/
       ...

2) NO copiar URLs ni claves Scanntech dentro de peticiones.
   El modulo carga ../concha.php y toma de ahi:

     $scan
     $url
     $url2
     $username
     $password
     $host
     $usuario
     $contra
     $basedatos

URLS TEST / PRODUCCION
----------------------
Actualmente concha.php puede tener, por ejemplo:

  $url  = "http://test.parceiro.scanntech.com/api-minoristas/api/v2/minoristas/201917/locales/1/cajas/1/movimientos";
  $url2 = "http://test.parceiro.scanntech.com/api-minoristas/api/v2/minoristas/201917/locales/1/cajas/1/cierresDiarios";

El modulo NO tiene test.parceiro.scanntech.com hardcodeado.
Extrae automaticamente de $url/$url2:

- protocolo y servidor
- idEmpresa
- idLocal
- idCaja

Y construye:

  GET {MISMO_HOST}/api-minoristas/api/v2/minoristas/{empresa}/locales/{local}/solicitudes/movimientos
  GET {MISMO_HOST}/api-minoristas/api/v2/minoristas/{empresa}/locales/{local}/solicitudes/cierresDiarios

Luego reenvia a los endpoints de caja derivados del mismo concha.php.

Cuando Scanntech entregue las URLs de PRODUCCION, solamente se cambian $url y
$url2 en concha.php. No hay que modificar ningun archivo de peticiones/.

FLUJO
-----
1) cron.php carga ../concha.php.
2) Consulta solicitudes de MOVIMIENTOS.
3) Si hay solicitudes, lee las ventas solicitadas con SELECT y las reenvia.
4) Consulta solicitudes de CIERRES_DIARIOS.
5) Si hay solicitudes, calcula el cierre historico con SELECT y lo reenvia.
6) Registra el resultado en peticiones/logs/.
7) Termina.

CAJAS
-----
- Si Scanntech informa codigoCaja, se procesa solamente si coincide con la
  caja configurada en $url/$url2 de esta instalacion.
- Si codigoCaja viene null/no viene, esta instalacion reenvia su caja
  configurada.
- Nunca se cambian datos de una caja para hacerlos pasar por otra.

MOVIMIENTOS
-----------
La reconstruccion sigue el criterio de la carpeta resincronizar existente:
ventas + movimientos + articulos + promos_aplicadas.

Las ventas que actualmente figuran ANULADAS se omiten si no existe informacion
historica suficiente para reconstruir de manera confiable el movimiento de
cancelacion. El modulo no inventa datos.

CIERRES DIARIOS
---------------
Reconstruye los datos historicos de la fecha solicitada usando SELECT sobre
la tabla caja y envia:

  fechaVentas
  montoVentaLiquida
  montoCancelaciones
  cantidadMovimientos
  cantidadCancelaciones

Si no existe historial de caja para esa fecha, NO inventa un cierre desde otras
tablas: registra el error en el archivo de log y no hace el POST.

SEGURIDAD
---------
- Tiene bloqueo con flock para que no corran dos peticiones simultaneamente.
- Tambien toma los locks existentes de apertura/cierre de jornada Scanntech para evitar solapamiento con esos procesos.
- cron.php por navegador exige clave.
- Por CLI no exige clave.
- Los archivos internos y logs quedan bloqueados por .htaccess.
- Verifica que $url y $url2 correspondan a la misma empresa/local/caja antes
  de operar.

CRON
----
Scanntech pide realizar la consulta dos veces al dia.

Opcion recomendada por CLI:

  php /RUTA/DEL/SISTEMA/peticiones/cron.php

Ejemplo, 10:15 y 22:15:

  15 10,22 * * * php /RUTA/DEL/SISTEMA/peticiones/cron.php >/dev/null 2>&1

Elegir horarios que no coincidan con otros CRON Scanntech del sistema.

Si el hosting solamente permite URL:

  https://TU-DOMINIO/peticiones/cron.php?clave=f38a53ad825b94087faee7854acb76a97588a7a504a2a337

ARCHIVOS
--------
cron.php       ejecuta todo el proceso
bootstrap.php  carga ../concha.php y conecta MySQL
lib.php        GET, SELECT, reconstruccion, POST y logs a archivo
config.php     clave del cron y limites
index.php      evita navegacion directa
.htaccess      protege archivos internos
logs/          auditoria en archivos, sin base de datos
