מקורות ומתודולוגיה
כל שם, מספר, הצבעה והצעת חוק בעמודים אלה מגיעים ממאגר רשמי. אם המאגר ריק — העמוד ריק.
מה מותר ומה אסור באתר
- שמות, מזהים, מושבים, הצעות חוק והצבעות מגיעים רק מ-Knesset OData v4 או מ-data.gov.il / אתרי ועדת הבחירות.
- אין ויקיפדיה, אין חדשות ואין Open Knesset כמקור ראשי.
- אין המצאת שמות, מספרים, הצבעות, הצעות חוק או רשימות מועמדים.
- שמות אנשים וסיעות מוצגים בעברית כפי שנרשמו במאגר. אין תרגום שם רשמי לאנגלית אם המאגר לא מספק שדה אנגלי.
- תאריך בחירות או דד־ליין להגשת רשימות מודפסים רק אם נמשכו מעמוד רשמי של ועדת הבחירות או מנוסח חוק סופי. תאריך שצוטט בהודעת כנסת ולא נשאב מחוק/CEC לא מוצג כנתון נעול.
הצבעות והתאמה לחברי הכנסת
כל עמוד הצעת חוק באתר מציג את כל הצבעות המליאה שנערכו עליה — כולל איך הצביעה כל חברה וכל חבר כנסת: בעד, נגד, נמנע או נוכח, ישירות מהנתונים הרשמיים של הכנסת (KNS_PlenumVoteResult). עמוד של כל חברת וחבר כנסת מרכז בחזרה את כל ההצבעות שלהם לאורך הקדנציה, כך שאפשר לבדוק בקלות איך הצביע ח״כ מסוים על הצעת חוק מסוימת, או לעבור על מלוא היסטוריית ההצבעות שלו.
בעמוד של כל הצעת חוק מכנסת ה-25 שיש עליה הצבעה תקפה אפשר גם להצביע בעצמכם — בעד או נגד — בכובע של חברת או חבר כנסת, או לדלג להצעה הבאה בלי לענות. ההשוואה עצמה נעשית מול ארבעת הסטטוסים הרשמיים כפי שנרשמו לח״כים. ההצבעה נשמרת בדפדפן שלכם בלבד, ולאחר שהצבעתם על כמה הצעות חוק, כרטיס ההצבעה מציג את חברת/חבר הכנסת שההצבעות שלו/ה הכי דומות לשלכם, לפי אותם נתוני הצבעה רשמיים.
אין כאן ניחוש או סקר — רק ההצבעות שנרשמו בפועל, והציון מחושב רק מולן.
מאגר הכנסת
מאגר הכנסת הרשמי. שמות הישויות מתועדים למטה; האתר אינו מקשר לקבצי JSON גולמיים.
- KNS_Person, KNS_PersonToPosition, KNS_Position, KNS_Faction
- KNS_Bill, KNS_BillInitiator, KNS_BillName, KNS_Status, KNS_DocumentBill
- KNS_PlenumSession, KNS_PlmSessionItem, KNS_DocumentPlenumSession
- KNS_PlenumVote, KNS_PlenumVoteResult
- KNS_Committee, KNS_Query, KNS_GovMinistry, KNS_KnessetDates
עמוד ישיבות המליאה מציג את KNS_PlenumSession ואת קבצי KNS_DocumentPlenumSession. הנוסח שעל העמוד מחולץ מהקובץ הרשמי (Markdown); המקור המחייב נשאר הקובץ.
- מפתח ראשי ב-v4 הוא Id. PersonID בשורות תפקיד מצביע ל-KNS_Person.Id.
- PositionID 43 = חבר הכנסת · 61 = חברת הכנסת · 54 = חבר/ת סיעה
- צירוף סיעה נעשה רק משורות 54. שורות 43/61 מגיעות עם FactionID ריק.
- MkId בטבלת ההצבעות אינו בהכרח PersonID. הצירוף דורש גם את השם הרשמי שנרשם בשורת התוצאה. ח״כ שנעדר אינו מופיע בשורה — זה לא נספר כנגד.
- KNS_VoteMain אינו בשימוש. הסינון משתמש ב-contains(), לא ב-substringof().
- בקשות גדולות עלולות לקבל HTTP 474. הלקוח מדפדף ב-$top/$skip קטנים ומנסה שוב. כש-REPLICA_READS פעיל והעותק ב-PostgreSQL (Lathe) מסונכרן, העמודים קוראים את אותם שדות רשמיים מהעותק ולא מ-OData בזמן הבקשה.
- KNS_PlenumVote.ItemID מצטרף ל-KNS_Bill.Id רק כשיש רשומת הצעה. מינוי ופריטים אחרים נשארים בלי קישור. בעמוד ההצעה יש ציר זמן אחד: ישיבות מליאה וועדה מ-KNS_PlmSessionItem / KNS_CmtSessionItem (ItemTypeID=2) לפי StartDate של הישיבה, עם תיאור הסטטוס שנרשם לפריט, והצבעות מליאה כנקודות נפרדות לפי VoteDateTime (לא תחת הישיבה). שם השלב הוא ForOptionDesc הרשמי (לא קריאה ראשונה/שנייה שהומצאה), ושורות KNS_PlenumVoteResult לפי ResultDesc. כברירת מחדל הצבעות «לקבל את ההסתייגות» / «לקבל את ההסתייגויות» וחזרות על אותו שלב מקוצרות; «הצג פרטים נוספים» מחזיר את כל השורות. אותו כלל חל על כרטיס ההצבעות בעמוד הח״כ. ישיבות רצופות באותו מקום ועם אותו תיאור סטטוס ממוזגות לנקודה אחת עם טווח תאריכים. אין היסטוריית תאריכי מעבר סטטוס מ-KNS_Status — רק הסטטוס הנוכחי. קישור לאדם: MkId עם השם הרשמי בשורה כשהם תואמים ל-KNS_Person.Id, ואחרת השם הרשמי כשהוא מצביע על רשומת KNS_Person יחידה (לא רק roster כנסת 25). ח״כ שנעדר אינו בשורה.
- עמוד האדם מוביל ברשומה: הצעות, הצבעות, ועדות, שאילתות. שמות הצעות מובילים לעמוד הצעה ייעודי (/bills/…), לא ל-JSON. כותרת הצבעה מצורפת לאותו עמוד כשהפריט הוא הצעת חוק. הסטטוס בעמוד ההצעה הוא תיאור מ-KNS_Status (למשל «התקבלה בקריאה שלישית»), בלי להדפיס מזהה ובלי מועד מעבר — ישיבת מליאה או ועדה אינה «מועד הסטטוס». תקציר רשמי (SummaryLaw) מוצג כשקיים; אם יש תקציר AI הוא מוצג ראשון והרשמי מאחורי פירוט. התקבלה כחוק מוצגת בטקסט הסטטוס וב-PublicationDate ברשומות אם נרשם — אין בוליאן נפרד ואין תאריכי קריאה שהומצאו.
- «תקציר AI» נוצר offline מ-PDF רשמי ב-KNS_DocumentBill (למשל הצעה לקריאה ראשונה), נשמר בטבלה נגזרת bill_ai_summary בעותק ה-PostgreSQL, ומסומן בבירור שלא זהו תקציר הכנסת. כשהוא קיים הוא מוצג לפני SummaryLaw — תקציר קצר, תמציתי וחד-משמעי לגבש עמדה, לא בסגנון חקיקה רשמי. הרצה: npm run summaries:generate עם OPENROUTER_API_KEY (ברירת מחדל upstage/solar-pro4 מוזל).
- תאריך בשורה הוא תאריך חקיקתי מהמאגר בלבד: מועד ישיבת מליאה או ועדה להצעות (KNS_PlmSessionItem / KNS_CmtSessionItem, ItemTypeID=2), ואם אין ישיבה — פרסום ברשומות. אין תאריך הנחה, קריאה ראשונה, או שינוי סטטוס שהומצא — ב-KNS_Bill אין שדה כזה. אינדקס ההצעות מסודר לפי המועד הזה מהחדש לישן. חותמת התחזוקה של ה-API (למשל תאריך עדכון ברשומת אדם) אינה מוצגת. זמן המשיכה לאתר («נמשך ב») מוסתר כברירת מחדל, וכשמופעל הוא מופיע בעמוד זה בלבד — לא מתחת לכרטיסים או בכותרת אדם.
- אותו שם רשמי באותה כנסת נשאר כמה רשומות KNS_Bill.Id. עמוד ההצעה מציג את האחרות עם היוזם ומספר פרטי, ומסמן «נדונה באותה ישיבה» רק כששני ItemID מופיעים באותה ישיבת מליאה או ועדה (PlenumSessionID / CommitteeSessionID). זה לא איחוד מ-KNS_BillUnion ואין הפניה מזהה אחד לשני. באינדקס נשארות שורות נפרדות, עם ספירת «עוד באותו שם».
- KNS_Query מצטרף לפי PersonID. אם הצירוף נכשל המספר מושמט. שם שאילתה בעמוד האדם מוביל ל-/queries/…. נוסח השאלה והתשובה מחולץ מ-PDF דרך $expand=KNS_DocumentQuery (GroupType 38 שאילתה, 142 תשובת השר). EntitySet בשם KNS_DocumentQuerie מחזיר 404. ספירת יוזמות ($count של IsInitiator=true) מוצגת בעמוד האדם, לא באינדקס — כי ל-BillInitiator אין KnessetNum והספירה היא לכל הקריירה.
ועדת הבחירות המרכזית ו-data.gov.il
- bechirot.gov.il
- votes25.bechirot.gov.il (תוצאות 2022; לעיתים תחזוקה)
- data.gov.il/dataset/votes-knesset — datastore_search
- data.gov.il/dataset/candidates-lists
קובץ היישובים של הכנסת ה-25 מכיל אותיות רשימה, לא שמות סיעות של הכנסת. האתר מסכם קולות לפי האות הרשמית ולא ממפה אותן לשמות סיעה אלא אם המאגר עצמו מספק את המיפוי. חישוב באדר-עופר אינו מבוצע כאן. הורדות CSV ישירות עלולות להחזיר דף התחברות — לכן נעשה שימוש ב-datastore_search.
מטמון
עמודי הבית, האינדקס, הסיעות, הרשימות, האדם וההצעות נשמרים ב-ISR כשעה (Cache-Control ציבורי). התאריכים ברשומות הם חקיקתיים. זמן המשיכה מהמאגר מוסתר כברירת מחדל; כש-SHOW_FETCHED_AT פעיל הוא מוצג למטה בעמוד זה, לא כשורה שנייה תחת כל בלוק. עמוד האדם מזרים קודם את הכותרת; שורות הצעות, הצבעות, ועדות ושאילתות נמשכות בנפרד. סקריפט האימות מושך מחדש מה-API.
אימות
npm run verify בודק שלושה ח״כים ידועים מול המאגר החי: נתניהו (PersonID 965), גפני (526), ליברמן (427) — צירוף הסיעה דרך PositionID 54, וכן את תפקיד ראש הממשלה של 965 (PositionID 45, ממשלה 37).