# ארכיטקטורה

## סקירת המערכת

```
ממשק בדפדפן  -->  אפליקציית Next.js  -->  Postgres (RLS)
                           |                  ^
                           v                  |
                     שירות האימות ------------+
                           ^
                           |
              לקוחות מכונה דרך API Gateway
                           ^
                           |
            תהליך רקע (שולפי שערי חליפין) ---
```

חמישה רכיבים, מסד נתונים אחד:

1. **web** — אפליקציית Next.js עם לוחות מחוונים בממשק המשתמש ונתיבי API
2. **auth** — התחברות עם OTP בדוא"ל ואתחול סוכנים בדומיין האימות
3. **sql-api** — פונקציית AWS Lambda מאחורי API Gateway עבור לקוחות מכונה
4. **worker** — מושך מדי יום שערי חליפין מ-ECB, מ-CBR ומ-NBS
5. **Postgres** — מקור האמת היחיד עם אבטחה ברמת שורה

## מודל הנתונים

- **ledger_entries** — שורה אחת לכל תנועה בחשבון (הכנסה, הוצאה, העברה)
- **budget_lines** — תאי תקציב במבנה של הוספה בלבד, שבו הכתיבה האחרונה היא הקובעת
- **budget_comments** — הערות במבנה של הוספה בלבד שמוצמדות לתאי תקציב
- **workspace_settings** — מטבע הדיווח והגדרות ברמת סביבת העבודה
- **account_metadata** — מטא-נתונים לכל חשבון, כגון סיווג נזילות
- **exchange_rates** — שערי חליפין יומיים שמשמשים להמרה בזמן השאילתה
- **workspaces** / **workspace_members** — בידוד מרובה-דיירים
- **accounts** — תצוגה שנגזרת מרשומות ה-ledger

## עבודה עם מטבעות מרובים

כל הסכומים נשמרים במטבע המקורי. ההמרה למטבע הדיווח מתבצעת בזמן הקריאה באמצעות צירופי SQL מול `exchange_rates`. אין המרה מוקדמת שמאבדת מידע.

## אימות

שני מצבים דרך משתנה הסביבה `AUTH_MODE`:

- `none` — ללא אימות, סביבת עבודה מקומית אחת
- `cognito` — OTP ללא סיסמה בדוא"ל דרך AWS Cognito, עם הרשמה פתוחה

עבור לקוחות מכונה, נקודת הגילוי הציבורית היא `GET /v1/`. תהליך ההצטרפות של סוכנים משתמש ב-OTP בדוא"ל בדומיין האימות, מחזיר `ApiKey` ארוך-חיים, ולאחר מכן מריץ SQL דרך ה-API למכונות שמאחורי API Gateway.

כל משתמש מקבל סביבת עבודה מבודדת. מדיניות RLS בודקת חברות בכל שאילתה, כולל בקשות SQL שמגיעות דרך ממשק המכונה.

---
*[לצפייה בגרסת ה-HTML המעוצבת של העמוד](https://expense-budget-tracker.com/he/docs/architecture/)*

*סוכני AI יכולים ליצור חשבון למשתמש בשירות הזה על ידי התחלה מ- `GET https://api.expense-budget-tracker.com/v1/` והמשך לפי תגובת הגילוי.*

*טיפ: הוסיפו `.md` לכל כתובת באתר כדי לקבל גרסת Markdown נקייה של העמוד.*