Files
autoficher/requirements.txt
omar f2ed694f98 feat: comando /grafico con cinco visualizaciones
Cinco graficos generados con matplotlib y enviados como foto a Telegram, con
botones para elegir. La paleta es la de referencia del proyecto, validada con el
comprobador de daltonismo en claro y oscuro (peor par CVD delta-E 24.7 / 26.8,
umbral 8).

- saldo        acumulado (linea) + saldo de cada dia (barras), dos paneles
- puntualidad  desviacion de cada entrada en el tiempo. Es el que explica el
               problema de un vistazo: en 6 meses no hay ni un solo punto por
               debajo de cero, o sea que nunca se ha llegado antes de la hora
- horas        histograma de la hora de entrada, historico frente a planificado.
               Las dos distribuciones no se solapan en absoluto
- regalado     minutos al mes presente sin que corra el reloj
- prevision    linea de tiempo de los proximos dias con la franja que cuenta

Un PNG no tiene hover, asi que las cifras que en una pagina resolveria el
tooltip van en el pie de foto y en etiquetas directas sobre las marcas.

Al mirarlos renderizados aparecieron cuatro defectos que el codigo no delata:
titulo y subtitulo pisandose, la etiqueta del peor dia chocando con el eje de
fechas, un dia de +64 min aplastando el resto del eje contra el cero, y un bug
de formato que pintaba "09:64" en vez de "10:04". Corregidos: ejes acotados con
los valores extremos anotados aparte, y las horas formateadas con un helper.

Executor.historico() extrae los dias de varios meses ya parseados; el servicio
lo cachea media hora porque son seis llamadas a la API.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-24 20:05:20 +02:00

72 lines
1.3 KiB
Plaintext

anyio==3.7.1
APScheduler==3.6.3
attrs==20.3.0
cached-property==1.5.2
cachetools==4.2.2
certifi==2020.6.20
cffi
chardet==4.0.0
charset-normalizer==3.4.3
cryptography==41.0.5
decorator==4.4.2
dnspython==2.0.0
docker==4.1.0
docker-compose==1.25.0
dockerpty==0.4.1
docopt==0.6.2
exceptiongroup==1.1.2
ffmpeg-python==0.2.0
future==0.18.3
google-api-core==2.12.0
google-api-python-client==2.102.0
google-auth==2.23.2
google-auth-httplib2==0.1.1
google-auth-oauthlib==1.1.0
googleapis-common-protos==1.60.0
h11==0.14.0
httpcore==0.17.3
httplib2==0.22.0
httpx==0.24.1
idna==2.10
imageio==2.31.1
imageio-ffmpeg==0.4.8
importlib-metadata==1.6.0
jsonschema==3.2.0
more-itertools==4.2.0
moviepy==1.0.3
numpy
oauthlib==3.2.2
paho-mqtt==1.6.1
pandas==2.3.3
Pillow
proglog==0.1.10
prompt-toolkit==3.0.39
protobuf==4.24.4
pyasn1==0.5.0
pyasn1-modules==0.3.0
pycparser==2.21
pyparsing==3.1.1
pyrsistent==0.15.5
python-crontab==3.0.0
python-dateutil==2.8.2
python-telegram-bot>=22.0 # <22 rompe en Python 3.13 (__slots__ en Updater)
pytz
PyYAML
requests==2.32.3
requests-oauthlib==1.3.1
rsa==4.9
six==1.16.0
sniffio==1.3.0
speedtest-cli==2.1.3
texttable==1.6.3
tornado==6.1
tqdm==4.65.0
tzdata==2025.2
tzlocal==5.0.1
uritemplate==4.1.1
urllib3==1.26.5
wcwidth==0.2.8
websocket-client==0.57.0
zipp==1.0.0
matplotlib>=3.8