Three bugs fixed:
1. TelegramBotService queried Cuentas by tarifa_id + estado=activo which
never matched. Now uses CuentasHelper::contar/buscar — same date-range
+ historial-count logic as the web (pendiente for full accounts,
activo + slot check for per-screen accounts).
2. efectivePrice in TelegramBotService and PublicChat used the Preferencial
table (legacy) instead of Usuario_tarifa (used by the web admin panel).
CuentasHelper::precio checks Usuario_tarifa first, Preferencial as fallback.
3. payWithSaldo compared saldo against tarifa->valor (base price) instead of
the effective price stored in state. Also registered the purchase with the
wrong amount.
Extract shared logic to CuentasHelper (contar, buscar, precio) to avoid
duplication between TelegramBotService and PublicChat.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>