Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions lib/slideshows.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,10 @@ import { overhang2026BackupConfig } from "@/slideshows/overhang-2026-backup/conf
import { overhang2026LightningConfig } from "@/slideshows/overhang-2026-lightning/config";
import { blsTaxsim2026Config } from "@/slideshows/bls-taxsim-2026/config";
import { scottishGovernment2026Config } from "@/slideshows/scottish-government-2026/config";
import { israelMof2026Config } from "@/slideshows/israel-mof-2026/config";

export const slideshows: SlideshowConfig[] = [
israelMof2026Config,
scottishGovernment2026Config,
blsTaxsim2026Config,
overhang2026Config,
Expand Down
45 changes: 45 additions & 0 deletions slideshows/israel-mof-2026/config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import { SlideshowConfig } from '@/lib/types';
import { speakers } from '@/lib/speakers';
import { iariw2026Config } from '@/slideshows/iariw-2026/config';
import IariwTitleSlide from '@/slideshows/iariw-2026/slides/TitleSlide';
import CertificationLadderSlide from '@/slideshows/iariw-2026/slides/CertificationLadderSlide';
import TitleSlide from './slides/TitleSlide';
import {
IsraelDividerSlide,
IsraelEncodedSlide,
IsraelExampleSlide,
IsraelNextSlide,
} from './slides/IsraelSlides';

// The IARIW 2026 deck, re-titled for the Israel Ministry of Finance call,
// with an Israel section after the Axiom section.
const base = iariw2026Config.slides;
const titleIndex = base.indexOf(IariwTitleSlide);
const axiomEnd = base.indexOf(CertificationLadderSlide);
if (titleIndex !== 0 || axiomEnd < 0) {
throw new Error('israel-mof-2026: IARIW slide order changed; update config');
}

const slides = [
TitleSlide,
...base.slice(1, axiomEnd + 1),
IsraelDividerSlide,
IsraelEncodedSlide,
IsraelExampleSlide,
IsraelNextSlide,
...base.slice(axiomEnd + 1),
];

export const israelMof2026Config: SlideshowConfig = {
id: 'israel-mof-2026',
title: 'From open models to executable law: Israel',
description:
'PolicyEngine and Axiom, with Israeli income tax and National Insurance law encoded as executable code',
date: '2026-10-14',
location: "Chief Economist's Department, Israel Ministry of Finance (video call)",
footerText: 'PolicyEngine · Israel Ministry of Finance · October 2026',
partnerLogo: iariw2026Config.partnerLogo,
speakers: [speakers['max-ghenis']],
private: false,
slides,
};
210 changes: 210 additions & 0 deletions slideshows/israel-mof-2026/slides/IsraelSlides.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,210 @@
import Slide from '@/components/core/Slide';
import SlideHeader from '@/components/layout/SlideHeader';
import SlideTitle from '@/components/layout/SlideTitle';
import SectionDivider from '@/slideshows/iariw-2026/slides/SectionDivider';

// Every figure here comes from TheAxiomFoundation/rulespec-il main at
// 171f0373 (2026-10-14): the module list under il/statutes/, and the first
// case of il/statutes/composed/worker-with-children-monthly-net-pipeline.test.yaml.

const he = (text: string) => (
<span dir="rtl" style={{ unicodeBidi: 'isolate' }}>
{text}
</span>
);

export const IsraelDividerSlide = () => (
<SectionDivider
number="IL"
title="Israel"
subtitle="A proof of concept: Israeli income tax and National Insurance law, encoded from the Hebrew text and tested."
/>
);

export function IsraelEncodedSlide() {
return (
<Slide>
<SlideHeader>
<SlideTitle>Israeli tax and benefit law as executable code</SlideTitle>
</SlideHeader>

<div className="mt-4 grid grid-cols-2 gap-8 items-start">
<div className="content-card p-7">
<div className="slide-tag mb-4">Encoded so far: 18 provisions</div>
<ul className="text-xl text-gray-700 leading-relaxed space-y-3">
<li>
<b>Income Tax Ordinance:</b> rate brackets (§121), additional tax
on high incomes ({he('§121ב')}), credit points (
{he('§§33א, 34, 36, 36א')}), child credit points (§66),{' '}
{he('§120ב')}
</li>
<li>
<b>National Insurance Law:</b> child allowance (§§1, 66&ndash;68);
employee contributions (§§334, 337, 342, 348 and the rate
schedules {he('לוח י׳')}, {he('לוח י״א')})
</li>
<li>
One composed pipeline: monthly net income for an employed parent
</li>
</ul>
</div>

<div
className="content-card p-7"
style={{ borderLeftColor: 'var(--pe-amber)' }}
>
<div className="slide-tag mb-4" style={{ color: 'var(--pe-amber)' }}>
How each provision is built
</div>
<ul className="text-xl text-gray-700 leading-relaxed space-y-3">
<li>Encoded from the Hebrew text; each rule cites its provision</li>
<li>
Every number is checked against the source text, and every
module has test cases
</li>
<li>
Corpus: the Income Tax Ordinance, the National Insurance Law, the
2026 budget act and the National Health Insurance Law (1,633
provisions)
</li>
</ul>
</div>
</div>

<p className="mt-8 text-base text-gray-500">
Open source &middot; browse at{' '}
<span className="font-mono">axiom.org/il</span>
</p>
</Slide>
);
}

const rows: { label: string; value: string; total?: boolean }[] = [
{ label: 'Income tax before credits (§121), per year', value: '₪25,392' },
{
label: 'Credit points: resident 2, woman 0.5, travel 0.25, children 4.5 + 2',
value: '9.25',
},
{ label: 'Credit value: 9.25 × ₪2,904', value: '₪26,862' },
{ label: 'Income tax after credits', value: '₪0' },
{ label: 'Child allowance, per month (₪173 + ₪219)', value: '₪392' },
{
label: 'Monthly income after income tax and child allowance',
value: '₪15,392',
total: true,
},
];

export function IsraelExampleSlide() {
return (
<Slide>
<SlideHeader>
<SlideTitle>
A mother earning ₪15,000 a month, with children aged 2 and 8 (2026)
</SlideTitle>
</SlideHeader>

<div className="mt-4 grid grid-cols-2 gap-8 items-start">
<div className="content-card p-7">
<table className="w-full text-xl text-gray-700">
<tbody>
{rows.map((r) => (
<tr
key={r.label}
className={r.total ? 'font-bold border-t-2 border-gray-800' : 'border-b border-gray-200'}
>
<td className="py-2 pr-4">{r.label}</td>
<td className="py-2 text-right whitespace-nowrap tabular-nums">
{r.value}
</td>
</tr>
))}
</tbody>
</table>
</div>

<div
className="content-card p-7"
style={{ borderLeftColor: 'var(--pe-amber)' }}
>
<div className="slide-tag mb-4" style={{ color: 'var(--pe-amber)' }}>
What the example shows
</div>
<ul className="text-xl text-gray-700 leading-relaxed space-y-3">
<li>
Each line is computed by an encoded provision, and the case is a
test in the repository
</li>
<li>
The pipeline has 15 such cases: fathers, minimum wage, high
earners, a child in its birth year or turning 18, a child living
abroad
</li>
<li className="text-gray-500">
Current-year amounts (the credit-point value and the
child-allowance basic amounts) are inputs for now, and employee
National Insurance and health contributions are not yet
subtracted
</li>
</ul>
</div>
</div>
</Slide>
);
}

export function IsraelNextSlide() {
return (
<Slide>
<SlideHeader>
<SlideTitle>What a PolicyEngine model of Israel would need</SlideTitle>
</SlideHeader>

<div className="mt-4 grid grid-cols-2 gap-8 items-start">
<div className="content-card p-7">
<div className="slide-tag mb-4">Have</div>
<ul className="text-xl text-gray-700 leading-relaxed space-y-3">
<li>
Rules as code for income tax, credit points and child allowance,
with citations and tests
</li>
<li>
Employee National Insurance contribution rules encoded; health
insurance ({he('§14')}) in progress
</li>
<li>
The PolicyEngine method from the US and UK models: household
calculator, reform analysis, budget and distributional impacts
</li>
</ul>
</div>

<div
className="content-card p-7"
style={{ borderLeftColor: 'var(--pe-amber)' }}
>
<div className="slide-tag mb-4" style={{ color: 'var(--pe-amber)' }}>
Need
</div>
<ul className="text-xl text-gray-700 leading-relaxed space-y-3">
<li>
<b>Household microdata:</b> Central Bureau of Statistics household
surveys
</li>
<li>
<b>Calibration</b> to National Insurance Institute and Tax
Authority totals
</li>
<li>
<b>More rules:</b> the remaining benefits and contributions, and
current-year amounts from official publications
</li>
<li>
<b>Validation</b> against the ministry&apos;s own estimates
</li>
</ul>
</div>
</div>
</Slide>
);
}
92 changes: 92 additions & 0 deletions slideshows/israel-mof-2026/slides/TitleSlide.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
'use client';

import Image from '@/components/core/BasePathImage';
import Slide from '@/components/core/Slide';
import { speakers } from '@/lib/speakers';
import { formatDate } from '@/lib/types';

const speaker = {
...speakers['max-ghenis'],
title: 'Co-founder & CEO, PolicyEngine\nFounder & CEO, Axiom Foundation',
};

/**
* The IARIW 2026 hybrid cover, re-labelled for the Israel Ministry of
* Finance call: same seam title, Israel-specific subtitle and venue line.
*/
export default function TitleSlide() {
return (
<Slide fullBleed showFooter={false}>
<div className="absolute inset-0 grid grid-cols-2">
{/* PolicyEngine half */}
<div className="gradient-bg flex flex-col px-16 pt-24 pb-14">
<div className="h-[140px] flex items-center justify-center">
<Image
src="/logos/white.svg"
alt="PolicyEngine"
width={350}
height={100}
priority
style={{ height: '64px', width: 'auto' }}
/>
</div>

<div className="mt-20 text-right pr-8">
<h1 className="font-display text-6xl font-bold text-white whitespace-nowrap">
From open models
</h1>
</div>

<div className="mt-auto flex items-center gap-5">
<div className="w-20 h-20 relative overflow-hidden rounded-full border-2 border-white/40 shrink-0">
<Image
src={speaker.photo}
alt={speaker.name}
fill
className="object-cover"
/>
</div>
<div>
<p className="text-xl font-semibold text-white">
{speaker.name}
</p>
<p className="text-sm text-white/70 font-light whitespace-pre-line leading-snug mt-1">
{speaker.title}
</p>
</div>
</div>
</div>

{/* Axiom half */}
<div className="bg-[#f8f5ef] flex flex-col px-16 pt-24 pb-14">
<div className="h-[140px] flex items-center justify-center">
<Image
src="/logos/axiom-foundation.svg"
alt="The Axiom Foundation"
width={1026}
height={363}
priority
style={{ height: '84px', width: 'auto' }}
/>
</div>

<div className="mt-20 text-left pl-8">
<h1 className="font-display text-6xl font-bold text-[#17343a] whitespace-nowrap">
to executable law
</h1>
</div>

<div className="mt-auto">
<p className="text-lg text-gray-700">
PolicyEngine, Axiom, and Israeli tax and benefit law
</p>
<p className="text-sm text-gray-500 mt-1">
Chief Economist&apos;s Department, Israel Ministry of Finance
&middot; {formatDate('2026-10-14')}
</p>
</div>
</div>
</div>
</Slide>
);
}
Loading