mirror of
https://github.com/escalante29/WealthySmart.git
synced 2026-07-17 14:28:47 +02:00
Two bugs from prod (server clock is UTC, user is UTC-6): - get_recent_transactions returned future-dated Tasa Cero cuotas; it now excludes anything dated after the user's today, same rule as /transactions/recent. - "¿Cuánto he gastado hoy?" answered for the wrong day: the prompt baked date.today() in at boot — frozen from startup AND in server-UTC (8 pm in Costa Rica is already tomorrow in UTC). The prompt no longer carries a date; a new get_current_date tool returns today in CR time plus the active billing cycle, and the prompt directs the model to call it for any relative date reference. today_cr() lives in timeutil (CR has no DST, fixed UTC-6). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
28 lines
1.0 KiB
Python
28 lines
1.0 KiB
Python
from datetime import date, datetime, timedelta, timezone
|
|
|
|
# Costa Rica has no DST; a fixed offset is exact year-round.
|
|
CR_TZ = timezone(timedelta(hours=-6))
|
|
|
|
|
|
def today_cr() -> date:
|
|
"""Current date in Costa Rica (UTC-6).
|
|
|
|
The server clock is UTC — at 6 pm in Costa Rica it is already "tomorrow"
|
|
in UTC. Anything user-facing that means "today" (agent answers, date
|
|
defaults) must come from here, never date.today().
|
|
"""
|
|
return datetime.now(CR_TZ).date()
|
|
|
|
|
|
def utcnow() -> datetime:
|
|
"""Naive UTC now, via the non-deprecated API.
|
|
|
|
Every datetime column in the schema is TIMESTAMP WITHOUT TIME ZONE, so the
|
|
whole app speaks naive-UTC. Replacing datetime.utcnow() call sites with
|
|
this helper removes the Python 3.12 deprecation without changing any
|
|
stored value or comparison. When the columns move to TIMESTAMPTZ
|
|
(Phase 2), this becomes `datetime.now(timezone.utc)` and the type change
|
|
happens in exactly one place.
|
|
"""
|
|
return datetime.now(timezone.utc).replace(tzinfo=None)
|