G.1Inputs and Sources
Three programs carry the plan's arithmetic: plate_model.py follows a diner's dollar through a stall, succession_lab.py follows a hand-over month by month, and funding_model.py follows the plan's own money for twenty years. This section lists every parameter they hold, read from the code itself, so nothing here can drift from what the models use.
The table is built by reading each model's constants, its rates and settings, the defaults of its functions and, where a function keeps a number to itself, the literal in its source. A check fails the build if any constant in the three programs is missing from it. The sources are those the code names; the full citations are in Sources. g1-parameters.csv
G.1.1The parameters
Follow the Plate · plate_model.py
| Parameter | Value | Unit | Source or basis | Mark | Used in |
|---|---|---|---|---|---|
| PWM_ASSISTANT_MONTHLY | 2,220 | $ a month | MOM, PWM for a food/drink stall assistant, from 1 Jul 2026 | Official | D.4 benchmark; G.2 |
| PWM_ASSISTANT_HOURS | 190.667 | hours a month | A 44-hour week, 52 weeks over 12 months | Derived | D.4 |
| PWM_ASSISTANT_HOURLY | 11.6434 | $ an hour | The benchmark over its hours | Derived | D.4; G.2; G.3 |
| PWM_ASSISTANT_2027 | 2,360 | $ a month | MOM, from 1 Jul 2027 (16 Mar 2026) | Official | D.6 wage shock |
| PWM_ASSISTANT_2028 | 2,500 | $ a month | MOM, from 1 Jul 2028 (16 Mar 2026) | Official | D.6 wage shock |
| PWM_COOK_HOURLY | 12.95 | $ an hour | MOM, Cook (QS), part-time, from 1 Jul 2026 | Official | Relief day, §2.7; D.7 |
| EMPLOYER_CPF | 0.17 | share of wage | CPF Board, employer rate at 55 and below, from 1 Jan 2026 | Official | Manpower; relief day |
| SEP_WIS_MAX_60PLUS | 3,267 | $ a year | CPF, Workfare WY2025, self-employed, 60 and over | Official | Household income, D.7 |
| EIR_60PLUS | 8,000 | $ a year | IRAS, Earned Income Relief from 60 | Official | Income tax |
| SUPPLY_CHAIN.farm_or_import_value | 0.55 | share of ingredient bill | No published margins by stage; the middle of a 25–45% range for the Singapore side | Assumption | D.2; D.5.3 |
| SUPPLY_CHAIN.freight_and_import | 0.1 | share of ingredient bill | No published margins by stage; the middle of a 25–45% range for the Singapore side | Assumption | D.2; D.5.3 |
| SUPPLY_CHAIN.wholesale_margin | 0.15 | share of ingredient bill | No published margins by stage; the middle of a 25–45% range for the Singapore side | Assumption | D.2; D.5.3 |
| SUPPLY_CHAIN.distribution | 0.12 | share of ingredient bill | No published margins by stage; the middle of a 25–45% range for the Singapore side | Assumption | D.2; D.5.3 |
| SUPPLY_CHAIN.processing_bases | 0.08 | share of ingredient bill | No published margins by stage; the middle of a 25–45% range for the Singapore side | Assumption | D.2; D.5.3 |
| SEHC_SURPLUS_CENTRE_YEAR | 100,000 | $ a centre a year | MSE, 15 Oct 2024: average operating surplus, 2019–23 | Official | Operator's share, D.5.3 |
| SEHC_STALLS_PER_CENTRE | 48 | stalls | 40–55 cooked-food stalls a centre | Assumption | Operator's share, D.5.3 |
| LANDLORD_SPLIT.NEA_SUB | state: 1; operator: 0; owner: 0 | shares of landlord take | The State is the landlord | Official | D.2; D.5 |
| LANDLORD_SPLIT.NEA_TEN | state: 1; operator: 0; owner: 0 | shares of landlord take | The State is the landlord | Official | D.2; D.5 |
| LANDLORD_SPLIT.SEHC | state: 0.9; operator: 0.1; owner: 0 | shares of landlord take | From the operator's surplus at 48 stalls | Derived | D.2; D.5 |
| LANDLORD_SPLIT.HDB_COFFEE | state: 0.7; operator: 0.3; owner: 0 | shares of landlord take | No stall-rent data; HDB collects them from Jan 2026 | Assumption | D.2; D.5 |
| LANDLORD_SPLIT.PVT_COFFEE | state: 0; operator: 0.25; owner: 0.75 | shares of landlord take | No stall-rent data; HDB collects them from Jan 2026 | Assumption | D.2; D.5 |
| LANDLORD_SPLIT.FOOD_COURT | state: 0; operator: 0.4; owner: 0.6 | shares of landlord take | No stall-rent data; HDB collects them from Jan 2026 | Assumption | D.2; D.5 |
| TENDER_MEDIAN_2023 | 1,800 | $ a month | MSE: 2023 median winning cooked-food bid | Official | D.4.1; G.2.3 |
| BAND_B | 1,150 | $ a month | The plan's Band B rent (§2.2) | Assumption | D.7 |
| VOUCHER_ENVELOPE | 66,000,000 | $ a year | The plan's Makan Voucher envelope (§2.5) | Assumption | D.7 |
| VOUCHER_STALLS | 12,700 | stalls | Stalls that take CDC vouchers: every type but mall food courts | Derived | D.7 |
| VOUCHER_INCREMENTAL | 0.15 | share of voucher spend | New demand from vouchers | Assumption | D.7 |
| pol_price_freedom: rise | 0.05 | share | The plan's certified price rise (§2.5) | Assumption | D.7 |
| pol_relief: days | 12 | days a year | The plan's relief days (§2.7) | Assumption | D.7 |
| RELIEF_COPAY | 80 | $ a day | The plan's co-pay (§2.7) | Assumption | D.7; G.2 |
| RELIEF_MAX_HOURS | 12 | hours a day | Employment Act, Part 4 | Official | Relief day rate |
| RELIEF_NORMAL_HOURS | 8 | hours a day | Employment Act, Part 4 (week of more than five days) | Official | Relief day rate |
| OVERTIME_MULT | 1.5 | × basic rate | Employment Act, Part 4 | Official | Relief day rate |
| pol_protection_floor: episode probability | 0.06 | a year | Hospital-cash cover: chance of a claim | Assumption | C; D.7 |
| pol_protection_floor: days lost | 21 | days an episode | Hospital-cash cover | Assumption | C; D.7 |
| pol_protection_floor: cash a day | 120 | $ a day | Hospital-cash cover | Assumption | C; D.7 |
| pol_protection_floor: premium loading | 1.3 | × expected claims | Pooled cover's loading | Assumption | C; D.7 |
| MATCH_YEAR | 1,200 | $ a year | The Protection Floor's retirement match (§2.11) | Assumption | D.7.5; B.9 |
| MATCH_SHARE_UNDER_55 | 0.5 | share of stallholders | Unpublished; the median hawker is 60 (MSE, Nov 2024): an upper bound | Assumption | D.7.5; B.9 |
| pol_rent_support_stall: support | 200 | $ a month | NEA's temporary support, Sep 2026–Feb 2027 | Official | D.7.2 incidence test |
| BUYING_GROUP_ING_MULT | 0.97 | × ingredient cost | No Singapore data; the pilot centres test it | Assumption | D.4.1; D.7 |
| GROUP_UTILITIES_MULT | 0.9 | × utilities | Group switching on the open electricity market | Assumption | D.4.1; D.7 |
| GROUP_DELIVERY_COMMISSION | 0.25 | share of delivered order | A group rate against GrabFood's 30% | Assumption | D.4.1; D.7 |
| GROUP_DELIVERY_TARGET | 0.15 | share of delivered order | The circles' target (§2.12): a sensitivity only | Assumption | D.4.1 |
| FEE_SUBSIDY | 200 | $ a stall a month | Decision of 28 Oct 2026 (§2.2): an upper bound | Assumption | D.2.2; D.7 |
| PILOT_CENTRES | 3 | centres | The plan: two Lighthouses and Tekka (§6.3) | Assumption | D.7; B.9 |
| PILOT_CENTRES_MAX | 5 | centres | Five at most before the gate (§6.5) | Assumption | D.7; B.9 |
| PILOT_CENTRE_STALLS | 226, 63, 119, 168, 103 | cooked-food stalls | NEA's lists and data.gov.sg | Official | D.2.2; B.9; G.4 |
| DEPUTY_HOURS_MULT | 0.923077 | × hours | A named deputy runs the stall an hour a day | Assumption | D.4.1; D.7 |
| FOUNDING_REBATE | 400 | $ a month | The funding model's partner rebate, rounded down | Derived | D.7 |
| ELEC | q2_2026: 27.27; q3_2026: 31.91; q4_2026: 28.59 | cents a kWh | SP Group tariffs before GST | Official | D.6 energy shock |
| GAS | q2_2026: 21.92; q3_2026: 23.48; q4_2026: 21.45 | cents a kWh | City Energy, as reported | Official | D.6 energy shock |
| ELEC_WEIGHT | 0.6 | share of utilities | Electricity's weight in a stall's utilities | Assumption | D.6 |
| ENERGY_PASS_THROUGH | 0.5 | share passed on | MTI 2015's gas coefficient over a 9.3% utilities share | Derived | D.6 |
| TAKE_UP.rent_band | 0.03 | share of stalls | Take-up of each policy nationally | Assumption | D.7 national totals |
| TAKE_UP.price_freedom | 0.2 | share of stalls | Take-up of each policy nationally | Assumption | D.7 national totals |
| TAKE_UP.makan_vouchers | 1 | share of stalls | Take-up of each policy nationally | Assumption | D.7 national totals |
| TAKE_UP.relief | 0.15 | share of stalls | Take-up of each policy nationally | Assumption | D.7 national totals |
| TAKE_UP.protection_floor | 0.7 | share of stalls | Take-up of each policy nationally | Assumption | D.7 national totals |
| TAKE_UP.hdb_tender_lever | 0.5 | share of stalls | Take-up of each policy nationally | Assumption | D.7 national totals |
| TAKE_UP.buying_group | 0.25 | share of stalls | Take-up of each policy nationally | Assumption | D.7 national totals |
| TAKE_UP.group_utilities | 0.25 | share of stalls | Take-up of each policy nationally | Assumption | D.7 national totals |
| TAKE_UP.delivery_rate | 0.25 | share of stalls | Take-up of each policy nationally | Assumption | D.7 national totals |
| TAKE_UP.fee_reset | 1 | share of stalls | Take-up of each policy nationally | Assumption | D.7 national totals |
| TAKE_UP.named_deputy | 0.3 | share of stalls | Take-up of each policy nationally | Assumption | D.7 national totals |
| TAKE_UP.rent_support_stall | 1 | share of stalls | Take-up of each policy nationally | Assumption | D.7 national totals |
| TAKE_UP.support_person | 1 | share of stalls | Take-up of each policy nationally | Assumption | D.7 national totals |
| TAKE_UP.heritage_anchor | 0 | share of stalls | Take-up of each policy nationally | Assumption | D.7 national totals |
| TAKE_UP.founding_rebate | 0.00266667 | share of stalls | Take-up of each policy nationally | Assumption | D.7 national totals |
| RENT_QUOTES.system_median | 1,250 | $ a month | MSE, 18 Sep 2023 and 5 Feb 2025 | Official | D.4.1; G.2.3 |
| RENT_QUOTES.comparable_2025 | 1,450 | $ a month | MSE, 8 Sep 2026 | Official | D.4.1; G.2.3 |
| RENT_QUOTES.tender_2023 | 1,800 | $ a month | MSE: 2023 median winning bid | Official | D.4.1; G.2.3 |
| SUCCESSOR_CUSTOM | 0.95 | share of custom kept | succession_lab's typical successor (its mode) | Assumption | D.4.1; G.5 |
| SUB_SUCCESSOR_AMR | 1,250 | $ a month | Median assessed market rent given to Parliament | Official | E.1; G.5 |
| succession_case: rate | 0.08 | share of takings | The first-draft Succession Mortgage terms (§4.3, §4.4) | Assumption | E.1.1 |
| succession_case: floor | 900 | $ a month | The first-draft Succession Mortgage terms (§4.3, §4.4) | Assumption | E.1.1 |
| succession_case: cap | 2,200 | $ a month | The first-draft Succession Mortgage terms (§4.3, §4.4) | Assumption | E.1.1 |
| succession_case: months_goodwill | 15 | months of net | The first-draft Succession Mortgage terms (§4.3, §4.4) | Assumption | E.1.1 |
| succession_case: royalty | 0.025 | share of takings | The first-draft Succession Mortgage terms (§4.3, §4.4) | Assumption | E.1.1 |
| LANDING_FLOOR | 2,800 | $ a month | Graduate Landing Package income top-up (§3.4) | Assumption | Day page |
| LANDING_CAP | 1,000 | $ a month | Graduate Landing Package top-up cap (§3.4) | Assumption | Day page |
| REGULARS_ORDERS_PER_WEEK | 1.5 | orders a week a regular | Unpublished; tested at 1 and 2 | Assumption | D.4.2; G.6 |
| REGULARS_DISH_TYPES.drinks_snacks | 1.2 | plates an order | Unpublished until the Year 0 baseline | Assumption | D.4.2; G.6 |
| REGULARS_DISH_TYPES.noodles_rice | 1.3 | plates an order | Unpublished until the Year 0 baseline | Assumption | D.4.2; G.6 |
| REGULARS_DISH_TYPES.family | 2 | plates an order | Unpublished until the Year 0 baseline | Assumption | D.4.2; G.6 |
| REGULARS_TIERS.Bronze | 20, none | names; share of orders | The plan's grades (§3.6) | Assumption | D.4.2; G.6 |
| REGULARS_TIERS.Silver | 50, 0.1 | names; share of orders | The plan's grades (§3.6) | Assumption | D.4.2; G.6 |
| REGULARS_TIERS.Gold | 100, 0.2 | names; share of orders | The plan's grades (§3.6) | Assumption | D.4.2; G.6 |
| REGULARS_TIERS.Platinum | 250, 0.5 | names; share of orders | The plan's grades (§3.6) | Assumption | D.4.2; G.6 |
| REGULARS_HEALTHY_SHARE | 0.35 | share of orders | Half of the NRA's 71% repeat share (2013) | Assumption | D.4.2; G.6 |
| HES_HAWKER_SPEND_MONTH | 491 | $ a household a month | SingStat, HES 2023 | Official | D.7.3 |
| diner_household: price_rise | 0.05 | share | The voucher-cover test (§2.5) | Assumption | D.7.3 |
| diner_household: share_of_stalls | 0.2 | share of stalls | The voucher-cover test (§2.5) | Assumption | D.7.3 |
| diner_household: voucher | 120 | $ a year | The voucher-cover test (§2.5) | Assumption | D.7.3 |
| RELIEF_COPAY_MEDICAL | 40 | $ a day | The plan's medical-leave co-pay (§2.7) | Assumption | §2.9; G.2.2 |
| NEWCOMER_TERM | 3 | years a tenancy | NEA's renewal rule, Nov 2024 | Official | D.4.1; G.2.3 |
| CLFS_2021_OWN_ACCOUNT | 1,470 | $ a month | MOM CLFS 2021, in the ACPW report, Fig. 1.1, read from a chart | Derived | D.4; G.3 |
| HAWKER_PRICES_2021 | 102.8 | index, 2019 = 100 | SingStat rates, chained | Derived | D.4; G.3 |
| HAWKER_PRICES_2026 | 122.8 | index, 2019 = 100 | SingStat, Jan–Sep 2026, chained | Derived | D.4; G.3 |
| monte_carlo: n | 5,000 | stalls a type | Method | Derived | D.4; G.3 |
| medisave_rate by age (30, 40, 47, 60) | 0.08, 0.09, 0.1, 0.105 | share of net trade income | CPF, self-employed MediSave, 2026 | Official | Net after MediSave |
| income_tax bands (width, rate) | 20,000 at 0%, 10,000 at 2%, 10,000 at 3.5%, 40,000 at 7%, 40 … | $ of chargeable income | IRAS, YA2024 on | Official | Net after tax |
| wis_sep maxima by age (30, 40, 50, 60) | 1,633, 2,333, 2,800, 3,267 | $ a year | CPF, WY2025; phase-in and taper assumed linear | Official | Workfare |
Follow the Gift · funding_model.py
| Parameter | Value | Unit | Source or basis | Mark | Used in |
|---|---|---|---|---|---|
| YEARS | 21 | years | Year 0 to Year 20 | Derived | B.9; G.4 |
| PWM_STALL_ASSISTANT | 1: 2,360; 2: 2,500; 3: 2,500; 4: 2,500 | $ a month, by plan year | MOM path to Jul 2028; held from Year 3 | Official | Apprentices, B.2–B.5 |
| PWM_COOK_HOURLY | 1: 13.69; 2: 14.42; 3: 14.42 | $ an hour, by plan year | MOM, Cook (QS) | Official | Relief Corps, B.2–B.5 |
| EMPLOYER_CPF_55_AND_BELOW | 0.17 | share of wage | CPF Board, 2026 | Official | Apprentices; Corps |
| EMPLOYER_CPF_60_65 | 0.125 | share of wage | CPF Board, 2026 | Official | Fellowships |
| APPRENTICE_MONTHS | 18 | months | The plan's cycle (§3.3) | Assumption | Apprentices |
| APPRENTICE_CYCLE | 1: 50,684; 2: 52,650; 3: 52,650 | $ an apprentice, by start year | PWM wage for 18 months with employer CPF | Derived | Apprentices |
| FELLOWSHIP_TEACHING | 30,000 | $ a Fellow | The plan's Master Fellowship (§4.2) | Assumption | Fellowships |
| FELLOWSHIP_STEWARDSHIP | 24,000 | $ a Fellow | The plan's Master Fellowship (§4.2) | Assumption | Fellowships |
| FELLOWSHIP_COMPLETION | 15,000 | $ a Fellow | The plan's Master Fellowship (§4.2) | Assumption | Fellowships |
| FELLOWSHIP_HEALTH | 15,000 | $ a Fellow | The plan's Master Fellowship (§4.2) | Assumption | Fellowships |
| FELLOWSHIP_CPF | 6,750 | $ a Fellow | Employer CPF at the rate above 60 to 65: a ceiling | Derived | Fellowships |
| FELLOWSHIP_TOTAL | 90,750 | $ a Fellow | Stipend, grant, cover and CPF | Derived | Fellowships |
| RELIEF_HOURS / NORMAL / OVERTIME | 12, 8, 1.5 | hours; hours; × | Employment Act, Part 4 | Official | Relief Corps |
| RELIEF_DAY_RATE_BASE | 190 | $ a day | The day rate the $12,500 a member was first drawn at | Assumption | Relief Corps |
| CORPS_MEMBER | 1: 14,753; 2: 15,539; 3: 15,539 | $ a member, by plan year | $12,500 indexed to the cook's day rate | Derived | Relief Corps |
| RATES.fellowship | 84,000 | $ a Fellow | The ledgers' rate (§7.1–7.5) | Derived | B.2–B.5; G.4 |
| RATES.fellowship_cpf | 6,750 | $ a Fellow | The ledgers' rate (§7.1–7.5) | Derived | B.2–B.5; G.4 |
| RATES.apprentices_per_fellow | 2 | apprentices | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.apprentice_cycle | 1: 50,684; 2: 52,650; 3: 52,650 | $ an apprentice | The ledgers' rate (§7.1–7.5) | Derived | B.2–B.5; G.4 |
| RATES.dish | 18,000 | $ a dish | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.landing | 20,000 | $ a landing | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.landing_share | 0.3 | share of apprentices | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.second_station | 3,000 | $ a Fellow | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.reserve_per_fellow | 15,000 | $ a Fellow | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.revenue_per_fellow | 10,000, 14,500, 25,000 | $ a Fellow, by centre year | by the centre's age: the Lighthouse's former $40,000 for 4, $87,500 for 6 and $204,000 for 8, rounded down | Assumption | B.2–B.5; G.4 |
| RATES.phasing | 3: 0.3, 0.35, 0.35; 2: 0.4, 0.6 | shares by centre year | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.ci_share | 0.583333 | share of stalls aged 55+ | stallholders aged 55+: about 70 of 120 stalls, about $750 each | Assumption | B.2–B.5; G.4 |
| RATES.ci_premium | 750 | $ a stallholder | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.corps_per_stall | 0.1 | cooks a stall | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.corps_first_year | 0.666667 | share of bench | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.corps_bench | 40,000 | $ a centre | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.corps_member | 1: 14,753; 2: 15,539; 3: 15,539 | $ a member | The ledgers' rate (§7.1–7.5) | Derived | B.2–B.5; G.4 |
| RATES.stalls_per_lead | 30 | stalls | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.leads_min | 4 | leads | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.lead_honorarium | 1,200 | $ a lead a year | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.staff_per_120_stalls | 1.5 | FTE | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.staff_min | 1.5 | FTE | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.staff_fte | 78,000 | $ a year | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.kitchen_sessions | 7,200 | $ a centre a year | honoraria and sessions, before participant fees | Assumption | B.2–B.5; G.4 |
| RATES.listening_lighthouse | 70,000 | $ | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.listening_later | 35,000 | $ | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.participant_fee | 150 | $ a participant | listening participant fees follow the stall count: 150 for the 120-stall centre the ledgers were first drawn for | Assumption | B.2–B.5; G.4 |
| RATES.participants_per_stall | 1.25 | participants a stall | The ledgers' rate (§7.1–7.5) | Derived | B.2–B.5; G.4 |
| RATES.pilot_documentation | 35,000 | $ | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.field_kit | 30,000 | $ | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.liaison_half_year | 39,000 | $ | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.baseline | 30,000 | $ | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.evaluator_fieldwork | 25,000 | $ a year | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.tastings | 15,000 | $ a year | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.events | 10,000 | $ a year | The ledgers' rate (§7.1–7.5) | Assumption | B.2–B.5; G.4 |
| RATES.baseline_interview_hours | 3 | hours a stall | ASSUMPTION: an opening interview (1 h), two check-ins (0.5 h each), a closing one (1 h) | Assumption | B.2–B.5; G.4 |
| RATES.interviewer_hour | 50 | $ an hour | the listening sessions' rate: the $150 participant fee for a session, taken as 3 hours | Derived | B.2–B.5; G.4 |
| RATES.tally_sheets | 20 | $ a stall | ASSUMPTION: 14 daily sheets and a clipboard, at print cost, a stall | Assumption | B.2–B.5; G.4 |
| RATES.data_assistant_month | 4,000 | $ a month | the research assistants' rate ($48,000 for 2 x 6 months) | Assumption | B.2–B.5; G.4 |
| RATES.stalls_per_data_month | 80 | stalls a month | ASSUMPTION: a data assistant keys and checks about 80 stalls' sheets a month | Assumption | B.2–B.5; G.4 |
| MAINTENANCE_RATE | 0.1 | share of planning count a year | Fellowships from Year 4, fed by the at-risk count | Assumption | B.9.4; G.4 |
| CONTINGENCY | 0.1 | share of gross | On every ledger line | Assumption | B.2–B.5 |
| WATCHLIST.listed | 0, 300, 600, 800 | stalls listed, by year | The Regulars' List ledger (§3.6) | Assumption | B.2–B.5 |
| WATCHLIST.travel | 10 | $ a listing | The Regulars' List ledger (§3.6) | Assumption | B.2–B.5 |
| WATCHLIST.decal | 5 | $ a decal | The Regulars' List ledger (§3.6) | Assumption | B.2–B.5 |
| WATCHLIST.registry_page | 20 | $ a listing | The Regulars' List ledger (§3.6) | Assumption | B.2–B.5 |
| WATCHLIST.thanks | 5 | $ a listing | The Regulars' List ledger (§3.6) | Assumption | B.2–B.5 |
| WATCHLIST.coordinator | 78,000 | $ a year | The Regulars' List ledger (§3.6) | Assumption | B.2–B.5 |
| WATCHLIST.booklet_template | 0, 6,000, 2,000, 2,000 | $ by year | The Regulars' List ledger (§3.6) | Assumption | B.2–B.5 |
| WATCHLIST.booklet_edition | 250 | $ a centre a year | The Regulars' List ledger (§3.6) | Assumption | B.2–B.5 |
| WATCHLIST.listing | 0, 6,000, 2,000, 2,000 | $ by year | The Regulars' List ledger (§3.6) | Assumption | B.2–B.5 |
| WATCHLIST.share_of_stalls | 0.12, 0.15 | share of stalls | The Regulars' List ledger (§3.6) | Assumption | B.2–B.5 |
| WATCHLIST.cooked_food_stalls | 6,000 | stalls | More than 6,000 in government centres | Official | B.2–B.5 |
| WATCHLIST.nomination_names | 20 | names | The Regulars' List ledger (§3.6) | Assumption | B.2–B.5 |
| WATCHLIST.horizon_years | 3 | years | The Regulars' List ledger (§3.6) | Assumption | B.2–B.5 |
| WATCHLIST.promotion_rate | 0.1 | share a year | The Regulars' List ledger (§3.6) | Assumption | B.2–B.5 |
| WATCHLIST.at_risk_share | 0.15, 0.25 | share of listed stalls | The Regulars' List ledger (§3.6) | Assumption | B.2–B.5 |
| WATCHLIST.sample_at_risk | 8 | stalls | The five-centre sample | Derived | B.2–B.5 |
| WATCHLIST.sample_heritage_worthy | 55 | stalls | The five-centre sample | Derived | B.2–B.5 |
| WATCHLIST.centres | 123 | centres | Government hawker centres | Official | B.2–B.5 |
| WATCHLIST.per_listing | 40 | $ a listing | The Regulars' List ledger (§3.6) | Derived | B.2–B.5 |
| CORE | the national operating lines, Years 0–3 | $ a year | The ledgers (§7.2–7.5) | Assumption | G.4.1 |
| CENTRES | stall counts, tiers, padding and planning counts | see G.4.2 | NEA lists; guides and records counted 28 Oct 2026 | Derived | G.4.2 |
| PARAMS.operating | 476,443, 1,482,338, 1,631,630, 1,839,695 | $ by plan year | Computed from the ledgers (G.4) | Derived | B.9; G.4 |
| PARAMS.programme | 430,155, 3,146,911, 5,074,627, 5,602,009 | $ by plan year | Computed from the ledgers (G.4) | Derived | B.9; G.4 |
| PARAMS.lighthouses_only_operating | 476,443, 1,375,385, 1,442,650, 1,650,715 | $ by plan year | Computed from the ledgers (G.4) | Derived | B.9; G.4 |
| PARAMS.lighthouses_only_programme | 430,155, 3,026,901, 3,848,019, 3,974,274 | $ by plan year | Computed from the ledgers (G.4) | Derived | B.9; G.4 |
| PARAMS.addon_operating | 0, 120,516, 234,520, 234,520, 0, 103,961, 188,980, 188,980 | $ by add-on and year | Computed from the ledgers (G.4) | Derived | B.9; G.4 |
| PARAMS.addon_programme | 0, 154,000, 1,792,322, 3,050,899, 0, 109,285, 1,447,345, 2,3 … | $ by add-on and year | Computed from the ledgers (G.4) | Derived | B.9; G.4 |
| PARAMS.later_centre_operating | 0, 106,953, 188,980, 188,980 | $ by plan year | Computed from the ledgers (G.4) | Derived | B.9; G.4 |
| PARAMS.later_centre_programme | 0, 120,010, 1,226,608, 1,627,735 | $ by plan year | Computed from the ledgers (G.4) | Derived | B.9; G.4 |
| PARAMS.extra_centres | 0 | centres | add-ons beyond the central three: 0, 1 (Old Airport Road) or 2 (and Maxwell); five at most before the §6.5 gate | Assumption | B.9; G.4 |
| PARAMS.centres_vetoed | 0 | 0 or 1 | 1 if Tekka's hawkers veto it at the end of Year 1 (§6.2); the Lighthouses vote in Year 0 | Assumption | B.9; G.4 |
| PARAMS.steady_operating | 1,839,695 | $ a year, Year 3 prices | Year 4 onward, in Year 3 prices, indexed: the core at its Year 3 level and each centre's operating lines (ASSUMPTION) | Derived | B.9; G.4 |
| PARAMS.steady_programme | 2,292,194 | $ a year, Year 3 prices | Year 4 onward: each centre's maintenance year, Fellowships at about 10% of its planning count (ASSUMPTION) | Derived | B.9; G.4 |
| PARAMS.lighthouses_only_steady_operating | 1,650,715 | $ a year, Year 3 prices | the same for the two Lighthouses alone (downside mode) | Derived | B.9; G.4 |
| PARAMS.lighthouses_only_steady_programme | 1,725,979 | $ a year, Year 3 prices | The funding model's setting (§7.6) | Derived | B.9; G.4 |
| PARAMS.steady_addon_operating | 234,520, 188,980 | $ a year, by add-on | Computed from the ledgers (G.4) | Derived | B.9; G.4 |
| PARAMS.steady_addon_programme | 905,859, 524,604 | $ a year, by add-on | Computed from the ledgers (G.4) | Derived | B.9; G.4 |
| PARAMS.steady_later_operating | 188,980 | $ a year | Year 4 onward, Tekka: its maintenance year (what a veto saves) | Derived | B.9; G.4 |
| PARAMS.steady_later_programme | 566,215 | $ a year | The funding model's setting (§7.6) | Derived | B.9; G.4 |
| PARAMS.gov_ops | 0, 300,000, 400,000, 500,000 | $ by plan year | Government operating match, Years 0–3 (§7.6) | Assumption | B.9; G.4 |
| PARAMS.gov_ops_after | 500,000 | $ a year, nominal | Year 4 onward, nominal, if it continues (ASSUMPTION) | Assumption | B.9; G.4 |
| PARAMS.gov_ops_continues | yes | switch | The funding model's setting (§7.6) | Assumption | B.9; G.4 |
| PARAMS.gifts_for_spending | 193,000, 300,000, 400,000, 500,000 | $ by plan year | expendable gifts, Years 0–3 (§7.6) | Assumption | B.9; G.4 |
| PARAMS.foundation_y0 | 713,598 | $ | NHB research and heritage foundations, Year 0: the Year 0 net requirement less gifts for spending (§7.6) | Derived | B.9; G.4 |
| PARAMS.foundation_y0_public_share | 0.5 | share | NHB is a statutory board: half of the Year 0 grant counted as public (ASSUMPTION) | Assumption | B.9; G.4 |
| PARAMS.anchor | 7,500,000, 7,500,000 | $ by tranche | Government anchor $15M: half at launch, half by the second close (ASSUMPTION on timing) | Assumption | B.9; G.4 |
| PARAMS.match_pool | 10,000,000 | $ | 1:1 matching pool, sought first from MCCY's Cultural Matching Fund | Assumption | B.9; G.4 |
| PARAMS.match_ratio | 1 | × each gift | The funding model's setting (§7.6) | Assumption | B.9; G.4 |
| PARAMS.closes | 12,000,000, 30,000,000, 40,000,000 | $ at each close | capital committed at launch, by end of Year 1, by end of Year 2 | Assumption | B.9; G.4 |
| PARAMS.draw_rate | 0.035 | share a year | §7.6: 3.5% of the start-of-year value, then of the three-year average. | Assumption | B.9; G.4 |
| PARAMS.draw_avg_years | 3 | years | draw on the average of the last three start-of-year values once available | Assumption | B.9; G.4 |
| PARAMS.ladder_yield | 0.021 | a year | Treasury bills ~1.9%, 10-year SGS 2.30% (Aug 2026): a short ladder ~2.1% | Official | B.9; G.4 |
| PARAMS.portfolio | balanced | policy | balanced (fixed-income core) | fixed_income | growth | Assumption | B.9; G.4 |
| PARAMS.heritage_pool_pretax | 51,700,000 | $ a year | firms selling hawker heritage directly (listed coffeeshop operators, heritage snack chains): latest profit after tax / 0.83 | Derived | B.9; G.4 |
| PARAMS.regular_pool_pretax | 144,000,000 | $ a year | other F&B: listed restaurants, the Singapore share of regional groups (ASSUMPTION 20%), unlisted profitable firms (ASSUMPTION $50M) | Derived | B.9; G.4 |
| PARAMS.pledge_rate_heritage | 0.01 | share of profit | The funding model's setting (§7.6) | Assumption | B.9; G.4 |
| PARAMS.pledge_rate_regular | 0.005 | share of profit | The funding model's setting (§7.6) | Assumption | B.9; G.4 |
| PARAMS.partner_takeup | 0.5 | share of the pool | share of the profit pool that pledges (ASSUMPTION) | Assumption | B.9; G.4 |
| PARAMS.pledge_years | 1, 5 | first and last year | pledges run Years 1–5 | Assumption | B.9; G.4 |
| PARAMS.pledge_renewal | 0.6 | share renewed | share renewed for Years 6–10, and again after (ASSUMPTION) | Assumption | B.9; G.4 |
| PARAMS.operator_share_of_heritage | 0.77 | share | coffeeshop and food-court operators' share of the heritage pool | Assumption | B.9; G.4 |
| PARAMS.inkind_share | 0.5 | share | operators meet up to half in rent rebates to heritage stalls (§2.4) | Assumption | B.9; G.4 |
| PARAMS.heritage_stalls_hosted | 20 | stalls | heritage stalls in partner coffeeshops and food courts (ASSUMPTION) | Assumption | B.9; G.4 |
| PARAMS.households | 1,490,000 | households | resident households (SingStat, 2025: 1,487,100) | Official | B.9; G.4 |
| PARAMS.diner_participation_launch | 0.02 | share of households | share giving in the launch year (ASSUMPTION) | Assumption | B.9; G.4 |
| PARAMS.diner_gift_launch | 60 | $ a gift | The funding model's setting (§7.6) | Assumption | B.9; G.4 |
| PARAMS.diner_participation_after | 0.008 | share of households | The funding model's setting (§7.6) | Assumption | B.9; G.4 |
| PARAMS.diner_gift_after | 40 | $ a gift | The funding model's setting (§7.6) | Assumption | B.9; G.4 |
| PARAMS.diner_receipted_share | 0.6 | share | share of diner gifts claimed for the tax deduction (ASSUMPTION) | Assumption | B.9; G.4 |
| PARAMS.fnb_sales | 12,000,000,000 | $ a year | SingStat F&B services sales, about $1.0B a month | Official | B.9; G.4 |
| PARAMS.till_share | 0, 0.02, 0.04, 0.05 | share of sales, by year | share of F&B sales at participating outlets, Years 0–3, then flat (ASSUMPTION) | Assumption | B.9; G.4 |
| PARAMS.avg_bill | 30 | $ a bill | in Year 0 prices; bills rise with inflation, so the number of bills stays flat (ASSUMPTION) | Assumption | B.9; G.4 |
| PARAMS.till_optin | 0.08 | share of bills | share of bills that add the dollar (ASSUMPTION) | Assumption | B.9; G.4 |
| PARAMS.till_amount | 1 | $ a bill | The funding model's setting (§7.6) | Assumption | B.9; G.4 |
| PARAMS.other_corporate | 0, 2,000,000, 2,000,000, 500,000 | $ by plan year | Years 0–3, then the Year 3 level (ASSUMPTION) | Assumption | B.9; G.4 |
| PARAMS.hp_outlets | 0, 0, 0, 15, 80, 220, 400 | outlets by year | licensed outlets, Years 0–6, then flat; launches in Year 3 with the first certified masters (ASSUMPTION) | Assumption | B.9; G.4 |
| PARAMS.hp_plates_per_outlet_month | 1,000 | plates | certified plates an outlet a month (ASSUMPTION) | Assumption | B.9; G.4 |
| PARAMS.hp_fee | 0.5 | $ a plate | per certified plate, nominal (ASSUMPTION) | Assumption | B.9; G.4 |
| PARAMS.hp_packaged_sales | 0, 0, 0, 0, 1,000,000, 4,000,000, 10,000,000, 20,000,000 | $ by year | retail sales of licensed packaged goods, Years 0–7, then flat (ASSUMPTION) | Assumption | B.9; G.4 |
| PARAMS.hp_royalty | 0.03 | share of sales | royalty on packaged-goods retail sales (ASSUMPTION) | Assumption | B.9; G.4 |
| PARAMS.hp_scale | 1 | × | multiplies outlets and packaged sales: low case 0.5, high case 2.0 | Assumption | B.9; G.4 |
| PARAMS.hp_failure | 0.333333 | share a year | share of licensed outlets and packaged lines that fail and pay nothing in a year; | Assumption | B.9; G.4 |
| PARAMS.hp_split | 0.4, 0.4, 0.2 | shares: families, match, Seed Bank | master's family, retirement match, Seed Bank | Assumption | B.9; G.4 |
| PARAMS.match_earmark | 0 | share of surplus gifts | share of continuing gifts above the programme's needs earmarked for the retirement match, Year 4 on (0 in the adopted plan) | Assumption | B.9; G.4 |
| PARAMS.match_share_under_55 | 0.5 | share | plate_model.MATCH_SHARE_UNDER_55 | Assumption | B.9; G.4 |
| PARAMS.rm_base | 8,280,000 | $ a year, every age | base at every age: $1,200 a year for every public-centre stallholder, 6,900 stalls (plate_model, share 1.0); x match_share_under_55 | Derived | B.9; G.4 |
| PARAMS.rm_stretch_match | 11,928,000 | $ a year, every age | stretch match at every age: every stallholder at 70% enrolment, 9,940 x $1,200 (plate_model, share 1.0); x match_share_under_55 | Derived | B.9; G.4 |
| PARAMS.rm_stretch_cover | 1,953,806 | $ a year | stretch's pooled hospital-cash cover, every enrolled stallholder at any age (plate_model.national); not scaled | Derived | B.9; G.4 |
| PARAMS.rm_lighthouse | 346,800 | $ a year | Years 1–3: the two Lighthouses only, 289 stalls x $1,200 at every age, if adopted early (ASSUMPTION); x match_share_under_55 | Assumption | B.9; G.4 |
| PARAMS.rm_lighthouse_on | no | switch | off: the match is costed, not asked for, and starts only if adopted, nationally from Year 4 | Assumption | B.9; G.4 |
| PARAMS.rm_takeup | 0.25, 0.5, 0.75, 1 | share by Years 4–7 | share of the base (or stretch) reached in Years 4–7, then all (ASSUMPTION) | Assumption | B.9; G.4 |
| PARAMS.hp_gov_match_years | 3 | years | Government matches licence income 1:1 for its first three years (ASSUMPTION) | Assumption | B.9; G.4 |
| PARAMS.hp_gov_match_cap | 2,000,000 | $ a year | ... capped at $2M a year (ASSUMPTION) | Assumption | B.9; G.4 |
| PARAMS.hdb_contribution | 1,680,000 | $ a year | HDB's forgone tender rent from the tender lever at full roll-out, if HDB agrees (plate_model.national); x match_share_under_55 counts towards the … | Derived | B.9; G.4 |
| PARAMS.hdb_from_year | 4 | plan year | The funding model's setting (§7.6) | Assumption | B.9; G.4 |
| PARAMS.hdb_rollout | 0.25, 0.5, 0.75, 1 | share by Years 4–7 | share of the $1.68M reached in Years 4–7, then all: it bites only as coffeeshops are re-tendered (ASSUMPTION) | Assumption | B.9; G.4 |
| PARAMS.rm_stretch_hdb_coffee | 2,352,000 | $ a year, every age | the stretch's match for HDB-rented coffeeshop stallholders at every age, 1,960 x $1,200; x match_share_under_55 ($1.18M): the cap on what HDB's … | Derived | B.9; G.4 |
| PARAMS.hdb_on | no | switch | on only in the "with HDB" scenario | Assumption | B.9; G.4 |
| PARAMS.rm_earmark_central | 0.5 | share | central share of surplus continuing gifts earmarked for the match (scenarios 0, 0.5, 1) | Assumption | B.9; G.4 |
| PARAMS.major_gifts_available | none | $ (none: as needed) | None = whatever each close needs; a number caps the total (Monte Carlo) | Assumption | B.9; G.4 |
| PARAMS.giving_stops_after | none | year (none: never) | a year after which diners, partners and companies stop giving (stress test) | Assumption | B.9; G.4 |
| PARAMS.deduction_multiple | 2.5 | × the gift | 250% tax deduction for gifts to IPCs, extended by Budget 2026 to 31 Dec 2029; | Official | B.9; G.4 |
| PARAMS.tax_rate_corporate | 0.17 | rate | The funding model's setting (§7.6) | Official | B.9; G.4 |
| PARAMS.tax_rate_major | 0.23 | rate | major donors: the 22-24% top bands of plate_model.income_tax (IRAS, YA2024 on); 23% central | Official | B.9; G.4 |
| PARAMS.tax_rate_diner | 0.07 | rate | typical receipted diner (ASSUMPTION) | Assumption | B.9; G.4 |
| PARAMS.inflation | 0.015 | a year | ASSUMPTION, long-run Singapore CPI | Assumption | B.9; G.4 |
| PORTFOLIOS.balanced | 0.041, 0.073 | mean and s.d. of yearly return | Fixed-income core (60% bonds, 40% equities) | Assumption | B.9.3; G.4 |
| PORTFOLIOS.fixed_income | 0.027, 0.04 | mean and s.d. of yearly return | Bonds and bills only | Assumption | B.9.3; G.4 |
| PORTFOLIOS.growth | 0.052, 0.11 | mean and s.d. of yearly return | Growth (30% bonds, 70% equities) | Assumption | B.9.3; G.4 |
The succession stress test · succession_lab.py
| Parameter | Value | Unit | Source or basis | Mark | Used in |
|---|---|---|---|---|---|
| EXIT_FLOOR | 1,000 | $ a month | Six-month take-home at which a successor quits | Assumption | E.1; G.5 |
| OTHER_EXIT_HAZARD | 0.02 | a year | Quitting for health or family | Assumption | E.1; G.5 |
| FIRST_LOSS_MONTHS | 24 | payments | The first-loss guarantee (§4.3) | Assumption | E.1; G.5 |
| ROYALTY | 0.025 | share of takings | Family Name Royalty (§4.4) | Assumption | E.1; G.5 |
| ROYALTY_MONTHS | 120 | months | The royalty's ten-year cap (§4.4) | Assumption | E.1; G.5 |
| HORIZON | 120 | months | Months each hand-over is followed | Derived | E.1; G.5 |
| ESCROW_FEE | 0.015 | share of payments | Escrow fee (§4.3) | Assumption | E.1; G.5 |
| HAWKER_CPI_YOY | 2020: 0.013; 2021: 0.015; 2022: 0.057; 2023: 0.061; 2024: 0. … | a year | SingStat for 2020–25; 2026 approximated | Official | E.1; G.5 |
| ING_EXTRA | 2020: 0; 2021: 0.01; 2022: 0.03; 2023: 0.02; 2024: 0; 2025: … | a year, over hawker CPI | Ingredient costs ahead of prices, 2021–26 | Assumption | E.1; G.5 |
| UTIL_LEVEL | 2020: 0.75; 2021: 0.82; 2022: 1.05; 2023: 1.12; 2024: 1.05; … | × 2026 level | Shaped on SP Group's tariffs | Assumption | E.1; G.5 |
| WAGE_GROWTH | 0.035 | a year | Assistants' pay before the 2026 benchmark | Assumption | E.1; G.5 |
| RENT_WAIVER_MONTHS | 2020: 4, 5, 6, 7, 8; 2021: 6, 7, 8 | months | Eight months' waiver (MSE, 3 Aug 2021); the months placed by us | Assumption | E.1; G.5 |
| FEE_SUBSIDY_MONTHS | 2020: 4, 5, 6; 2021: 6, 7, 8 | months | Six months' fee subsidy (MSE, 3 Aug 2021); the months placed by us | Assumption | E.1; G.5 |
| TABLE_CLEANING_FEE | 520 | $ a month | MSE, 8 Sep 2026: the table-cleaning part of $720 | Official | E.1; G.5 |
| RESERVE_BUDGET | 150,000, 240,000, 270,000 | $ by year | The ledgers' first-loss reserve (§7.2–7.5) | Derived | E.1; G.5 |
| ESCROW_SETUP_ADMIN | 40,000, 30,000, 30,000 | $ by year | Set-up and administration | Assumption | E.1; G.5 |
| CRISIS_MONTHS | 24 | months | A 2020-style shock fails every young mortgage | Assumption | E.1; G.5 |
| draw_handovers: n | 4,000 | hand-overs | Method | Derived | E.1.2 |
| draw_handovers: min_seller_net | 1,500 | $ a month | Only stalls with goodwill to sell | Assumption | E.1.2 |
| draw_handovers: retention_mode | 0.95 | share of custom | The successor keeps the custom | Assumption | E.1.2 |
| draw_handovers: multiple_range | 12, 18 | months of net | Goodwill (§4.3) | Assumption | E.1.2 |
| rule_adopted: rate, net cap, floor, cap | 0.08, 0.3, 600, 2,200 | share; share; $; $ | The adopted terms (§4.3) | Assumption | E.1; G.5 |
| make_protected: protected income | 1,500 | $ a month | The adopted protected income (§4.3) | Assumption | E.1.4; G.5 |
| NOTES.successor | Keeps 75–105% of the master's custom (triangular, mode 95%). … | text | The futures' growth rates and noise | Assumption | E.1.2 |
| NOTES.costs | Plate prices rise 2.5% a year (s.d. 1.5 points), with ingred … | text | The futures' growth rates and noise | Assumption | E.1.2 |
Long values are cut at about sixty characters in print; the download holds them whole. A PARAMS entry marked derived and holding a list (the operating and programme budgets) is computed from the ledgers (the plan's year-by-year cost tables) in G.4, The Funding Ledgers. The models are tied together: the funding model checks its match costs against plate_model and its first-loss reserve (money set aside to cover the first losses if a successor fails) against succession_lab each time it runs.
G.1.2The stall inputs
Every field of the six stall types and of the prologue's three cases, as the model holds them. The cases are John's single-handed stall, Ah Kow's queue and Nurul's landing stall; every input in which they differ from the tendered archetype (a typical stall of one type) is an assumption calibrated to the prologue (D.4, F.3). g1-stall-inputs.csv
| Field | Unit | Mark | NEA, subsidised | NEA, tendered | Operator-run | HDB coffeeshop | Private coffeeshop | Food court | John | Ah Kow | Nurul |
|---|---|---|---|---|---|---|---|---|---|---|---|
| ticket | $ a plate | Derived | 4.3 | 4.5 | 4.4 | 5.2 | 5.5 | 6.5 | 4.5 | 4.5 | 4.5 |
| plates_per_day | plates | Derived | 150 | 156 | 160 | 160 | 195 | 150 | 105 | 400 | 100 |
| rent | $ a month | Official | 290 | 1,250 | 1,700 | 3,400 | 6,000 | 0 | 1,250 | 1,250 | 805 |
| turnover_rent | share of sales | Assumption | 0 | 0 | 0 | 0 | 0 | 0.25 | 0 | 0 | 0 |
| fees | $ a month | Official | 720 | 720 | 1,050 | 1,000 | 1,200 | 300 | 720 | 720 | 720 |
| fee_to_landlord | share of fees | Assumption | 0.3 | 0.3 | 0.114286 | 0.6 | 0.6 | 1 | 0.3 | 0.3 | 0.3 |
| capture | share of support | Assumption | 0 | 0.05 | 0.15 | 0.35 | 0.85 | 0.95 | 0.05 | 0.05 | 0.05 |
| rent_vol | s.d. at renewal | Assumption | 0.02 | 0.1 | 0.1 | 0.2 | 0.3 | 0.15 | 0.1 | 0.1 | 0.1 |
| value_meal_share | share of plates | Official | 0 | 0 | 0.1 | 0 | 0 | 0 | 0 | 0 | 0 |
| value_meal_discount | $ a plate | Assumption | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| app_discount | share of sales | Assumption | 0 | 0 | 0.02 | 0 | 0 | 0 | 0 | 0 | 0 |
| stalls_in_bloc | stalls | Derived | 2,070 | 4,330 | 500 | 2,800 | 3,000 | 1,500 | 0 | 0 | 0 |
| days_open | days a month | Assumption | 26 | 26 | 26 | 26 | 26 | 26 | 26 | 26 | 26 |
| hours_per_day | hours | Official | 13 | 13 | 13 | 13 | 13 | 13 | 11 | 12.5 | 13 |
| manpower | $ a month | Derived | 2,920 | 2,920 | 2,920 | 2,920 | 3,600 | 2,920 | 0 | 7,800 | 2,920 |
| utilities | $ a month | Derived | 1,000 | 1,000 | 1,000 | 1,000 | 1,200 | 600 | 800 | 1,600 | 1,000 |
| misc | $ a month | Assumption | 300 | 300 | 420 | 300 | 300 | 300 | 250 | 500 | 300 |
| k_ing | share of sales | Derived | 0.445 | 0.445 | 0.445 | 0.445 | 0.445 | 0.445 | 0.47 | 0.445 | 0.445 |
| delivery_share | share of sales | Assumption | 0.08 | 0.08 | 0.08 | 0.08 | 0.08 | 0.08 | 0.08 | 0.03 | 0.08 |
| delivery_commission | share of order | Official | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 |
| epay_share | share of sales | Assumption | 0.25 | 0.25 | 0.25 | 0.25 | 0.25 | 0.25 | 0.25 | 0.25 | 0.25 |
| mdr | share of e-sales | Official | 0.005 | 0.005 | 0.005 | 0.005 | 0.005 | 0.005 | 0.005 | 0.005 | 0.005 |
| closure_days_year | days a year | Assumption | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 |
| age | years | Official | 60 | 60 | 60 | 60 | 60 | 60 | 35 | 72 | 60 |
| pass_ing | $ price a $ cost | Derived | 1.25 | 1.25 | 1.25 | 1.25 | 1.25 | 1.25 | 1.25 | 1.25 | 1.25 |
| pass_rent | $ price a $ cost | Derived | 0.35 | 0.35 | 0.35 | 0.35 | 0.35 | 0.35 | 0.35 | 0.35 | 0.35 |
| elasticity | elasticity | Assumption | -0.5 | -0.5 | -0.5 | -0.5 | -0.5 | -0.5 | -0.5 | -0.5 | -0.5 |
| medisave_arrears_p | share | Assumption | 0.05 | 0.05 | 0.05 | 0.05 | 0.05 | 0.05 | 0.05 | 0.05 | 0.05 |
| match_share | share | Assumption | none | none | none | none | none | none | 1 | 0 | none |
G.1.3The data dictionary
Each table in this volume is published as a CSV file with a JSON twin that carries the same rows and, for each column, its label and unit. The files are listed here with their row counts and the mark that applies to them; "mixed" means the file carries a mark for each value or row.
| File | Section | What it holds | Rows | Columns | Mark |
|---|---|---|---|---|---|
| g1-parameters.csv | G.1 | Every parameter of the three models | 295 | 7 | mixed |
| g1-stall-inputs.csv | G.1.2 | Every input of the six stall archetypes and the prologue's three cases | 29 | 12 | mixed |
| g2-pnl.csv | G.2.1 | The stall P&L by archetype, a month and a year | 19 | 14 | Derived |
| g2-illness.csv | G.2.2 | What days closed for illness cost the hawker in a year | 30 | 9 | Derived |
| g2-newcomer.csv | G.2.3 | The newcomer's rent path for three bids | 6 | 13 | Derived |
| g3-net.csv | G.3 | Net income: deciles, quartiles and the mean, 5,000 simulated stalls a type | 7 | 16 | Derived |
| g3-hours.csv | G.3 | Hours: deciles, quartiles and the mean, 5,000 simulated stalls a type | 7 | 14 | Derived |
| g3-rent.csv | G.3 | Rent: deciles, quartiles and the mean, 5,000 simulated stalls a type | 7 | 14 | Derived |
| g3-inputs.csv | G.3 | The Monte Carlo's inputs: each draw as the code writes it, and its 10th, 50th and 90th percentiles by stall type | 17 | 20 | Assumption |
| g4-ledgers.csv | G.4.1 | Every pilot centre and the national core: every line, every year, 0–20 (long format) | 729 | 6 | Derived |
| g4-stacks.csv | G.4.2 | The four funding stacks, Years 0–3: two, three, four and five pilot centres | 16 | 16 | Derived |
| g4-plan.csv | G.4.3 | The central plan, Years 0–20: every inflow and every use | 21 | 29 | Derived |
| g4-endowment-paths.csv | G.4.4 | The endowment paths, Years 0–20, with the probability of holding real value | 84 | 12 | Derived |
| g4-chua.csv | G.4.5 | Heritage Plate licensees that fail each year: none, a third, half (Chua, 2024) | 3 | 16 | Derived |
| g4-maintenance.csv | G.4.4 | The maintenance rate from Year 4: 10% to 40% of the planning count | 4 | 6 | Derived |
| g5-schedules.csv | G.5.1 | Succession Mortgage schedules under the adopted terms, by stall type, year by year | 135 | 7 | Derived |
| g5-summary.csv | G.5.1 | Succession Mortgage by stall type: goodwill, payment, payoff and royalty | 7 | 10 | Derived |
| g5-royalty.csv | G.5.2 | The Family Name Royalty's ten years and what is left at each anniversary | 66 | 4 | Derived |
| g5-licences.csv | G.5.3 | Heritage Plate licence income and its three shares, by failure rate | 24 | 6 | Derived |
| g6-regulars.csv | G.6.1 | The Regulars' List in orders: every stall and dish type | 11 | 20 | Assumption |
| g6-tiers.csv | G.6.1 | The Regulars' List thresholds | 4 | 3 | Assumption |
| g6-baseline.csv | G.6.2 | The Year 0 stall baseline: sample sizes, interview hours and cost by centre | 5 | 7 | Assumption |
| g6-publishes.csv | G.6.2 | What the baseline publishes, as distributions | 7 | 3 | Assumption |
| g7-sensitivity.csv | G.7 | One at a time: every parameter tested, its range and what it does to the four-year total and the endowment | 30 | 10 | Derived |
| g8-rents.csv | G.8 | Rents, 2012–2026 | 12 | 9 | mixed |
| g8-fees.csv | G.8 | Fees and wages, 2012–2026 | 15 | 9 | mixed |
| g8-prices.csv | G.8 | Prices, 2012–2026 | 15 | 13 | mixed |
| g8-sales.csv | G.8 | Real sales, 2012–2026 | 14 | 9 | mixed |
| g9-parity.csv | G.9.1 | Parity between the Python models and the browser ports | 1 | 8 | Derived |
| g8-series.csv | G.8 | Every series value, with its unit, mark, source and note (data/curated/series.csv) | 666 | 10 | mixed |
The columns of the main files; every file's columns, labels and units are in its JSON twin and in index.json. g8-series.csv has year, series, value, unit, status (the mark), source_id, source, url, note and set (core or extended).
| File | Columns (unit) |
|---|---|
| g1-parameters | Model; Parameter; Value (as the model holds it); Unit; Source or basis; Mark (official, derived or assumption); Where it is used |
| g2-pnl | Line; Model field; NEA, tendered, a month ($); NEA, subsidised, a month ($); HDB coffeeshop, a month ($); Operator-run, a month ($); John, a month ($); Ah Kow, a month ($); NEA, tendered, a year ($); NEA, subsidised, a year ($); HDB coffeeshop, a year ($); Operator-run, a year ($); John, a year ($); Ah Kow, a year ($) |
| g3-net | Stall; Model key; P10 ($ a month); P20 ($ a month); P25 ($ a month); P30 ($ a month); P40 ($ a month); P50 ($ a month); P60 ($ a month); P70 ($ a month); P75 ($ a month); P80 ($ a month); P90 ($ a month); Mean ($ a month); Share under $1,760 (share); Share under the assistant's hourly benchmark (share) |
| g4-ledgers | Centre; Model key; Part (programme, operating, revenue, A or B); Line; Plan year; Amount ($ nominal; Years 0–3 lines gross, before contingency) |
| g4-plan | Year; Price level (Year 0 = 1); Anchor ($); Match ($); Partners, cash ($); Partners, rebates ($); Diners ($); Till dollar ($); Other firms ($); Major gifts ($); Foundations ($); Bridge grants ($); Gifts for spending ($); Govt ops match ($); Heritage Plate ($); Draw ($); Ladder ($); Spend operating ($); Spend programme ($); Spend ($); Gifts to spending ($); Unfunded ($); To corpus ($); Investment return ($); Corpus end ($); Corpus real end ($); Tax forgone ($); Public ($); Private ($) |
| g5-schedules | Case; Year after hand-over; Successor's net ($ a month, before payment); Mortgage paid ($ a year); Royalty paid ($ a year); Goodwill still owed ($, year end); Take-home ($ a month) |
| g6-regulars | Stall; Model key; Dish type; Plates a week; Plates an order; Orders a week; $ an order ($); Bronze: regulars to reach; Bronze: route (count or share); Silver: regulars to reach; Silver: route (count or share); Gold: regulars to reach; Gold: route (count or share); Platinum: regulars to reach; Platinum: route (count or share); Regulars for the 35% base; Tier at the base; Base at 1 orders a week; Base at 1.5 orders a week; Base at 2 orders a week |
| g7-sensitivity | Parameter; Central; Range and why; Four-year total, low ($); Four-year total, high ($); Corpus in Year 20, low (multiple of $40M, today's dollars); Corpus in Year 20, high (multiple of $40M); Swing in the four-year total (share); Swing in the corpus (share); Largest relative swing (share) |