Files
temetro/backend/drizzle/meta/_journal.json
T
Khalid Abdi 3aa699aefe feat: clinic-wide AI (analytics/earnings/inventory + invoice-from-file),
real Live card, persistent chat history

Analytics & earnings:
- Analytics now carries real money computed from invoices (billed/paid/
  outstanding + by-month); new Earnings section on the Analysis page drawn with
  the project's Bklit chart components (shared EarningsChart).

AI agent reaches the whole clinic:
- new read tools getClinicInfo / getAnalytics / listInventory render clinic,
  analytics (with a Bklit earnings chart) and inventory cards in chat
- proposeInvoice turns an uploaded purchase/medication list into an invoice
  (new "invoice" action-preview kind → createInvoice); invoices/appointments
  auto-create/link a patient (ensurePatient) so they hit the Patients page

Live card:
- plots real data — patients checked in today — via GET /api/analytics/live
  (polled); value pill clamped and margins widened so nothing spills the card

Persistent AI chat history (Claude-style):
- ai_chat_threads + ai_chat_messages (migration 0016); per-user, org-scoped
  thread CRUD under /api/chat/threads
- chat panel owns a thread id, loads /?thread=<id>, and auto-saves after each
  exchange; sidebar lists past chats (open/delete), "New chat" starts fresh

Verified with backend typecheck + frontend tsc + next build.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 22:25:15 +03:00

125 lines
2.5 KiB
JSON

{
"version": "7",
"dialect": "postgresql",
"entries": [
{
"idx": 0,
"version": "7",
"when": 1780413912874,
"tag": "0000_small_sir_ram",
"breakpoints": true
},
{
"idx": 1,
"version": "7",
"when": 1780591375930,
"tag": "0001_boring_puck",
"breakpoints": true
},
{
"idx": 2,
"version": "7",
"when": 1780849813505,
"tag": "0002_fluffy_longshot",
"breakpoints": true
},
{
"idx": 3,
"version": "7",
"when": 1780850147682,
"tag": "0003_lame_rawhide_kid",
"breakpoints": true
},
{
"idx": 4,
"version": "7",
"when": 1780850364853,
"tag": "0004_dizzy_scarlet_spider",
"breakpoints": true
},
{
"idx": 5,
"version": "7",
"when": 1780850717058,
"tag": "0005_true_gwen_stacy",
"breakpoints": true
},
{
"idx": 6,
"version": "7",
"when": 1780856647280,
"tag": "0006_square_wither",
"breakpoints": true
},
{
"idx": 7,
"version": "7",
"when": 1780933857005,
"tag": "0007_skinny_bloodstrike",
"breakpoints": true
},
{
"idx": 8,
"version": "7",
"when": 1780937195597,
"tag": "0008_luxuriant_blue_blade",
"breakpoints": true
},
{
"idx": 9,
"version": "7",
"when": 1781022080228,
"tag": "0009_melted_puck",
"breakpoints": true
},
{
"idx": 10,
"version": "7",
"when": 1781111039837,
"tag": "0010_eager_hellfire_club",
"breakpoints": true
},
{
"idx": 11,
"version": "7",
"when": 1781196252617,
"tag": "0011_remap_viewer_to_member",
"breakpoints": true
},
{
"idx": 12,
"version": "7",
"when": 1781279151289,
"tag": "0012_wonderful_terrax",
"breakpoints": true
},
{
"idx": 13,
"version": "7",
"when": 1781364502603,
"tag": "0013_strange_medusa",
"breakpoints": true
},
{
"idx": 14,
"version": "7",
"when": 1781454115877,
"tag": "0014_youthful_aqueduct",
"breakpoints": true
},
{
"idx": 15,
"version": "7",
"when": 1781455848772,
"tag": "0015_polite_captain_marvel",
"breakpoints": true
},
{
"idx": 16,
"version": "7",
"when": 1781464772532,
"tag": "0016_past_maestro",
"breakpoints": true
}
]
}