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 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 בלבד.
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 בלבד.
הנתון הגולמי כפי שהתקבל מהספק — ללא עיבוד. נשמר בלתי-משתנה עם hash כאשר הרישוי מתיר; אחרת — Source/Timestamp/Schema/External Reference בלבד. אסור לשימוש ישיר בהחלטה, פקודה או הגנה — תיעוד גולמי בלבד.
איסור: אסור שימוש ישיר בהחלטה/פקודה/הגנה — Raw הוא תיעוד בלבד
נתון מנורמל לסכמה הקנונית — ניתן לשחזור מ-Raw/Reference. זהו מקור האמת לקריאה עסקית. Compatibility Layer למערכת הישנה חושף Canonical בלבד — אין ערבוב עם Raw/Adjusted באותו מסלול.
איסור: אין ערבוב עם Raw/Adjusted באותו מסלול קריאה
נתון שהותאם לאירועים תאגידיים (Split, Dividend) — לניתוח והשוואה היסטורית בלבד. אסור שיגיע ל-Order Intent. גישה מותרת רק לרכיבי ניתוח.
איסור: אסור ל-Order Intent — ניתוח בלבד; גישה רק לרכיבי ניתוח
נתון נגזר (RSI, P/E, ממוצעים, תחשיבים) — עם input_ids, formula_version ו-Lineage מלא. גישה מותרת רק לרכיבי ניתוח.
איסור: אסור ל-Order Intent — ניתוח בלבד; גישה רק לרכיבי ניתוח
ציטוט ברוקר תקף שעבר נרמול ואימות — המקור היחיד למחיר קנייה/מכירה בפקודה ובהגנה. מותאם לצד הפעולה (buy→ask, sell→bid). טרי בהרבה מנתון ניתוח. אינו מבוסס על Raw ישירות.
איסור: אסור לניתוח היסטורי — ביצוע בלבד; טרי בהרבה מנתון ניתוח
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 נשמר — אין דריסת היסטוריה.
הקמת 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.
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.
שיקולים מחייבים
- לוחות מסחר — שעות פתיחה/סגירה לכל בורסה (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 אינם נעולים; יכולים להשתנות לפי ספק, נכס ותנאי שוק.
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 בהתאם לתוצאה.
MarketData קיים אינו מערבב RAW/CANONICAL/ADJUSTED באותו מסלול קריאה — נדרשת הפרדה מלאה.
Compatibility Layer למערכת הישנה חושף Canonical בלבד — קריאה ישנה מקבלת Canonical מנורמל.
גישה ל-Adjusted ו-Derived מותרת רק לרכיבי ניתוח — אין גישה ממסלול ביצוע/פקודה/הגנה.
גישה ל-ExecutableQuote מותרת רק למסלול ביצוע — אין גישה מרכיבי ניתוח היסטורי.
Raw נגיש רק ל-Canonicalization Engine ול-Audit/Lineage — אין גישה עסקית ישירה.
Feature Flag מעביר בין מסלול קריאה קנוני למסלול ישן — אינו מערבב שכבות בתוך אותו מסלול.
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 רק דרך תהליך מתועד.
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 מול הנתיב הקיים עומדת בסבילות המאושרת.
המפרט אושר לפני תחילת ביצוע.
כל שינוי זוהה לפי קובץ/Entity/Function/Workflow וכולל תוכנית Rollback (מוגבל למסלול קריאה; Corporate Action אינו הפיך טכנית).
כל תנאי קבלה קיבל בדיקה ותוצאה.
לא נוצרה נסיגה בהגנות, ב-State Machine או ב-Idempotency של CH3.
חוזי הסוכנים וה-CIO Shadow של CH4 נשמרו.
הופק דוח ביצוע הכולל ראיות, חריגות והמלצת סגירה.
רק לאחר אישור דוח הביצוע משתנה סטטוס המפרט ל-Version 1.0 — Closed.
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 — עמוד מפרט זה (תיעוד).
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).