Bot de Telegram para monitoreo de notificaciones judiciales del PJ Paraguay. Multi-tenant con onboarding conversacional, audit log, y polling automático. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2.1 KiB
TECH_DEBT.md — Deuda técnica
Deuda técnica conocida y aceptada en v0. Cada ítem se migra en v1 salvo indicación contraria.
Alta prioridad (migrar antes de agregar más usuarios)
TD-001: Fernet single-key en lugar de envelope encryption
Descripción: Las credenciales usan Fernet con una sola clave maestra en .env.
En v1 se reemplaza por envelope encryption (DEK por tenant + MK separada).
Impacto: Si la FERNET_KEY se compromete, todas las credenciales son vulnerables.
Mitigation actual: El .env nunca va al repo; la key no está en el código.
Destino: app/vault/ en v1 (ver docs/ARCHITECTURE.md §6).
TD-002: Snapshot en JSON local sin concurrencia
Descripción: storage.py lee/escribe un JSON sin locks. Con un solo proceso no hay problema.
Impacto: Cero en v0 (single process). Race condition posible en v1 (multi-worker).
Destino: Reemplazar por Postgres con transacciones en v1.
TD-003: Sin refresh token implementado
Descripción: Cuando el bearer token expira (TTL 1h), el cliente hace relogin completo. El endpoint de refresh token no fue capturado en el reconocimiento. Impacto: Relogin extra cada hora (costo ~0 ya que no hay captcha). Destino: Capturar el endpoint en sesión 2 de reconocimiento e implementar.
Baja prioridad (mejoras futuras)
TD-004: aiogram en lugar de python-telegram-bot
Descripción: aiogram tiene FSM nativo más robusto y mejor async que python-telegram-bot. Impacto: Cero en v0 (no usamos FSM complejo). Relevante cuando el bot tenga flujos multi-paso. Decisión: Evaluar al inicio de v1. No migrar en v0.
TD-005: structlog sin filtro global de credenciales
Descripción: scrub() existe pero se llama manualmente en cada log.
Sería más seguro registrarlo como processor global de structlog.
Destino: En v1, registrar como processor en la configuración de structlog.
TD-006: Sin tests de integración reales
Descripción: Los tests unitarios usan mocks. No hay tests que peguen al PJ real.
Decisión aceptada: Tests contra el PJ real son @pytest.mark.manual por diseño.
Última actualización: 2026-05-20