Источники и методология
Каждое имя, число, голосование и законопроект на этих страницах взяты из официального реестра. Если реестр пуст — страница пуста.
What this site will and will not do
- Names, identifiers, seats, bills, and votes come only from Knesset OData v4 or data.gov.il / CEC sites.
- Wikipedia, news, and Open Knesset are not primary sources.
- The site never invents names, numbers, votes, bills, or candidate lists.
- Person and faction names stay in the official Hebrew register fields. English UI does not invent English name translations.
- Election day or list deadlines are printed only if fetched from an official CEC page or a final statute. A date cited in a Knesset press note is not shown as a locked official date.
Votes and your Knesset match
Every bill page on this site shows every plenum vote taken on it — including exactly how each Member of Knesset voted: for, against, abstain, or present, straight from the Knesset's own official records (KNS_PlenumVoteResult). Every member's page collects all of their votes across the term in one place, so you can check how a specific MK voted on a specific bill, or browse their full voting record.
Every Knesset-25 bill page with a valid vote also lets you cast your own — for or against, as if you were a Member of Knesset — or skip to the next bill without answering. The comparison itself still runs against all four official statuses as recorded for each MK. Your vote is saved only in your browser, and once you have voted on a few bills, the vote card shows which Member of Knesset's votes line up closest with yours, based on that same official vote data.
No guessing and no polling — only votes that were actually cast, and the score is computed only against those.
Knesset register
The official Knesset register. Entity names are listed below; this site does not link to raw JSON blobs.
- 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
The plenum sittings page shows KNS_PlenumSession and the KNS_DocumentPlenumSession files. On-page text is extracted from the official file as Markdown; the file remains the source.
- The v4 primary key is Id. PersonID on role rows points at KNS_Person.Id.
- PositionID 43 = חבר הכנסת · 61 = חברת הכנסת · 54 = חבר/ת סיעה
- Faction membership is joined only from PositionID 54 rows. MK role rows 43/61 arrive with a null FactionID.
- MkId on vote rows is not necessarily PersonID. Joins also require the official name on the result row. An absent MK has no row; that is not counted as no.
- KNS_VoteMain is not used. Filters use contains(), not substringof().
- Large requests may receive HTTP 474. The client pages with small $top/$skip values and retries. When REPLICA_READS is on and the PostgreSQL (Lathe) copy is synced, pages read those same official fields from the replica instead of OData on the request path.
- KNS_PlenumVote.ItemID joins KNS_Bill.Id only when a bill row exists. Appointments and other items stay unlinked. The bill page draws one timeline: plenum and committee sittings from KNS_PlmSessionItem / KNS_CmtSessionItem (ItemTypeID=2) by session StartDate, carrying the status text recorded on the item, and each plenum vote as its own point dated by VoteDateTime (not nested under the sitting). The stage name is the official ForOptionDesc (not an invented first/second reading), and KNS_PlenumVoteResult rows follow ResultDesc. By default reservation-accept votes and repeats of the same stage are collapsed; “Show more details” puts every register vote back. The person-page vote card uses the same rule. Consecutive sittings with the same venue and the same recorded status are merged into one point with a date range. KNS_Status has no change-date history — only the current status. A person link uses MkId with the official row name when they match KNS_Person.Id, otherwise the official name when it matches exactly one KNS_Person row (not only the K25 roster). An absent MK has no row.
- The person page leads with the record: bills, votes, committees, queries. Bill names link to a dedicated bill page (/bills/…), never to JSON. A vote title links to that page when the item is a bill. Bill status is the KNS_Status description (for example «התקבלה בקריאה שלישית»), with no identifier printed and no transition date — a plenum or committee sitting is not a status date. An official SummaryLaw appears when present; if an AI summary exists it is shown first and the official text is behind a disclosure. Became-law is that status text plus PublicationDate in Reshumot when present — there is no became-law boolean, and first/second-reading dates are not invented.
- An «AI summary» is generated offline from an official KNS_DocumentBill PDF (for example a first-reading bill text), stored in derived table bill_ai_summary in the PostgreSQL copy, and labeled clearly as not the Knesset SummaryLaw. When present it is shown before SummaryLaw — a short, plain civic brief for forming an opinion, not official-register legalese. Run npm run summaries:generate with OPENROUTER_API_KEY (default discounted model upstage/solar-pro4).
- A date on a row is legislative only: plenum or committee session start for bills (KNS_PlmSessionItem / KNS_CmtSessionItem, ItemTypeID=2), or Reshumot publication when there is no session. Tabled, first-reading, or status-change dates are not invented — KNS_Bill has no such field. The bill index is ordered by that date newest-first. The API maintenance stamp (for example a person-record update time) is never shown. Fetch time (“Fetched at”) is hidden by default; when enabled it appears on this page only — not under cards or on person headers.
- The same official name in one Knesset stays as separate KNS_Bill.Id rows. The bill page lists the others with initiator and private number, and marks “on the same sitting agenda” only when both ItemIDs appear on the same plenum or committee sitting (PlenumSessionID / CommitteeSessionID). That is not a KNS_BillUnion merge and there is no redirect from one id to another. The index keeps separate rows, with a count of others that share the name.
- KNS_Query joins on PersonID. If that join fails the number is omitted. Query names on the person page link to /queries/…. Question and answer text are extracted from PDFs via $expand=KNS_DocumentQuery (GroupType 38 question, 142 minister reply). The EntitySet name KNS_DocumentQuerie returns 404. Initiator $count (IsInitiator=true) is shown on the person page, not the index — BillInitiator has no KnessetNum, so that count is career-wide.
CEC and data.gov.il
- bechirot.gov.il
- votes25.bechirot.gov.il (2022 results; sometimes on maintenance)
- data.gov.il/dataset/votes-knesset — datastore_search
- data.gov.il/dataset/candidates-lists
The 25th Knesset locality file contains list letters, not Knesset faction names. The site sums votes by the official letter and does not map letters onto faction names unless the register itself provides that map. Bader-Ofer is not computed here. Direct CSV downloads can return a sign-in page, so datastore_search is used.
Caching
Home, index, faction, lists, person, and bill pages use about one hour of ISR (public Cache-Control). Dates on records are legislative. Register fetch time is hidden by default; when SHOW_FETCHED_AT is on it appears below on this page, not as a second mute line under every block. Person pages stream the header first; named bill, vote, committee, and query rows load in separate fragments. The verification script re-fetches from the API.
Verification
npm run verify checks three known MKs against the live register: Netanyahu (PersonID 965), Gafni (526), Lieberman (427) — faction join via PositionID 54, plus 965 as prime minister (PositionID 45, government 37).