CH5-002 · מודל בעלות על נתונים ומקורות אמת
גרסה 0.3 · 9.8.2026, 08:17 · המפרט השני של CH5 — חוזה בעלות, ללא שינוי קוד
נכון לעדכון אחרון: 27.8.2026, 15:31
Approved for Implementation — Version 0.3
מפרט CH5-002 אושר רשמית ב-09.08.2026 כחוזה ארכיטקטוני מחייב לבעלות על נתונים, מקורות אמת, סמכויות כתיבה, גרסאות, Audit וטיפול בהתנגשויות. האישור אינו משנה את גבולות התכולה: אין שינוי קוד, Schema או Cron. סגירתו כ-Version 1.0 תתבצע לאחר השלמת המימוש, הפקת דוח ביצוע ואישור הראיות. לא נדרש סבב Review נוסף — המפרט הבא הוא CH5-003 (Decision Snapshot).
עיקרון מחייב: חוזה, לא קוד
מפרט זה מגדיר מודל בעלות ומקורות אמת. אינו משנה קוד, Schema או Cron. האכיפה תבוצע ב-CH5-003 עד CH5-006 באמצעות Feature Flag, Audit ובדיקות.
CH5-001 מיפה את הנתונים והזרימות הקיימות וזיהה פערים משמעותיים: אין מקור אמת מחייב לכל תחום (למשל: מחיר נכס נדרס בכל update, פוזיציה נדרסת ללא יומן גרסאי, החלטת השקעה מפוזרת בין Trade ו-AnalysisOutput). ללא מודל בעלות מוגדר, כל רכיב יכול לכתוב לכל ישות, אין אחראי ברור לכל תחום, ואין כללי גרסאות והיסטוריה. זה יוצר סיכון: נתון ישן או סותר עלול לשמש לפעולה, ולא ניתן לשחזר מי כתב מה ומתי. בנוסף, המטריצה הקודמת ערבבה בין ה-As-Is שנמצא ב-CH5-001 לבין החוזה הארכיטקטוני הרצוי, ולא הפרידה בין מצב קיים למצב יעד.
להגדיר מודל בעלות על נתונים הכולל לכל ישות מרכזית: מקור אמת מחייב (Source of Truth), הרכיב או הרכיבים המוסמכים, בחלוקה מפורשת לפי שדה וסוג פעולה, ליצירה ועדכון, בעל אחריות עסקית וטכנית, כללי עדכון/גרסאות/היסטוריה, איסור על עדכון ישיר מרכיבים לא מוסמכים, ומנגנון טיפול בהתנגשות בין מקורות נתונים. המודל מפריד במפורש בין מצב קיים (As-Is) למצב יעד (Target), ומציין את הפער והמפרט המטפל לכל סעיף. מודל זה הוא חוזה — אינו משנה קוד, אך מגדיר את הכללים ש-CH5-003 עד CH5-006 יאכפו באמצעות Schema, Feature Flag ו-Audit.
הגדרת מקור אמת מחייב (Source of Truth) לכל ישות מרכזית — עם הפרדה מפורשת בין מצב קיים (As-Is) למצב יעד (Target) וציון פער/מפרט מטפל.
בעלות על Portfolio ברמת שדה: quantity ו-avg_price יתעדכנו רק כתוצאה מ-Fill מאומת או Reconciliation; current_price בלבד יתעדכן באמצעות תהליך רענון מחירים; refreshPortfolioPrices אינו רשאי לעדכן quantity או avg_price.
הוספת available_cash/יתרת המזומן למטריצה: Broker Account Snapshot / Cash Ledger הוא מקור האמת; הישות המקומית היא עותק קנוני מתועד. מזומן אינו משתנה רק בעקבות Fill — יש לכלול הפקדות, משיכות, עמלות, דיבידנדים, המרות מטבע, ריבית והון משוריין לפקודות פתוחות.
שמירת מסלול יצירת Trade המחייב: Candidate → Analysis → Decision/מקור סמכות מאושר → Risk Gate עצמאי → Trade → Order. פעולת יציאה מאושרת מראש תסומן כחריג מתועד. אירועי הברוקר מוסרים כעובדות ביצוע, אך עדכון המצב הפנימי יבוצע רק דרך ה-State Machine.
הוספת ישויות ביצוע חסרות למטריצה: Order, Fill/BrokerEvent, Decision, DecisionSnapshot, AssetMaster, CorporateAction. ישויות שאינן קיימות מסומנות כ-Planned/GAP עם המפרט המטפל.
הגדרת מערכת Audit: Message (נמחק לאחר 30 יום) אינו יכול לשמש Audit מחייב. נדרש AuditEvent או מנגנון מקביל כ-Append-Only, עם correlation_id, מקור, זמן, גרסת סכמה ו-Payload/Hash. עד למימושו — מסומן כפער ולא כיכולת קיימת.
תיקון כללי התנגשויות: אין לקבוע executeTrade > refreshPortfolioPrices לגבי quantity (לרכיב רענון המחירים אסור מלכתחילה לכתוב כמות). התנגשות מחירים תחסום פתיחת פוזיציה או הגדלת חשיפה, אך לא תחסום יציאה, צמצום או פעולת חירום.
תיקון SystemSettings: Last Write Wins ללא CAS אינו יכול להיות מודל היעד. נדרש מנגנון גרסה, Audit ו-Snapshot למחזור ההחלטה.
הגדרת בעל אחריות עסקית (Business Owner) ובעל אחריות טכנית (Technical Owner) לכל תחום נתונים.
הגדרת כללי עדכון: מתי מותר לעדכן, מי מוסמך, איזה מנגנון (CAS, Idempotency), ומה הסטטוס לאחר עדכון.
איסור מפורש על עדכון ישיר של ישויות מרכזיות מרכיבים שאינם מוסמכים.
הגדרת כללי מחיר Raw vs. Canonical: מחיר ברוקר/שוק הוא Raw; המחיר המאוחסן ב-Portfolio או ב-Trade הוא Canonical שנגזר מ-Raw; אסור לערבב ביניהם.
הגדרת כללי בעלות לישויות חדשות שייווצרו ב-CH5-003 עד CH5-006.
אין שינוי Schema, Rename או שינוי Cron במסגרת מפרט זה.
אין יצירת ישויות חדשות — המפרט מגדיר חוזה בעלות, לא מבצע אותו.
אין שינוי קוד עסקי — האכיפה תבוצע ב-CH5-003 עד CH5-006.
אין התאמה לפי דמיון שם בלבד — זהות נכס תיקבע רק במפרט Asset Master הייעודי.
מודל הבעלות אינו מעביר סמכות ל-CIO או לסוכן כלשהו.
ישויות המסומנות כ-Planned/GAP אינן קיימות במערכת ודורשות מפרט ומימוש נפרדים.
הנתונים מבחינים מפורש בין מצב קיים (As-Is) למצב יעד (Target). ישויות המסומנות כ-(Planned) אינן קיימות במערכת ודורשות מפרט ומימוש נפרדים.
מסלול יצירת Trade מחייב: Candidate → Analysis → Decision/מקור סמכות מאושר → Risk Gate עצמאי → Trade → Order. אין יצירה ישירה על-ידי סוכן ללא מסלול זה.
פעולת יציאה מאושרת מראש תסומן כחריג מתועד (pre-approved exit).
אירועי ברוקר מוסרים כעובדות ביצוע; עדכון המצב הפנימי יבוצע רק דרך ה-State Machine (CH3-002).
Portfolio.quantity ו-Portfolio.avg_price יתעדכנו רק כתוצאה מ-Fill מאומת או Reconciliation — לא על-ידי refreshPortfolioPrices.
Portfolio.current_price יתעדכן רק על-ידי refreshPortfolioPrices (רענון מחירים) — לא על-ידי executeTrade.
available_cash יתעדכן רק כתוצאה מ: Fill מאומת, הפקדות, משיכות, עמלות, דיבידנדים, המרות מטבע, ריבית או שינוי הון משוריין — לא על-ידי רכיב רענון מחירים.
עדכון סטטוס Trade חייב לעבור דרך stateMachine.ts (CH3-002) עם CAS על status_version.
עדכון SystemSettings חייב להיות מלווה ב-Audit; במחזור החלטה יש להשתמש ב-Snapshot (Target).
יצירת AgentSnapshot חייבת להיות Append-Only דרך captureAgentBaseline בלבד.
עדכון AgentConfig חייב לעבור דרך assertAgentIdentity/assertAgentConfig (CH4-001) עם migration_ref/config_change_ref.
עדכון MarketData.price נדרס — אין היסטוריה; דורש תיעוד ב-CH5-004.
יצירת Message היא Append — כל כותב מוסיף רשומה; אין עדכון תוכן; אינו מתאים ל-Audit מחייב.
יצירת Alert היא יצירה או עדכון סטטוס (active→acknowledged→dismissed) — אין שינוי תוכן.
יצירת AnalysisOutput היא Append — כל ניתוח יוצא רשומה חדשה עם profile_version.
לכל ישות מרכזית מוגדר מקור אמת מחייב או מסומן פער מפורש עם מפרט מטפל.
המטריצה מפרידה מפורש בין מצב קיים (As-Is) למצב יעד (Target) עם עמודת פער/מפרט.
לכל ישות מוגדר הרכיב או הרכיבים המוסמכים, בחלוקה מפורשת לפי שדה וסוג פעולה, ליצירה ועדכון — לא "רכיב יחיד" כשיש מספר כותבים.
לכל תחום נתונים מוגדר Business Owner ו-Technical Owner.
Portfolio מפוצל לרמת שדה: quantity ו-avg_price רק דרך Fill מאומת/Reconciliation; current_price רק דרך רענון מחירים.
refreshPortfolioPrices אינו רשאי לעדכן quantity או avg_price — מתועד.
available_cash מוגדר עם מקור אמת (Cash Ledger) ורכיבים מוסמכים לפי סוג פעולה (Fill, הפקדות, משיכות, עמלות, דיבידנדים, המרות, ריבית, הון משוריין).
מסלול יצירת Trade מחייב: Candidate → Analysis → Decision → Risk Gate → Trade → Order. אין יצירה ישירה.
פעולת יציאה מאושרת מראש מסומנת כחריג מתועד.
אירועי ברוקר מוסרים כעובדות; עדכון מצב פנימי רק דרך State Machine.
ישויות חסרות (Order, Fill/BrokerEvent, Decision, DecisionSnapshot, AssetMaster, CorporateAction, AuditEvent) מסומנות כ-Planned/GAP עם מפרט מטפל.
Message אינו מוגדר כ-Audit מחייב; נדרש AuditEvent (Append-Only עם correlation_id, source, time, schema_version, Payload/Hash) — מסומן כפער.
אין קביעת executeTrade > refreshPortfolioPrices לגבי quantity — ל-refresh אסור לכתוב quantity כלל.
התנגשות מחירים חוסמת פתיחת פוזיציה/הגדלת חשיפה; אינה חוסמת יציאה, צמצום או חירום.
SystemSettings: Last Write Wins אינו מודל היעד — נדרש גרסאי + Audit + Snapshot למחזור החלטה.
AgentSnapshot: אין Update/Delete דרך זרימות עסקיות; מחיקה/ארכוב רק לפי Retention מאושרת — לא נקבע "לא ניתן למחיקה" לפני אימות ואכיפה.
המודל אינו מעביר סמכות ל-CIO או לסוכן כלשהו.
המודל עקבי עם CH3-002 (stateMachine), CH4-001 (identity locking) ו-CH3-003 (execution).
טבלאות הבעלות מפוצלות לשתי טבלאות עם מצב קיים/יעד/פער נפרדים — מונחים טכניים אינם נשברים; כותרת חוזרת בכל עמוד; שורות אינן מתפצלות בין עמודים.
המפרט אושר לפני תחילת ביצוע.
כל תחום נתונים קיבל מקור אמת, רכיב מוסמך ובעל אחריות — עם הפרדת As-Is/Target/Gap.
כל תנאי קבלה קיבל בדיקה ותוצאה.
לא נוצרה נסיגה בהגנות, ב-State Machine או ב-Idempotency של CH3.
חוזי הסוכנים וה-CIO Shadow של CH4 נשמרו.
הופק דוח ביצוע הכולל ראיות, חריגות והמלצת סגירה.
רק לאחר אישור דוח הביצוע משתנה סטטוס המפרט ל-Version 1.0 — Closed.
src/pages/Ch5Spec002.jsx — קובץ תיעודי קיים; במסגרת CH5-002 הוא לקריאה בלבד ואינו מיועד לעריכה.
אין שינוי ב-Entities, Functions, Workflows או קוד עסקי.
1. סקירת ממצאי CH5-001 (Data Inventory, SOT Matrix, Gap Analysis).
2. השלמת מטריצת בעלות (טבלה א׳ + טבלה ב׳) לכל ישות מרכזית — עם As-Is/Target/Gap.
3. הגדרת רכיבים מוסמכים לכל ישות/שדה.
4. הגדרת Business Owner + Technical Owner לכל תחום.
5. כתיבת כללי עדכון/גרסאות/היסטוריה.
6. רישום איסורי עדכון ישיר.
7. הגדרת מנגנון טיפול בהתנגשויות.
8. סימון ישויות Planned/GAP עם מפרט מטפל.
9. סקירת עקביות מול CH3-002, CH4-001, CH3-003.
10. הפקת דוח ביצוע CH5-002 עם כל הראיות.
11. אישור דוח הביצוע → מעבר ל-CH5-003.
תלות
CH5-001 מאושר (Data Inventory ו-Gap Analysis); פרקים 1–5 הנעולים; CH3 (001/002/003/004/005) ו-CH4 (001/Execution Report).
מחוץ לתכולה
שינוי Schema, יצירת ישויות חדשות, שינוי קוד עסקי, הקמת Asset Master, שינוי Cron, או אכיפת המודל בקוד (תבוצע ב-CH5-003 עד CH5-006).