CH5-004 · שכבות נתוני שוק, Data Quality ואירועים תאגידיים

גרסה 0.4 · 9.8.2026, 09:59 · המפרט הרביעי של CH5 — Raw/Canonical/Adjusted/Derived/ExecutableQuote + Corporate Actions

נכון לעדכון אחרון: 27.8.2026, 14:33

Approved v0.4

✅ Approved for Implementation — Version 0.4 (09.08.2026)

מפרט CH5-004 v0.4 אושר לביצוע ב-09.08.2026. לא נדרש סבב Review נוסף. המפרט משלב את כל התיקונים מ-v0.2–0.3 ואת שני התיקונים הטכניים האחרונים: (1) Outbox מוגדר כ-Transaction מקומי בלבד — עדכוני מסד הנתונים (Portfolio, Cash Ledger, Outbox record) מתבצעים יחד ב-Transaction; קריאות לברוקר הן שלבים Idempotent בתוך Saga; כשל חלקי עובר ל-RECONCILIATION_REQUIRED (לא FAILED טרמינלי); Retry ממשיך מהשלב האחרון שלא הושלם; APPLIED רק לאחר שכל השלבים קיבלו אישור; (2) canonical_action_id מבוסס על זהות עסקית יציבה של האירוע (לא תוכן העשוי להשתנות ב-Revision); terms_hash מכיל את היחס, הסכומים והתאריכים המשתנים; Revision משנה version ו-terms_hash אך אינו משנה canonical_action_id; התאמה לא ודאית בין דיווחי ספקים עוברת ל-Quarantine ואינה מאוחדת אוטומטית. תיקוני טקסט: Baseline מוצע; אינו נצרך. Version 1.0 ייקבע לאחר המימוש ואישור דוח הביצוע.

עיקרון מחייב: Raw↔ExecutableQuote — הפרדה מוחלטת

Raw הוא תיעוד גולמי בלבד ואסור לשימוש ישיר בהחלטה, פקודה או הגנה. לביצוע — ExecutableQuote תקף (bid/ask/last, market, currency, trading_status, source, quote_id, data_as_of, quality_flag, side_match). Adjusted ו-Derived לניתוח בלבד. מחיר קנייה/מכירה נלקח מציטוט ברוקר תקף לפי צד הפעולה. בידוד שכבות מוחלט — MarketData קיים אינו מערבב שכבות; Compatibility Layer חושף Canonical בלבד.

0.1 · היסטוריית גרסאות
גרסהתאריך ושעהמהות השינויסטטוס
v0.109.08.2026 08:55טיוטה ראשונה — הגדרת שכבות Raw/Canonical/Adjusted/Derived, Data Quality ברמת שדה ו-Snapshot, ספי Staleness, Corporate Actions, Provider Interface ו-Lineage.Review
v0.209.08.2026 09:08עשר קבוצות תיקונים: הפרדה מוחלטת Raw↔ExecutableQuote; AssetMaster כתנאי מקדים; ספי Staleness כ-Baseline בשלוש רמות; מודל Data Quality מורחב; חוזה נתונים מורחב; State Machine לאירועים תאגידיים; דיוק התנהגות; בידוד שכבות; Rollback מוגבל; תפעול ספקים מלא.Review
v0.309.08.2026 09:13שבעה תיקוני בטיחות ממוקדים: Idempotency חזק יותר; State Machine משופר (APPLYING + Outbox, תאריכים נכונים, REVERSED לא טרמינלי); צבירת Data Quality לפי asset/שדה/Use Case; סבילות כ-Baseline מוצע; Quarantine — discard כסימון DISCARDED; Cash Ledger כמקור אמת; Rollback של AssetMaster מוגבל ל-Shadow + ISIN/FIGI/broker_contract_id.Review
v0.409.08.2026 09:36שני תיקונים טכניים אחרונים: (1) Outbox אינו מבטיח אטומיות מול ברוקר חיצוני — Transaction מקומי מעדכן ישויות מקומיות + רשומת Outbox יחד; קריאות לברוקר הן שלבים Idempotent בתוך Saga; כשל חלקי → RECONCILIATION_REQUIRED (לא FAILED טרמינלי); Retry ממשיך מהשלב האחרון שלא הושלם; APPLIED רק לאחר שכל השלבים קיבלו אישור; RECONCILIATION_REQUIRED → APPLIED/REVERSED/RECONCILED. (2) canonical_action_id יציב — מבוסס על זהות עסקית יציבה של האירוע (לא תוכן העשוי להשתנות ב-Revision); terms_hash מכיל יחס/סכומים/תאריכים; Revision משנה version+terms_hash אך לא canonical_action_id; התאמה לא ודאית בין ספקים → Quarantine (אין איחוד אוטומטי). תיקוני טקסט: Baseline מוצא→מוצע; אינו נצרן→נצרך.Review
v0.409.08.2026 09:59אישור סופי — Version 0.4 Approved for Implementation. לא נדרש סבב Review נוסף. Version 1.0 ייקבע לאחר המימוש ואישור דוח הביצוע.Approved
1 · בעיה ויעד

CH5-001 מיפה את מקורות הנתונים הפעילים וזיהה פערים: MarketData.price נדרס בכל update ללא הבחנת Raw/Canonical/Adjusted; אין Lineage המקשר נתון נגזר למקורותיו; אין סימון Data Quality ברמת שדה; אין טיפול באירועים תאגידיים. בנוסף: רישוי ספקים אינו מתועד; אין הפרדה בין מחיר גולמי (Raw) לבין ציטוט ברוקר תקף לביצוע; אין AssetMaster יציב (CH5-002 הגדיר בעלות אך לא מימש); ספי Staleness אינם מבדילים בין תצוגה, ניתוח וביצוע; אין State Machine או Idempotency לאירועים תאגידיים; ואין בידוד שכבות — MarketData הקיים עלול לערבב Raw/Canonical/Adjusted באותו מסלול.

לבנות שכבות נתוני שוק ניתנות לביקורת ולהגן על פוזיציות והחלטות מפני נתון ישן, סותר או אירוע תאגידי שלא הותאם. הפרדה מוחלטת: Raw הוא תיעוד גולמי בלבד ואסור לשימוש ישיר בהחלטה/פקודה/הגנה. לביצוע יש להשתמש ב-ExecutableQuote תקף שעבר נרמול ואימות. AssetMaster יוקם כתנאי מקדים מוכלל במפרט זה — עם ISIN/FIGI/broker_contract_id והתאמה עמומה→Quarantine. ספי Staleness יוגדרו כ-Baseline מוצע בשלוש רמות. אירועים תאגידיים יעובדו דרך State Machine עם Idempotency חזק (canonical_action_id מבוסס זהות עסקית יציבה; terms_hash לתנאים משתנים; התאמה לא ודאית→Quarantine) ומודל Saga (Transaction מקומי + Outbox לעדכוני מסד נתונים; קריאות ברוקר Idempotent; כשל חלקי→RECONCILIATION_REQUIRED; Retry מהשלב האחרון). Cash Ledger הוא מקור האמת למזומן. שכבות יבודדו — Compatibility Layer יחשוף Canonical בלבד.

2 · חמש שכבות נתוני השוק (עם בידוד מוחלט)
Raw Layer (תיעוד בלבד)

הנתון הגולמי כפי שהתקבל מהספק — ללא עיבוד. נשמר בלתי-משתנה עם hash כאשר הרישוי מתיר; אחרת — Source/Timestamp/Schema/External Reference בלבד. אסור לשימוש ישיר בהחלטה, פקודה או הגנה — תיעוד גולמי בלבד.

איסור: אסור שימוש ישיר בהחלטה/פקודה/הגנה — Raw הוא תיעוד בלבד

raw_payload (כאשר מותר ברישוי)source_id, provider_versionreceived_at (UTC)source_timestamp (UTC — מהספק)schema_versionpayload_hash (SHA-256)licensing_tag (ALLOWED/RESTRICTED)provider_event_id / idempotency_keyexternal_referencelicensing_versionretention_policy_tag
בעלים: Backend / Dataמקור: Provider Adapter
Canonical Layer (קריאה עסקית)

נתון מנורמל לסכמה הקנונית — ניתן לשחזור מ-Raw/Reference. זהו מקור האמת לקריאה עסקית. Compatibility Layer למערכת הישנה חושף Canonical בלבד — אין ערבוב עם Raw/Adjusted באותו מסלול.

איסור: אין ערבוב עם Raw/Adjusted באותו מסלול קריאה

canonical_id, asset_id (מ-AssetMaster)field_name, valuesource_refs[] (הפניות ל-Raw — מרובה מקורות)canonicalization_versioncanonical_serialization (sorted JSON)hash, hash_versiondata_as_of (UTC)quality_flagarbitration_reason (סיבת הכרעה בין מקורות)
בעלים: Backend / Dataמקור: Canonicalization Engine
Adjusted Layer (ניתוח בלבד)

נתון שהותאם לאירועים תאגידיים (Split, Dividend) — לניתוח והשוואה היסטורית בלבד. אסור שיגיע ל-Order Intent. גישה מותרת רק לרכיבי ניתוח.

איסור: אסור ל-Order Intent — ניתוח בלבד; גישה רק לרכיבי ניתוח

asset_idfield_name, adjusted_valueadjustment_event_id (קישור ל-CorporateAction)adjustment_formula_versionsource_refs[] (Canonical)adjusted_at (UTC)
בעלים: Backend / Dataמקור: Adjustment Engine
Derived Layer (ניתוח בלבד)

נתון נגזר (RSI, P/E, ממוצעים, תחשיבים) — עם input_ids, formula_version ו-Lineage מלא. גישה מותרת רק לרכיבי ניתוח.

איסור: אסור ל-Order Intent — ניתוח בלבד; גישה רק לרכיבי ניתוח

derived_idasset_idmetric_name, valueinput_ids[] (הפניות ל-Canonical/Adjusted)formula_versioncomputed_at (UTC)lineage_hash
בעלים: Backend / Dataמקור: Computation Engine
ExecutableQuote (ביצוע בלבד)

ציטוט ברוקר תקף שעבר נרמול ואימות — המקור היחיד למחיר קנייה/מכירה בפקודה ובהגנה. מותאם לצד הפעולה (buy→ask, sell→bid). טרי בהרבה מנתון ניתוח. אינו מבוסס על Raw ישירות.

איסור: אסור לניתוח היסטורי — ביצוע בלבד; טרי בהרבה מנתון ניתוח

quote_idasset_id (מ-AssetMaster)bid, ask, lastmarket, currencytrading_status (open/closed/halt/pre/post)source (broker/venue)data_as_of (UTC)source_timestamp (UTC)quality_flagside_match (buy→ask / sell→bid)
בעלים: Backend / Executionמקור: Broker Adapter / Venue
3 · AssetMaster — תנאי מקדים מוכלל

CH5-002 הגדיר את הבעלות על asset_id, אך לא מימש AssetMaster. ללא AssetMaster יציב אי אפשר לטפל בבטחה ב-Symbol Change, מעבר בורסה, Merger או Spin-off.

מוכלל ב-CH5-004: הקמת AssetMaster ו-Alias History כתנאי מקדים מוכלל במפרט זה (אפשרות א). אפשרות ב (מפרט AssetMaster נפרד) נדחתה כדי למנוע תלות חיצונית שתחסום את עיבוד האירועים התאגידיים.

תוצרים

  • AssetMaster entity — asset_id קבוע, סוג מכשיר, שוק, מטבע, MIC, סטטוס (ACTIVE/INACTIVE/SUSPENDED).
  • Alias History entity — alias_id, asset_id, alias_symbol, provider/market, valid_from, valid_to, source. גרסאי.
  • Resolution service — resolveAsset(symbol, market, as_of) → asset_id. עם version ו-Audit.
  • Compatibility Layer דו-כיווני — קריאה קנונית (asset_id) וקריאה ישנה (symbol+market).
  • Idempotent Backfill ל-Candidate/Analysis/Trade/Portfolio היסטורי.
  • Feature Flag לקריאה קנונית; Rollback לקריאה לפי symbol.

אינווריאנטים

  • asset_id אינו משתנה עקב שינוי Symbol.
  • כשל Resolution אינו יוצר Candidate/Trade/Order חדש.
  • אין התאמה לפי דמיון שם בלבד — נדרשת התאמת זהות חד-משמעית.
  • Alias History נשמר — אין דריסת היסטוריה.
4 · תכולת המימוש

הקמת AssetMaster ו-Alias History כתנאי מקדים מוכלל במפרט (פתרון א — מוכלל, לא מפרט נפרד).

הפרדה מוחלטת: Raw = תיעוד בלבד; ExecutableQuote = ביצוע בלבד; Adjusted/Derived = ניתוח בלבד. אין ערבוב באותו מסלול.

Provider Interface גרסאי עם Timeout, Retry, Rate Limit, Circuit Breaker, Health Status, Error Classification. איסור שמירת Secrets ב-Raw Payload.

שמירת Raw Payload ו-hash (SHA-256) כאשר מותר ברישוי; חלופת Source/Timestamp/Schema/External Reference כאשר אסור.

Raw מורחב: provider_event_id/idempotency_key, source_timestamp, external_reference, licensing_version, retention_policy_tag.

Canonical עם source_refs[] (מרובה מקורות), canonical_serialization (sorted JSON), hash, hash_version, arbitration_reason.

ExecutableQuote — ציטוט ברוקר תקף עם bid/ask/last, market, currency, trading_status, source, quote_id, data_as_of, quality_flag, side_match.

Data Quality מורחב: סבילות להשוואה לפי סוג שדה; סדר עדיפות ספקים ו-Fallback; צבירה שדה→רשומה→Snapshot; בעלים ותהליך שחרור מ-Quarantine; תיעוד סיבת הכרעה.

ספי Staleness כ-Baseline מוצע בשלוש רמות: תצוגה, ניתוח/החלטה, Risk Gate/ביצוע. התחשבות בלוחות מסחר, חגים, DST, Halt, Pre/Post Market, והפרש source_timestamp vs received_at.

Corporate Actions State Machine: RECEIVED→VALIDATED→PENDING_EFFECTIVE→APPLYING→APPLIED→RECONCILED + RECONCILIATION_REQUIRED/FAILED/REVERSED/CANCELLED. עם Idempotency ותאריכי אירוע מלאים.

דיוק התנהגות אירועים: Dividend ב-Pay Date ב-Cash Ledger; שברי מניה/Cash-in-Lieu ב-Split; בדיקת התאמת ברוקר לפני שינוי Stops; Merger/Spin-off דורש נתוני אירוע מאומתים; Delisting→מצב מוגבל; Halt מנטר פקודות קיימות.

בידוד שכבות: MarketData קיים אינו מערבב RAW/CANONICAL/ADJUSTED. Compatibility Layer חושף Canonical בלבד. גישה ל-Adjusted/Derived רק לרכיבי ניתוח.

Rollback מוגבל: Feature Flag מחזיר מסלול קריאה קודם בשלב Shadow לפני Cutover בלבד; אינו יכול לבטל Corporate Action שבוצע — נדרש אירוע מתקן + Reconciliation + Audit; אסור לעקוף asset_id לאחר Cutover.

Lineage מקצה לקצה: מ-Derived דרך Canonical ל-Raw, עם אפשרות שחזור.

Shadow comparison מול הנתיב הקיים (As-Is) עד למעבר ל-CANONICAL.

הבהרה: AuditEvent (CH5-005) עדיין Planned. חיבור ל-Decision Snapshot יתבצע רק לאחר ש-CH5-003 ממומש ו-PUBLISHED.

5 · תוצרים מחייבים
AssetMaster entity + Alias History entity (תנאי מקדים מוכלל).Raw/Canonical/Adjusted/Derived/ExecutableQuote contracts — סכמות ו-Data Contracts.Lineage map — מפה מקצה לקצה מ-Derived ל-Raw.Data Quality rules — סבילות, עדיפות, צבירה, שחרור מ-Quarantine, תיעוד הכרעה.Staleness thresholds matrix — Baseline מוצע בשלוש רמות (תצוגה/ניתוח/ביצוע) + לוחות מסחר/חגים/DST.CorporateAction entity + State Machine + Saga + canonical_action_id/terms_hash.Provider Interface + Source Adapter (Timeout, Circuit Breaker, Health, Error Classification).Compatibility Layer — Canonical בלבד למערכת הישנה.Quarantine + Rollback מוגבל (מסלול קריאה בלבד).דוחות השוואת Shadow מול הנתיב הקיים.
6 · מגבלות והגנות

Raw הוא תיעוד גולמי בלבד — אסור לשימוש ישיר בהחלטה, פקודה או הגנה. לביצוע — ExecutableQuote תקף בלבד.

Adjusted ו-Derived לניתוח בלבד — אסור ל-Order Intent. גישה רק לרכיבי ניתוח.

ExecutableQuote טרי בהרבה מנתון ניתוח — מחיר קנייה/מכירה נלקח מציטוט ברוקר תקף לפי צד הפעולה (buy→ask, sell→bid).

אין ממוצע אוטומטי בין מקורות סותרים — סתירה מסומנת CONFLICTED ומועברת ל-Quarantine.

נתון בעייתי חוסם פתיחה/הגדלה, אך יציאה משתמשת ב-ExecutableQuote תקף, מקור חירום או תהליך ידני מתועד.

רישוי ספק נבדק לפני שמירת Payload — אסור לשמור Raw אם הרישוי אוסר. איסור שמירת Secrets ב-Raw.

בידוד שכבות מוחלט — MarketData קיים אינו מערבב RAW/CANONICAL/ADJUSTED. Compatibility Layer = Canonical בלבד.

Rollback מוגבל למסלול קריאה בלבד — אינו יכול לבטל Corporate Action שבוצע. נדרש אירוע מתקן + Reconciliation + Audit.

אין שינוי ספי Trade Validity המאושרים (CH3-003) במסגרת מפרט זה.

אין בחירת ספק מסחרי סופי — Provider Interface נשאר גרסאי ופתוח.

AuditEvent (CH5-005) עדיין Planned — חיבור ל-Decision Snapshot רק לאחר CH5-003 ממומש ו-PUBLISHED.

7 · מודל Data Quality (מורחב)
היבטתיאור
סבילות להשוואהסבילות (tolerance) כ-Baseline מוצע — אינה נעולה. מותאמת לפי סוג נכס, נזילות, שוק, ספק, שעות מסחר ו-Use Case. ערכי ברירת מחדל: מחיר (±0.01%), מזומן (שוויון מדויק), כמות (שוויון מדויק), פנדמנטליים (±5%). סתירה מחוץ לסבילות → CONFLICTED → Quarantine.
סדר עדיפות ספקיםסדר עדיפות מוגדר לכל סוג נתון (למשל: Broker > Primary Feed > Secondary). Fallback מוגדר לכל ספק. אין ממוצע אוטומטי בין ספקים.
צבירת Qualityצבירה לפי asset_id + סוג שדה + Use Case + רשימת קלטים נדרשים למחזור. רק פגם בקלט מחייב חוסם את הפעולה; שאר הפגמים מוצגים בסיכום Quality אך אינם חוסמים. שדה חסר בנכס לא-רלוונטי אינו חוסם את כל המחזור. סיכום Snapshot = צבירה מדורגת לפי רלוונטיות, לא דגל חמור עיוור.
בעלים ושחרור מ-Quarantineלכל רשומת Quarantine מוגדר בעלים (Data Steward). שחרור (resolve) יוצר גרסה קנונית חדשה עם קישור לרשומה המקורית — אין שינוי היסטוריה. discard אינו מחיקה פיזית — הרשומה מסומנת DISCARDED ונשמרת לפי Retention. escalate לטיפול ידני. תהליך מלא מתועד ב-Audit.
תיעוד הכרעהכאשר מכריעים בין מקורות, נרשם arbitration_reason — איזה מקור נבחר, מדוע, ומה היו המקורות החלופיים. נדרש לשחזור ולביקורת.
יציאה תחת נתון בעייתינתון בעייתי חוסם פתיחה/הגדלה. אך יציאה, צמצום וחירום אינם נחסמים — הם משתמשים ב-ExecutableQuote תקף, מקור חירום או תהליך ידני מתועד.
8 · כללי Data Quality
סטטוסמשמעותפעולהחסימה
VALIDנתון עדכני ועקבי בתוך סבילותניתן לצריכה עסקיתלא
STALEנתון ישן — חרג מ-TTL/Max Age לרמה הרלוונטיתסימון; חסימת פתיחה/הגדלה; יציאה ב-ExecutableQuote/חירום/ידניפתיחה/הגדלה בלבד
MISSINGנתון חסר ממקורחסימת פעולה המחייבת נתון זה; יציאה ב-ExecutableQuote/חירום/ידניפעולות הדורשות נתון זה
CONFLICTEDשני מקורות סותרים מחוץ לסבילותQuarantine; אין ממוצע; חסימת פתיחה/הגדלה; יציאה ב-ExecutableQuote/חירום/ידניפתיחה/הגדלה בלבד
UNAVAILABLEמקור לא זמין (רשת/API)נסיגה ל-Fallback אם קיים; אחרת STALE/MISSINGתלוי ב-Fallback
QUARANTINEDנכשל בבדיקת איכות/סתירה — ממתין להחלטת Data Stewardאינו נצרך ב-Production; שחרור (resolve) יוצר גרסה קנונית חדשה עם קישור למקור; discard מסמן DISCARDED (אין מחיקה פיזית — נשמר לפי Retention)כן — לא נצרך
9 · ספי Staleness — שלוש רמות (Baseline מוצע)
רמהתיאורהערהדוגמאות
תצוגה (Display)נתונים המוצגים למשתמש — סבילות רחבה יותר לעיון כלליBaseline מוצע — אינו נעולמחיר לתצוגה: 5 דקות; פנדמנטליים לתצוגה: 48 שעות
ניתוח/החלטה (Analysis)נתונים המזינים סוכנים והחלטות השקעה — סבילות בינוניתBaseline מוצע — אינו נעולמחיר לניתוח: 15 שניות (intraday); חדשות: 1 שעה; fx_rate: 1 שעה
Risk Gate/ביצוע (Execution)נתונים המשמשים לביצוע פקודה ובדיקת סיכון — נדרש ExecutableQuote טרי בהרבה מניתוחBaseline מוצע — אינו נעול; טרי בהרבה מניתוחExecutableQuote: עדכני ככל האפשר מהברוקר; חסימה אם חורג

שיקולים מחייבים

  • לוחות מסחר — שעות פתיחה/סגירה לכל בורסה (TASE, NYSE, NASDAQ, LSE, TSE, HKEX).
  • חגים וימי מסחר מצומצמים — לוח שנתי לכל בורסה.
  • DST — מעבר שעון קיץ/חורף משנה שעות מסחר יחסית ל-UTC.
  • Halt / Suspension — נתון מוקפא; חסימת פקודות חדשות; מעקב פקודות קיימות.
  • Pre/Post Market — שעות מסחר מורחבות; נזילות נמוכה; סף שונה.
  • הפרש source_timestamp vs received_at — נתון עשוי להיות ישן גם אם received_at עדכני. נדרש source_timestamp מהספק.
  • Baseline מוצע בלבד — ערכי 15s/1h/24h אינם נעולים; יכולים להשתנות לפי ספק, נכס ותנאי שוק.
10 · Corporate Action State Machine
מצבתיאורמעברים
RECEIVEDאירוע התקבל מהספק/חברה — טרם אימות→ VALIDATED או FAILED
VALIDATEDאירוע אומת — נתוני אירוע שלמים, עקביים, terms_hash מחושב→ PENDING_EFFECTIVE או FAILED
PENDING_EFFECTIVEממתין לתאריך הרלוונטי לסוג האירוע: Split→effective_date; Dividend זכאות→ex_date/record_date; Cash→pay_date→ APPLYING או CANCELLED
APPLYINGביצוע Saga — Transaction מקומי מעדכן ישויות מקומיות + רשומת Outbox יחד; קריאות לברוקר הן שלבים Idempotent בתוך Saga→ APPLIED (כל שלבים אושרו) או RECONCILIATION_REQUIRED (כשל חלקי)
APPLIEDהאירוע יושם — כל השלבים הנדרשים קיבלו אישור→ RECONCILED או REVERSED
RECONCILEDאומת מול הברוקר/מצב פוזיציה בפועל — סופיטרמינלי
RECONCILIATION_REQUIREDכשל חלקי ב-Saga — אינו FAILED טרמינלי; Retry ממשיך מהשלב האחרון שלא הושלם ואינו חוזר על שלבים שהושלמו→ APPLIED (לאחר השלמה) או REVERSED או RECONCILED
FAILEDאימות נכשל — נתונים חסרים/סותרים (לפני Saga; אינו כשל חלקי בביצוע)טרמינלי (דורש התערבות)
REVERSEDהאירוע בוטל לאחר יישום — אינו טרמינלי אם נדרש Reconciliation; נשאר פתוח עד סגירה מפורשת→ RECONCILED (לאחר Reconciliation) או נשאר פתוח
CANCELLEDהאירוע בוטל לפני יישום — על-ידי החברה/בורסהטרמינלי

Idempotency: canonical_action_id מבוסס על זהות עסקית יציבה של האירוע (לא תוכן העשוי להשתנות ב-Revision). terms_hash (SHA-256) מכיל את היחס, הסכומים והתאריכים המשתנים. source_event_refs[] מפנה לספקים שדיווחו. מפתח Deduplication אינו תלוי בספק — אותו אירוע משני ספקים אינו מיושם פעמיים. Revision של אירוע קיים משנה את version ואת terms_hash אך אינו משנה את canonical_action_id — הזהות העסקית יציבה. הפעלה מחדש לאחר Revision דורשת אישור מפורש. התאמה לא ודאית בין דיווחי ספקים עוברת ל-Quarantine ואינה מאוחדת אוטומטית.

תאריכי אירוע: תאריכי אירוע מלאים: announcement_date, ex_date, record_date, pay_date, effective_date, version, source, corrective_event_id. תאריך ההפעלה תלוי בסוג אירוע: Split → effective_date; Dividend זכאות → ex_date/record_date; Dividend מזומן → pay_date. PENDING_EFFECTIVE אינו ממתין תמיד ל-Ex-Date — הוא ממתין לתאריך הרלוונטי לסוג האירוע.

אטומיות (Saga + Outbox): Outbox מבטיח אטומיות לעדכוני מסד הנתונים המקומיים בלבד — לא לפעולה מול ברוקר חיצוני. מודל Saga: (1) Transaction מקומי מעדכן את הישויות המקומיות (Portfolio, Cash Ledger) ואת רשומת ה-Outbox יחד; (2) קריאות לברוקר מבוצעות כשלבים Idempotent בתוך Saga; (3) כשל חלקי עובר ל-RECONCILIATION_REQUIRED (לא FAILED טרמינלי); (4) Retry ממשיך מהשלב האחרון שלא הושלם ואינו חוזר על שלבים שהושלמו; (5) מעבר ל-APPLIED מתבצע רק לאחר שכל השלבים הנדרשים קיבלו אישור; (6) RECONCILIATION_REQUIRED → APPLIED / REVERSED / RECONCILED בהתאם לתוצאה.

11 · אירועים תאגידיים — התנהגות מדויקת
אירועטריגרהתנהגות נדרשתמפרטבעלים
Split (e.g. 2:1)הודעת חברה / ספקהכפלת כמות, הורדת מחיר לחצי; עדכון Portfolio.quantity ו-avg_price דרך CorporateAction Workflow; טיפול בשברי מניה (fractional) ו-Cash-in-Lieu; בדיקה אם הברוקר כבר התאים Order/Stop לפני שינוי; אין הפסדCH5-004Backend / Corporate Actions
Reverse Split (e.g. 1:3)הודעת חברה / ספקצמצום כמות, העלאת מחיר; טיפול בשברי מניה ו-Cash-in-Lieu; עדכון Portfolio; בדיקת התאמת ברוקר ל-Order/Stop; אין הפסדCH5-004Backend / Corporate Actions
Dividend (Cash)ex-dividend dateCash Ledger (CH5-002) מתעדכן ב-Pay Date — לא אוטומטית ב-Ex-Date. CorporateAction יוצר Cash Ledger Entry; Cash Ledger הוא מקור האמת למזומן; יתרת מזומן ב-Portfolio היא תצוגה/נגזרת בלבד. תיעוד ב-Audit. Stock Dividend: הכפלת כמות דרך WorkflowCH5-004/005Backend / Corporate Actions
Symbol Changeהודעת חברה / ספקעדכון AssetMaster Alias עם valid_from/valid_to; אין שינוי asset_id; עדכון Portfolio.symbol דרך Workflow; שמירת Alias History; בדיקת התאמת ברוקרCH5-004/002Backend / Asset Master
Exchange Changeהעברת מסחר לבורסה אחרתעדכון AssetMaster market; בדיקת שעות מסחר ומטבע; עדכון Portfolio.market דרך Workflow; שמירת Alias HistoryCH5-004/002Backend / Asset Master
Merger / Acquisitionהודעת חברההמרת מניות לחברה הקולטת לפי יחס מאומת; אין חישוב רווח/Cost Basis לפי הנחה — נדרשים נתוני אירוע מאומתים ו-Reconciliation מול הברוקר; תיעוד מלאCH5-004Backend / Corporate Actions
Spin-offהודעת חברהיצירת נכס חדש ב-AssetMaster; הוספת מניות ל-Portfolio דרך Workflow; חישוב עלות מופחתת לנכס המקורי — נדרשים נתוני אירוע מאומתים ו-Reconciliation; תיעודCH5-004/002Backend / Corporate Actions
Delistingהודעת בורסהסימון נכס כ-INACTIVE; חסימת פקודות חדשות; אין הבטחה שניתן למכור — מעבר למצב מוגבל וטיפול ידני מתועד; בדיקת פוזיציה פתוחה; תיעודCH5-004Backend / Corporate Actions
Halt / Suspensionהודעת בורסהחסימת פקודות חדשות לנכס; סימון market_status=halt; מעקב אחר פקודות קיימות (לא רק חסימת חדשות); בדיקת Order/Stop פתוח; המתנה להסרת HaltCH5-004Backend / Market Data
12 · בידוד שכבות

MarketData קיים אינו מערבב RAW/CANONICAL/ADJUSTED באותו מסלול קריאה — נדרשת הפרדה מלאה.

Compatibility Layer למערכת הישנה חושף Canonical בלבד — קריאה ישנה מקבלת Canonical מנורמל.

גישה ל-Adjusted ו-Derived מותרת רק לרכיבי ניתוח — אין גישה ממסלול ביצוע/פקודה/הגנה.

גישה ל-ExecutableQuote מותרת רק למסלול ביצוע — אין גישה מרכיבי ניתוח היסטורי.

Raw נגיש רק ל-Canonicalization Engine ול-Audit/Lineage — אין גישה עסקית ישירה.

Feature Flag מעביר בין מסלול קריאה קנוני למסלול ישן — אינו מערבב שכבות בתוך אותו מסלול.

13 · Rollback (מוגבל)

Feature Flag יכול להחזיר מסלול קריאה קודם — קריאה קנונית ↔ קריאה לפי symbol. מוגבל לשלב Shadow לפני Cutover בלבד.

לאחר שמופעל מסלול Canonical או מיושם Corporate Action — אסור לעקוף asset_id באמצעות Rollback. Rollback לקריאה לפי symbol חסום לאחר Cutover.

אינו יכול לבטל Corporate Action שכבר עדכן פוזיציה, מזומן או פקודות.

במקרה של Corporate Action שבוצע בשגיאה — נדרש: אירוע מתקן (corrective_event_id), Reconciliation מול הברוקר, ותיעוד מלא ב-Audit.

אין Rollback טכני פשוט ל-State Machine של Corporate Action — מעבר ל-REVERSED דורש Reconciliation ואישור. REVERSED אינו טרמינלי אם נדרש Reconciliation.

Rollback ל-Quarantine — נתון ששוחרר יכול לחזור ל-Quarantine רק דרך תהליך מתועד.

14 · תפעול ספקים
היבטתיאור
Timeoutלכל קריאת ספק — Timeout מוגדר לפי סוג פעולה (Price: 5s, Fundamentals: 15s, CorporateActions: 30s).
RetryRetry עם Exponential Backoff — מוגבל ל-3 ניסיונות; אין Retry עיוור על שגיאות 4xx.
Rate Limitכיבוד Rate Limit של הספק; Throttling מקומי למניעת חריגה.
Circuit Breakerפתיחת Circuit Breaker אחרי N כשלים רצופים — נסיגה ל-Fallback או סימון UNAVAILABLE.
Health Statusכל ספק מדווח Health Status (healthy/degraded/down) — גלוי ב-Dashboard ומשפיע על עדיפות.
Error Classificationסיווג שגיאות: transient (רשת/timeout), provider_error (5xx), client_error (4xx), data_error (סכמה/תוכן). סיווג קובע Retry/Fallback/Quarantine.
איסור Secretsאסור לשמור API Keys, Tokens או Secrets ב-Raw Payload — סריקה אוטומטית לפני שמירה.
15 · שינויי סכמה
ישותשינוישדות
AssetMaster (Planned)ישות חדשה — תנאי מקדיםasset_id, instrument_type, market, currency, MIC, status (ACTIVE/INACTIVE/SUSPENDED), ISIN, FIGI, broker_contract_id, created_at, updated_at. מזהים יציבים מהספק/ברוקר להתאמה חד-משמעית; התאמה עמומה → Quarantine
AliasHistory (Planned)ישות חדשהalias_id, asset_id, alias_symbol, provider/market, valid_from, valid_to, source, version
RawMarketData (Planned)ישות חדשהraw_id, asset_id, source_id, provider_version, raw_payload (כאשר מותר), licensing_tag, licensing_version, retention_policy_tag, received_at, source_timestamp, schema_version, payload_hash, provider_event_id/idempotency_key, external_reference
CanonicalMarketData (Planned)ישות חדשהcanonical_id, asset_id, field_name, value, source_refs[], canonicalization_version, canonical_serialization (sorted JSON), hash, hash_version, data_as_of, quality_flag, arbitration_reason
AdjustedMarketData (Planned)ישות חדשה (ניתוח בלבד)adjusted_id, asset_id, field_name, adjusted_value, adjustment_event_id, adjustment_formula_version, source_refs[], adjusted_at
DerivedMetric (Planned)ישות חדשה (ניתוח בלבד)derived_id, asset_id, metric_name, value, input_ids[], formula_version, computed_at, lineage_hash
ExecutableQuote (Planned)ישות חדשה (ביצוע בלבד)quote_id, asset_id, bid, ask, last, market, currency, trading_status, source, data_as_of, source_timestamp, quality_flag, side_match
CorporateAction (Planned)ישות חדשה + State Machineaction_id, asset_id, action_type, announcement_date, ex_date, record_date, pay_date, effective_date, ratio, details, state (RECEIVED/VALIDATED/PENDING_EFFECTIVE/APPLYING/APPLIED/RECONCILED/RECONCILIATION_REQUIRED/FAILED/REVERSED/CANCELLED), canonical_action_id (בלתי-תלוי-ספק), terms_hash (SHA-256 על תנאי האירוע), source_event_refs[] (מרובה ספקים), version, source, corrective_event_id, correlation_id, decision_cycle_id (אם רלוונטי)
QuarantineRecord (Planned)ישות חדשהquarantine_id, asset_id, field_name, conflicting_values[], source_ids[], reason, quality_flag, owner (Data Steward), status (quarantined/resolved/DISCARDED/escalated), canonical_ref (קישור לגרסה קנונית חדשה אם שוחרר), resolution_reason, created_at, resolved_at. discard אינו מחיקה פיזית — הרשומה נשמרת לפי Retention עם סימון DISCARDED
MarketData (existing)בידוד — אין ערבובקריאה עסקית עוברת ל-Canonical בלבד דרך Compatibility Layer; שמירת תאימות לאחור ללא ערבוב שכבות
Portfolio (existing)עדכון דרך מנגנון; Cash = תצוגה בלבדעדכון quantity/avg_price רק דרך CorporateAction Workflow או Fill מאומת — לא על-ידי refreshPortfolioPrices. יתרת מזומן ב-Portfolio היא תצוגה/עותק נגזר בלבד — Cash Ledger הוא מקור האמת. CorporateAction יוצר Cash Ledger Entry, לא מעדכן Portfolio.cash ישירות
16 · מודולים משותפים
קובץתיאור
base44/shared/assetMaster.ts (חדש)resolveAsset(symbol, market, as_of) → asset_id. Alias History גרסאי. Idempotent Backfill. Compatibility Layer דו-כיווני.
base44/shared/providerInterface.ts (חדש)Provider Interface גרסאי עם Timeout, Retry (exp. backoff), Rate Limit, Circuit Breaker, Health Status, Error Classification. איסור Secrets ב-Raw. Source Adapter לכל ספק.
base44/shared/canonicalizationEngine.ts (חדש)normalizeRaw(rawId): מנרמל Raw ל-Canonical. canonical_serialization (sorted JSON) ל-hash דטרמיניסטי. source_refs[] מרובה מקורות. arbitration_reason לתיעוד הכרעה. reproducible.
base44/shared/executableQuoteService.ts (חדש)getExecutableQuote(assetId, side): מביא ציטוט ברוקר תקף. side_match (buy→ask, sell→bid). טרי בהרבה מניתוח. המקור היחיד למחיר ביצוע.
base44/shared/dataQualityChecker.ts (חדש)checkQuality(field, sources, tolerance): מסמן VALID/STALE/MISSING/CONFLICTED/UNAVAILABLE. סבילות לפי סוג שדה. צבירה שדה→רשומה→Snapshot. conflictQuarantine() עם בעלים ותהליך שחרור.
base44/shared/stalenessChecker.ts (חדש)checkStaleness(dataType, market, tier, context): שלוש רמות (Display/Analysis/Execution). לוחות מסחר, חגים, DST, Halt, Pre/Post. הפרש source_timestamp vs received_at. Baseline מוצע.
base44/shared/corporateActionStateMachine.ts (חדש)State Machine: RECEIVED→VALIDATED→PENDING_EFFECTIVE→APPLYING→APPLIED→RECONCILED + RECONCILIATION_REQUIRED/FAILED/REVERSED/CANCELLED. canonical_action_id (זהות עסקית יציבה) + terms_hash (תנאים משתנים) + source_event_refs[]. Saga עם שלבים Idempotent; Retry מהשלב האחרון; RECONCILIATION_REQUIRED לכשל חלקי (לא FAILED טרמינלי). corrective_event_id. חסימת יישום כפול.
base44/shared/adjustmentEngine.ts (חדש)applyCorporateAction(actionId): מתאים נתונים דרך State Machine. שברי מניה/Cash-in-Lieu. בדיקת התאמת ברוקר לפני שינוי Order/Stop. Cash Ledger ב-Pay Date.
base44/shared/lineageTracker.ts (חדש)traceLineage(derivedId): שחזור מקצה לקצה מ-Derived דרך Canonical (source_refs[]) ל-Raw. lineageHash לאימות שלמות.
base44/shared/layerIsolation.ts (חדש)אכיפת בידוד שכבות: Canonical בלבד ל-Compatibility Layer; Adjusted/Derived רק לרכיבי ניתוח; ExecutableQuote רק לביצוע; Raw רק ל-Canonicalization/Audit.
17 · תנאי קבלה

Raw הוא תיעוד גולמי בלבד — אסור לשימוש ישיר בהחלטה/פקודה/הגנה. נבדק שאין קריאה עסקית ישירה ל-Raw.

ExecutableQuote תקף הוא המקור היחיד למחיר קנייה/מכירה — כולל bid/ask/last, market, currency, trading_status, source, quote_id, data_as_of, quality_flag, side_match.

Adjusted ו-Derived אינם מגיעים ל-Order Intent — ניתוח בלבד. גישה מותרת רק לרכיבי ניתוח.

AssetMaster יציב — asset_id אינו משתנה עקב שינוי Symbol; Alias History נשמר; כשל Resolution חוסם יצירה.

Canonical עם source_refs[] (מרובה מקורות), canonical_serialization, hash, hash_version, arbitration_reason — ניתן לשחזור מ-Raw/Reference.

Data Quality: סבילות מוגדרת לפי סוג שדה; סדר עדיפות ספקים/Fallback; צבירה שדה→רשומה→Snapshot; Quarantine עם בעלים ותהליך שחרור; arbitration_reason מתועד.

נתון בעייתי (STALE/MISSING/CONFLICTED) חוסם פתיחה/הגדלה, אך יציאה משתמשת ב-ExecutableQuote/חירום/ידני מתועד.

ספי Staleness מוגדרים כ-Baseline מוצע בשלוש רמות (תצוגה/ניתוח/ביצוע) — מתחשבים בלוחות, חגים, DST, Halt, Pre/Post, source_timestamp vs received_at.

Corporate Action State Machine: RECEIVED→VALIDATED→PENDING_EFFECTIVE→APPLYING→APPLIED→RECONCILED + RECONCILIATION_REQUIRED/FAILED/REVERSED/CANCELLED. canonical_action_id (זהות עסקית יציבה) + terms_hash (תנאים משתנים) — Revision משנה version+terms_hash אך לא canonical_action_id. התאמה לא ודאית בין ספקים → Quarantine (אין איחוד אוטומטי). Saga: Transaction מקומי (ישויות + Outbox) + קריאות ברוקר Idempotent; כשל חלקי → RECONCILIATION_REQUIRED (לא FAILED טרמינלי); Retry מהשלב האחרון; APPLIED רק לאחר שכל השלבים אושרו.

Cash Dividend נרשם ב-Cash Ledger ב-Pay Date — לא אוטומטית ב-Ex-Date.

Split/Reverse Split מטפלים בשברי מניה ו-Cash-in-Lieu.

Order/Stop אינם משתנים לפני בדיקה אם הברוקר כבר התאים אותם.

Merger/Spin-off אינם מחשבים רווח/Cost Basis לפי הנחה — נדרשים נתוני אירוע מאומתים ו-Reconciliation.

Delisting עובר למצב מוגבל וטיפול ידני — אין הבטחה שניתן למכור.

Halt מנטר פקודות קיימות — לא רק חוסם פקודות חדשות.

בידוד שכבות: MarketData קיים אינו מערבב RAW/CANONICAL/ADJUSTED; Compatibility Layer = Canonical בלבד.

Rollback מוגבל למסלול קריאה — אינו מבטל Corporate Action; נדרש אירוע מתקן + Reconciliation + Audit.

Provider Interface: Timeout, Retry, Rate Limit, Circuit Breaker, Health Status, Error Classification. אין Secrets ב-Raw.

Lineage מאפשר שחזור מ-Derived דרך Canonical (source_refs[]) ל-Raw.

רישוי ספק נבדק לפני שמירת Payload — licensing_tag מתועד; retention_policy_tag מוגדר.

AuditEvent (CH5-005) מסומן Planned — חיבור ל-Decision Snapshot רק לאחר CH5-003 ממומש ו-PUBLISHED.

השוואת Shadow מול הנתיב הקיים עומדת בסבילות המאושרת.

18 · ראיות נדרשות בדוח הביצוע
דוגמת Raw Payload + hash + provider_event_id + source_timestamp.דוגמת Canonical משוחזר מ-Raw עם source_refs[] ו-arbitration_reason.דוגמת ExecutableQuote — bid/ask/last, side_match, trading_status.דוח Lineage מקצה לקצה.תרחישי Data Quality — סבילות, עדיפות, צבירה, Quarantine + שחרור.תרחישי Staleness בשלוש רמות + לוחות/חגים/DST/Halt.תרחיש Split/Reverse Split — שברי מניה, Cash-in-Lieu, בדיקת ברוקר.תרחיש Dividend — Cash Ledger ב-Pay Date.תרחיש Symbol/Exchange Change — AssetMaster Alias History.תרחיש Merger/Spin-off — Reconciliation מול ברוקר.תרחיש Delisting — מצב מוגבל.תרחיש Halt — מעקב פקודות קיימות.תרחיש State Machine — מעבר מלא + Idempotency (יישום כפול נחסם) + Saga (כשל חלקי → RECONCILIATION_REQUIRED; Retry מהשלב האחרון).בדיקת בידוד שכבות — אין ערבוב באותו מסלול.בדיקת Rollback מוגבל — Corporate Action אינו הפיך טכנית.בדיקת Provider Interface — Timeout, Circuit Breaker, Error Classification.סריקת Secrets ב-Raw — אין API Keys/Tokens.בדיקת רישוי — licensing_tag + retention_policy_tag.דוח Shadow comparison.
19 · Definition of Done

המפרט אושר לפני תחילת ביצוע.

כל שינוי זוהה לפי קובץ/Entity/Function/Workflow וכולל תוכנית Rollback (מוגבל למסלול קריאה; Corporate Action אינו הפיך טכנית).

כל תנאי קבלה קיבל בדיקה ותוצאה.

לא נוצרה נסיגה בהגנות, ב-State Machine או ב-Idempotency של CH3.

חוזי הסוכנים וה-CIO Shadow של CH4 נשמרו.

הופק דוח ביצוע הכולל ראיות, חריגות והמלצת סגירה.

רק לאחר אישור דוח הביצוע משתנה סטטוס המפרט ל-Version 1.0 — Closed.

20 · קבצים מושפעים

base44/entities/AssetMaster.jsonc — ישות חדשה (תנאי מקדים).

base44/entities/AliasHistory.jsonc — ישות חדשה.

base44/entities/RawMarketData.jsonc — ישות חדשה (Append-Only כאשר מותר ברישוי; תיעוד בלבד).

base44/entities/CanonicalMarketData.jsonc — ישות חדשה (source_refs[], hash_version).

base44/entities/AdjustedMarketData.jsonc — ישות חדשה (ניתוח בלבד).

base44/entities/DerivedMetric.jsonc — ישות חדשה (ניתוח בלבד).

base44/entities/ExecutableQuote.jsonc — ישות חדשה (ביצוע בלבד).

base44/entities/CorporateAction.jsonc — ישות חדשה + State Machine.

base44/entities/QuarantineRecord.jsonc — ישות חדשה (עם בעלים ותהליך שחרור).

base44/entities/MarketData.jsonc — בידוד (Canonical בלבד דרך Compatibility Layer).

base44/entities/Portfolio.jsonc — עדכון דרך מנגנון (CorporateAction/Fill בלבד).

base44/shared/assetMaster.ts (חדש) — Resolution + Alias History.

base44/shared/providerInterface.ts (חדש) — Timeout/Circuit Breaker/Health/Error Classification.

base44/shared/canonicalizationEngine.ts (חדש) — source_refs[]/canonical_serialization/hash_version.

base44/shared/executableQuoteService.ts (חדש) — ציטוט ברוקר תקף לביצוע.

base44/shared/dataQualityChecker.ts (חדש) — סבילות/עדיפות/צבירה/Quarantine.

base44/shared/stalenessChecker.ts (חדש) — שלוש רמות + לוחות/חגים/DST.

base44/shared/corporateActionStateMachine.ts (חדש) — State Machine + Saga + canonical_action_id/terms_hash.

base44/shared/adjustmentEngine.ts (חדש) — התאמה דרך State Machine.

base44/shared/lineageTracker.ts (חדש) — שחזור Lineage.

base44/shared/layerIsolation.ts (חדש) — אכיפת בידוד שכבות.

src/pages/Ch5Spec004.jsx — עמוד מפרט זה (תיעוד).

21 · סדר ביצוע

1. יצירת AssetMaster + AliasHistory (תנאי מקדים מוכלל).

2. יצירת ישויות: RawMarketData, CanonicalMarketData, AdjustedMarketData, DerivedMetric, ExecutableQuote, CorporateAction, QuarantineRecord.

3. בידוד MarketData קיים — Compatibility Layer חושף Canonical בלבד; אין ערבוב שכבות.

4. יצירת base44/shared/providerInterface.ts — Timeout, Circuit Breaker, Health, Error Classification, איסור Secrets.

5. יצירת base44/shared/canonicalizationEngine.ts — source_refs[], canonical_serialization, hash_version, arbitration_reason.

6. יצירת base44/shared/executableQuoteService.ts — ציטוט ברוקר תקף לביצוע, side_match.

7. יצירת base44/shared/dataQualityChecker.ts — סבילות, עדיפות, צבירה, Quarantine עם בעלים ותהליך שחרור.

8. יצירת base44/shared/stalenessChecker.ts — שלוש רמות + לוחות/חגים/DST/Halt/Pre-Post.

9. יצירת base44/shared/corporateActionStateMachine.ts — State Machine + Saga (RECONCILIATION_REQUIRED) + canonical_action_id/terms_hash + תאריכים.

10. יצירת base44/shared/adjustmentEngine.ts — התאמה דרך State Machine (שברים, Cash-in-Lieu, בדיקת ברוקר, Pay Date).

11. יצירת base44/shared/lineageTracker.ts + layerIsolation.ts.

12. חיבור ל-asset_id מ-AssetMaster (מקומי) ול-Snapshot מ-CH5-003 (כאשר ממומש ו-PUBLISHED).

13. Feature Flag: Shadow comparison — השוואת נתיב Canonical מול MarketData הקיים.

14. בדיקות קבלה: Data Quality, Corporate Actions (State Machine), Staleness, Lineage, Quarantine, Layer Isolation, Rollback מוגבל.

15. הפקת דוח ביצוע CH5-004 עם כל הראיות.

תלות

CH5-001 מאושר (מיפוי As-Is); CH5-002 מאושר (מודל בעלות — מיושם כאן כ-AssetMaster); CH5-003 מאושר לביצוע v0.3 (Snapshot — נדרש ממומש ו-PUBLISHED לחיבור למסלול החלטה). AuditEvent (CH5-005) Planned — חיבור יתבצע לאחר מימוש CH5-005. ניתן להכין במקביל חלקי, אך אין לחבר למסלול החלטה לפני יציבות asset_id ו-Snapshot PUBLISHED.

מחוץ לתכולה

בחירת ספק מסחרי סופי, אלגוריתם מסחר, שינוי חוזי סוכן, שינוי ספי Trade Validity המאושרים (CH3-003), הפעלת CIO, או מימוש AuditEvent מלא (CH5-005).

Approved v0.4 — Ready for Implementationמפרט רביעי מתוך ששת מפרטי CH5. v0.4 אושר לביצוע ב-09.08.2026 — לא נדרש סבב Review נוסף. Version 1.0 ייקבע לאחר המימוש ואישור דוח הביצוע. המפרט הבא הוא CH5-005 (גרסאות ידע, Audit, Lineage ו-Retention). AuditEvent מסומן Planned — חיבור ל-Decision Snapshot רק לאחר CH5-003 ממומש ו-PUBLISHED.