diff --git a/changelog.d/1106-policyengine-uk-2-123.changed.md b/changelog.d/1106-policyengine-uk-2-123.changed.md new file mode 100644 index 0000000000..88bd6e1f06 --- /dev/null +++ b/changelog.d/1106-policyengine-uk-2-123.changed.md @@ -0,0 +1 @@ +The lock's UK side moves to policyengine-uk 2.123.0, and the UK extras of microcosm-build, microcosm-data and microcosm-frame require >=2.123.0 (microcosm#1106). Nothing else in the lock moves: policyengine-core stays at 3.32.19 on the UK side and at the US side's own 3.32.5 pin (microcosm#1086). 2.123.0 carries PolicyEngine/policyengine-uk#2172: the landlord inputs `property_rental_income`, `property_finance_costs` and `property_finance_costs_brought_forward`, `property_income` documented as the SPI profit concept, the s. 274A finance-cost reduction, and a property allowance that no longer stacks on expenses already netted from profit, so a profit above £1,000 with no receipts gets no allowance (#2172 measured +£0.68bn income tax on Microcosm UK in 2025). The move also brings #2160 (UC work-related requirements at the State Pension Credit qualifying age), #2096 (the VAT reduced-rate history), #2097 (a tax credits rate date) and #2144 (a guarantee credit boundary). Re-derived with no data change: the uprating pin stamp (values unchanged), the concept coverage (288 inputs; the three new property inputs are uncovered), the concept mapping reviewed against 2.123.0 (the `property_income` note quotes the new documentation), the H2 fixture's numerical dependency, the coverage manifest's source digests and `APPROVED_UV_LOCK_SHA256`. diff --git a/changelog.d/1106-property-wealth-not-exported.fixed.md b/changelog.d/1106-property-wealth-not-exported.fixed.md new file mode 100644 index 0000000000..42c2cf10ed --- /dev/null +++ b/changelog.d/1106-property-wealth-not-exported.fixed.md @@ -0,0 +1 @@ +The UK release and the calibration engine no longer receive the Wealth and Assets Survey `property_wealth` total (microcosm#1106, the uk-data#543 defect). policyengine-uk derives `property_wealth` from `main_residence_value`, `other_residential_property_value` and `non_residential_property_value`; a persisted copy overrode that sum, has no uprating index (the published aa31bdf6 year files hold it flat from 2026 to 2030 while the sum grows 13%), and also counted owned land and the overseas and other-property remainder. The release export and the measure resolver's scratch H5 now drop it, and the resolver's receipt names what it left out; the spine keeps it for the WAS stage's own checks. The scratch H5 applies the whole release drop list, so the calibration engine reads what the release ships: beside `property_wealth` the list holds `incapacity_benefit_reported`, all zero on the spine, and six carrier columns policyengine-uk does not read (the five reported disability-benefit amounts and the salary-sacrifice pre-conversion pay), so nothing else the engine measures moves. It is a reviewed export exclusion, a declared engine-derived exclusion in the coverage ledger (144 required inputs and one reviewed exclusion), and the coverage gate now reads the frame the release writes. diff --git a/changelog.d/1106-spi-property-finance-costs.added.md b/changelog.d/1106-spi-property-finance-costs.added.md new file mode 100644 index 0000000000..5ad53323f9 --- /dev/null +++ b/changelog.d/1106-spi-property-finance-costs.added.md @@ -0,0 +1 @@ +The SPI channel draws landlords' restricted residential finance costs into the new `property_finance_costs` input (microcosm#1106). The donor tape's `LLIR_RESTRICT_AMT_TOT` is the "restricted land property finance cost", the costs of dwelling-related loans that ITTOIA 2005 s. 272A no longer deducts and s. 274A relieves as a tax reduction (SPI Public Use Tape 2022-23 documentation). It joins the first-stage SPI model as its last output, so it conditions on every income leaf, property income included, and leaves every earlier draw unchanged; the band donors copy it with the rest of the record, and cut their total-income pools on the income leaves alone, so a record's restricted costs never move it between bands. It is uprated from 2022 by the index policyengine-uk gives the variable, `obr.mortgage_interest`. The donor is refused unless `TAX_CRED`, which carries the 20% relief with the other tax credits, has a median ratio to the costs between 0.195 and 0.205; the stage receipt records the check. FRS-channel rows start at zero; the next stage imputes their landlords' costs. The column joins the export allow-list (the frozen enhanced FRS has no such column) and the gate-battery pins move with `gates.json`. diff --git a/changelog.d/1106-spi-property-income-amounts-bound.changed.md b/changelog.d/1106-spi-property-income-amounts-bound.changed.md new file mode 100644 index 0000000000..91fba7cc0a --- /dev/null +++ b/changelog.d/1106-spi-property-income-amounts-bound.changed.md @@ -0,0 +1 @@ +The 13 SPI Table 3.7 net property-income amounts by total-income band are bound (microcosm#1106, María's ruling of 2026-10-05). They had been signed out over the incumbent's x1.9 scaling (uk-data#311), which set HMRC Property Rental Income Statistics receipts against the SPI's net concept; HMRC confirmed those statistics are before allowable expenses. The facts now bind unscaled on `property_income`, landlords' profit after allowable expenses and before residential finance costs, uprated from 2023-24 to 2025 by HMRC's projected total income in each band (`hmrc.itl_2026.total_income_growth_by_total_income_band`, factors 0.977 in the £15,000 to 20,000 band to 1.236 in the £100,000 to 150,000 band), the index the count rows' growth belongs with and the employment, self-employment and private pension amount rows already use: £33.60bn in all against the incumbent fixture's £55.78bn (1.9 × £29.36bn), for example £6.56bn against £10.26bn in the £50,000 to £70,000 band and £3.15bn against £4.85bn in the £100,000 to £150,000 band. The flat per-capita GDP index first proposed (£31.78bn) would have implied per-band mean profit moves of −13% to +11% against the count rows (the microcosm#1145 review); dividends keep the flat index. Active national references go from 1,231 to 1,244. Both national compile-parity receipts gain the 13 rows (the 2025 incumbent receipt as calibration drift, with the retired scaling as the reason); the local surface is unchanged. The 13 new specs move the compiled register, so uk-candidate-eval's frozen scoring register needs a re-freeze before the next national solve. diff --git a/changelog.d/1106-uk-property-components-stage.added.md b/changelog.d/1106-uk-property-components-stage.added.md new file mode 100644 index 0000000000..54eb1f1a50 --- /dev/null +++ b/changelog.d/1106-uk-property-components-stage.added.md @@ -0,0 +1,11 @@ +A person-grain `property_components` stage joins the UK spine after `regional_property_uprating` (microcosm#1106). It fills the two landlord inputs policyengine-uk 2.123.0 reads beside `property_income` (PolicyEngine/policyengine-uk#2172): `property_rental_income`, the receipts before expenses, on every landlord, and `property_finance_costs` on the FRS concept. + +Finance costs on the FRS concept. FRS landlords report ROYYR1 after show card K6, which nets mortgage payments and loan interest, so their profit sits below the SPI concept. The stage draws their restricted finance costs from the SPI 2022-23 tape, prepared and rebased exactly as `hmrc_spi_income_spine` does (profit by `obr.per_capita.gdp`, finance costs by `obr.mortgage_interest`), among the tape's landlords whose profit after finance costs is positive, the analog of an FRS landlord reporting a profit. Whether a landlord has costs follows a person-keyed uniform against the tape's share in their decile of profit after finance costs; how much comes from the regime-gated QRF fitted on the analog landlords with costs, given that profit and age, at a second person-keyed quantile. The drawn costs are added back to `property_income`, so the engine relieves the interest once, as the s. 274A tax reduction; the mortgage capital the card also nets stays netted. The add-back is the recommended ruling of decision 6 and is to be confirmed with Max before merge. The SPI channel keeps the costs the income stage drew. + +Receipts for every landlord. No microdata carries receipts beside profit, so they are constructed from HMRC's Property Rental Income Statistics for 2024-25, vendored from the pinned Chronicle feed as `hmrc_property_rental_income_facts.json` (Tables 1, 2, 6, 8 and 13) with a typed loader (`uk_runtime.hmrc_property_rental`). Landlords on both channels are ranked by profit and walked top band first into Table 13's eleven bands of rental income with the CGT Table 3 walk's rule (whole persons, one seeded systematic offset), each band filled to its share of the individuals-basis landlords (the all-entity counts times Table 1's individuals' share) times the spine's landlord weight. The spine carries fewer landlords than PRIS before calibration (2.21m against 2.85m), so filling the published counts would push every profit rank into a higher band. Within a bounded band receipts are linear in the weight-ranked position, from the upper bound down, never below profit; the open top band takes `max(100,000, k x profit)` with `k >= 1` solved so that receipts per landlord reach the individuals' Table 2 receipts per landlord, or held at 1 with the overshoot recorded where the floor at profit already exceeds them (on the licensed spine the multiplier is 1.166 once the band donors' pools are cut on income leaves; before that fix it sat at the floor). Receipts less profit are the deductible expenses. Sub-letting rent keeps equal receipts and no expenses until Rent a Room is released (PolicyEngine/policyengine-uk#2002). Landlords without profit carry no receipts, a recorded residual. + +PRIS is a diagnostic, not a calibration target. Receipts are a fixed function of profit rank, so every PRIS count or receipts target measured moved weight across the SPI's total-income bands: the SPI property amounts missed the 10% fit band in all four arms, two arms breached the 25% release bound, and `uk_weight_ratio` failed in every one (`experiments/1106-uk-property-income-receipts.md`). PRIS's landlords also include those whose expenses meet or exceed their receipts, whom the spine carries with no profit and no receipts. The stage receipt reports the spine against PRIS instead. + +Gates. `uk_stage_property_components` (stage health, release-blocking) joins the spine gate scope: no receipts below profit, no landlord banded below their own profit, every band above the lowest within its recorded rounding allowance (the weight of the person straddling each of its boundaries) of its share of the spine's landlords, and the top band's multiplier below its cap, with a multiplier at its floor reported. The receipt also records the tape incidence and its realisation, the totals against PRIS, the channel split and the share of landlords whose household holds rental property. + +Surfaces that move in lockstep: the sources manifest and its projection, two schema branches and the operation-kind allow-list, the graph roster, kernel registry and spine tool, the H2 fixture (40 stages; synthetic PRIS facts sized to the fixture frame) and the coverage manifest, the vendoring register and the country package, the export allow-list, `gates.json` and the gate-battery digests. diff --git a/docs/concept-coverage/policyengine-uk.md b/docs/concept-coverage/policyengine-uk.md index d8444ef67a..b5ff0a14e9 100644 --- a/docs/concept-coverage/policyengine-uk.md +++ b/docs/concept-coverage/policyengine-uk.md @@ -1,11 +1,11 @@ # Concept coverage: policyengine-uk -Engine version `2.122.2`; concept schema `5a55669d0447`. Generated by `tools/refresh_concept_coverage.py`; do not edit by hand. +Engine version `2.123.0`; concept schema `5a55669d0447`. Generated by `tools/refresh_concept_coverage.py`; do not edit by hand. -- Engine inputs: 285 +- Engine inputs: 288 - Fed by a concept: 40 - Structural: 11 -- Uncovered: 234 +- Uncovered: 237 - Mapped but missing from the engine: 0 ## Inputs each concept feeds @@ -58,6 +58,6 @@ Engine version `2.122.2`; concept schema `5a55669d0447`. Generated by `tools/ref `accommodation_type`, `alcohol_and_tobacco_consumption`, `beer_draught_share`, `beer_litres`, `brma`, `bus_fare_spending_reported`, `bus_subsidy_spending`, `cash_isa`, `cider_draught_share`, `cider_litres`, `cigarettes_per_week`, `cigars_grams_per_week`, `clothing_and_footwear_consumption`, `communication_consumption`, `consumer_debt`, `corporate_wealth`, `council_tax_band`, `cumulative_non_residential_rent`, `cumulative_residential_rent`, `dfe_education_spending`, `diesel_spending`, `domestic_energy_consumption`, `domestic_rates`, `education_consumption`, `electricity_consumption`, `external_child_payments`, `food_and_non_alcoholic_beverages_consumption`, `full_rate_vat_expenditure_rate`, `gas_consumption`, `gross_financial_wealth`, `hand_rolling_tobacco_grams_per_week`, `health_consumption`, `heated_tobacco_grams_per_week`, `household_furnishings_consumption`, `household_owns_tv`, `housing_service_charges`, `housing_water_and_electricity_consumption`, `in_original_frs`, `in_rural_fuel_duty_relief_area`, `is_shared_accommodation`, `local_authority`, `lpg_kg`, `main_residence_value`, `main_residential_property_purchased_is_first_home`, `miscellaneous_consumption`, `mortgage_debt`, `natural_gas_kg`, `net_financial_wealth`, `non_residential_property_value`, `non_residential_rent`, `num_bedrooms`, `num_vehicles`, `other_fermented_draught_share`, `other_fermented_litres`, `other_residential_property_value`, `other_tobacco_grams_per_week`, `owned_land`, `petrol_spending`, `private_pension_wealth`, `property_purchased`, `rail_usage`, `recreation_consumption`, `region`, `restaurants_and_hotels_consumption`, `savings`, `sparkling_cider_draught_share`, `sparkling_cider_litres`, `spi_imputed`, `spirits_draught_share`, `spirits_litres`, `stocks_and_shares_isa`, `structural_insurance_payments`, `transport_consumption`, `uc_migrated`, `water_and_sewerage_charges`, `wine_draught_share`, `wine_litres`, `would_evade_tv_licence_fee` -### person (144) +### person (147) -`a_and_e_visits`, `aa_category`, `access_fund`, `admitted_patient_visits`, `adult_dependants_grant_has_other_adult_dependant`, `adult_dependants_grant_other_adult_income`, `adult_dependants_grant_receives_postgraduate_loan`, `adult_ema`, `afcs_reported`, `age_started_or_accepted_current_education_or_training`, `armed_forces_independence_payment`, `attends_private_school_random_draw`, `base_net_income`, `blind_persons_allowance`, `bsp_reported`, `bursary_fund_16_to_19_in_care_or_care_leaver`, `bursary_fund_16_to_19_participation_costs`, `bursary_fund_16_to_19_self_supporting`, `bus_in_london_trips`, `bus_pass_eligible`, `capital_allowances`, `capital_gains_badr`, `capital_gains_carried_interest`, `capital_gains_residential_property`, `car_co2_emissions`, `car_engine_size`, `car_first_registration_date`, `car_fuel_type`, `car_is_ved_exempt`, `car_list_price`, `care_hours`, `carers_allowance_reported`, `charitable_investment_gifts`, `child_benefit_reported`, `child_ema`, `child_tax_credit_reported`, `childcare_expenses`, `childcare_grant_child_has_special_educational_needs`, `childcare_grant_provider_is_nanny`, `childcare_grant_receives_nhs_childcare_support`, `childcare_grant_receives_postgraduate_loan`, `council_tax_benefit_reported`, `covenanted_payments`, `deficiency_relief`, `disabled_students_allowance_eligible_expenses`, `disabled_students_allowance_receives_equivalent_support`, `dla_m_category`, `dla_sc_category`, `education_grants`, `employee_pension_contributions_reported`, `employer_pension_contributions`, `employment_expenses`, `employment_sector`, `employment_status`, `esa_contrib_reported`, `esa_income_reported`, `free_school_fruit_veg`, `free_school_meals`, `free_school_milk`, `gift_aid`, `healthy_start_vouchers`, `housing_benefit_reported`, `iidb_reported`, `in_FE`, `incapacity_benefit_reported`, `income_support_reported`, `is_about_to_start_paid_work`, `is_apprentice`, `is_before_universal_credit_qualifying_young_person_terminal_date`, `is_blind`, `is_in_approved_training`, `is_looked_after_by_local_authority`, `is_newly_self_employed`, `jsa_contrib_reported`, `jsa_income_reported`, `lifetime_isa_balance`, `lump_sum_income`, `maintenance_expenses`, `maintenance_income`, `married_couples_allowance`, `maternity_allowance_reported`, `max_free_entitlement_hours_used`, `miscellaneous_income`, `nhs_a_and_e_spending`, `nhs_admitted_patient_spending`, `nhs_outpatient_spending`, `ni_class_3`, `other_deductions`, `other_investment_income`, `other_local_bus_trips`, `other_tax_credits`, `outpatient_visits`, `pension_contributions_via_salary_sacrifice`, `pension_credit_reported`, `pension_income`, `person_benunit_role`, `person_household_role`, `personal_pension_contributions`, `pip_dl_category`, `pip_m_category`, `private_transfer_income`, `receives_benefits_in_own_right`, `receives_limited_capability_for_work_credits`, `rent_paid_as_boarder`, `rent_paid_as_lodger`, `role`, `scottish_funded_early_learning_childcare_start_date_reached`, `sda_reported`, `self_employment_gross_receipts`, `sic_industry_division`, `ssmg_reported`, `statutory_maternity_pay`, `statutory_paternity_pay`, `statutory_sick_pay`, `student_loan_balance`, `student_loan_plan`, `student_loans`, `sublet_income`, `tax_free_childcare_on_adoption_leave`, `tax_free_childcare_on_carers_leave`, `tax_free_childcare_on_qualifying_leave`, `tax_free_childcare_on_shared_parental_leave`, `tax_free_childcare_self_employment_start_up_period`, `tax_free_childcare_spend_routed_share`, `tax_free_childcare_uses_qualifying_provider`, `tax_reported`, `trading_loss`, `travel_grant_abroad_placement`, `travel_grant_clinical_placement`, `travel_grant_eligible_expenses`, `travel_grant_receives_means_tested_nhs_bursary`, `uc_has_limited_capability_for_work`, `uc_has_offer_of_paid_work_starting_by_end_of_next_assessment_period`, `uc_is_adopter_in_first_year`, `uc_is_foster_parent_or_new_friend_or_family_carer`, `uc_is_in_pregnancy_or_post_confinement_period`, `uc_is_in_startup_period`, `uc_is_ineligible_partner`, `uc_is_responsible_foster_parent_of_child_under_one`, `uc_is_student_with_no_work_related_requirements`, `uc_is_temporarily_absent_from_claimant_household`, `universal_credit_reported`, `winter_fuel_allowance_reported`, `working_tax_credit_reported` +`a_and_e_visits`, `aa_category`, `access_fund`, `admitted_patient_visits`, `adult_dependants_grant_has_other_adult_dependant`, `adult_dependants_grant_other_adult_income`, `adult_dependants_grant_receives_postgraduate_loan`, `adult_ema`, `afcs_reported`, `age_started_or_accepted_current_education_or_training`, `armed_forces_independence_payment`, `attends_private_school_random_draw`, `base_net_income`, `blind_persons_allowance`, `bsp_reported`, `bursary_fund_16_to_19_in_care_or_care_leaver`, `bursary_fund_16_to_19_participation_costs`, `bursary_fund_16_to_19_self_supporting`, `bus_in_london_trips`, `bus_pass_eligible`, `capital_allowances`, `capital_gains_badr`, `capital_gains_carried_interest`, `capital_gains_residential_property`, `car_co2_emissions`, `car_engine_size`, `car_first_registration_date`, `car_fuel_type`, `car_is_ved_exempt`, `car_list_price`, `care_hours`, `carers_allowance_reported`, `charitable_investment_gifts`, `child_benefit_reported`, `child_ema`, `child_tax_credit_reported`, `childcare_expenses`, `childcare_grant_child_has_special_educational_needs`, `childcare_grant_provider_is_nanny`, `childcare_grant_receives_nhs_childcare_support`, `childcare_grant_receives_postgraduate_loan`, `council_tax_benefit_reported`, `covenanted_payments`, `deficiency_relief`, `disabled_students_allowance_eligible_expenses`, `disabled_students_allowance_receives_equivalent_support`, `dla_m_category`, `dla_sc_category`, `education_grants`, `employee_pension_contributions_reported`, `employer_pension_contributions`, `employment_expenses`, `employment_sector`, `employment_status`, `esa_contrib_reported`, `esa_income_reported`, `free_school_fruit_veg`, `free_school_meals`, `free_school_milk`, `gift_aid`, `healthy_start_vouchers`, `housing_benefit_reported`, `iidb_reported`, `in_FE`, `incapacity_benefit_reported`, `income_support_reported`, `is_about_to_start_paid_work`, `is_apprentice`, `is_before_universal_credit_qualifying_young_person_terminal_date`, `is_blind`, `is_in_approved_training`, `is_looked_after_by_local_authority`, `is_newly_self_employed`, `jsa_contrib_reported`, `jsa_income_reported`, `lifetime_isa_balance`, `lump_sum_income`, `maintenance_expenses`, `maintenance_income`, `married_couples_allowance`, `maternity_allowance_reported`, `max_free_entitlement_hours_used`, `miscellaneous_income`, `nhs_a_and_e_spending`, `nhs_admitted_patient_spending`, `nhs_outpatient_spending`, `ni_class_3`, `other_deductions`, `other_investment_income`, `other_local_bus_trips`, `other_tax_credits`, `outpatient_visits`, `pension_contributions_via_salary_sacrifice`, `pension_credit_reported`, `pension_income`, `person_benunit_role`, `person_household_role`, `personal_pension_contributions`, `pip_dl_category`, `pip_m_category`, `private_transfer_income`, `property_finance_costs`, `property_finance_costs_brought_forward`, `property_rental_income`, `receives_benefits_in_own_right`, `receives_limited_capability_for_work_credits`, `rent_paid_as_boarder`, `rent_paid_as_lodger`, `role`, `scottish_funded_early_learning_childcare_start_date_reached`, `sda_reported`, `self_employment_gross_receipts`, `sic_industry_division`, `ssmg_reported`, `statutory_maternity_pay`, `statutory_paternity_pay`, `statutory_sick_pay`, `student_loan_balance`, `student_loan_plan`, `student_loans`, `sublet_income`, `tax_free_childcare_on_adoption_leave`, `tax_free_childcare_on_carers_leave`, `tax_free_childcare_on_qualifying_leave`, `tax_free_childcare_on_shared_parental_leave`, `tax_free_childcare_self_employment_start_up_period`, `tax_free_childcare_spend_routed_share`, `tax_free_childcare_uses_qualifying_provider`, `tax_reported`, `trading_loss`, `travel_grant_abroad_placement`, `travel_grant_clinical_placement`, `travel_grant_eligible_expenses`, `travel_grant_receives_means_tested_nhs_bursary`, `uc_has_limited_capability_for_work`, `uc_has_offer_of_paid_work_starting_by_end_of_next_assessment_period`, `uc_is_adopter_in_first_year`, `uc_is_foster_parent_or_new_friend_or_family_carer`, `uc_is_in_pregnancy_or_post_confinement_period`, `uc_is_in_startup_period`, `uc_is_ineligible_partner`, `uc_is_responsible_foster_parent_of_child_under_one`, `uc_is_student_with_no_work_related_requirements`, `uc_is_temporarily_absent_from_claimant_household`, `universal_credit_reported`, `winter_fuel_allowance_reported`, `working_tax_credit_reported` diff --git a/docs/evidence/uk-consumption-taxes-1113/README.md b/docs/evidence/uk-consumption-taxes-1113/README.md index ad7bfd0ca4..5ba6e3e157 100644 --- a/docs/evidence/uk-consumption-taxes-1113/README.md +++ b/docs/evidence/uk-consumption-taxes-1113/README.md @@ -12,7 +12,7 @@ Evidence for [PolicyEngine/microcosm#1167](https://github.com/PolicyEngine/micro - `stage_dev_run.base-7f235941c.json`: the base tree's stage on the same spine; - `stage_dev_run.review-r2.json`: the head after the second review round. -The base run is what isolates this PR's effect. The spine already holds the stages after `lcfs_consumption`, so a re-run redraws most households, and a comparison with the spine's stored columns mixes that drift with the change. Compare a run with the base run, not with `before_head_r3`. +The base run is what isolates this PR's effect. The spine already holds the stages after `lcfs_consumption`, so a re-run redraws most households, and a comparison with the spine's stored columns mixes that drift with the change. Compare a run with the base run, not with `before_head_r3`. The same holds for `division_capture`: the calendar bridge moves every division by the same −0.62%, and the per-division movement between runs (−1.4% to +2.2%) is that redraw noise around it, not a division-specific effect. ## What is not here diff --git a/docs/evidence/uk-consumption-taxes-1113/outputs/stage_dev_run.base-7f235941c.json b/docs/evidence/uk-consumption-taxes-1113/outputs/stage_dev_run.base-7f235941c.json index 1b7888445d..4e4b84c66a 100644 --- a/docs/evidence/uk-consumption-taxes-1113/outputs/stage_dev_run.base-7f235941c.json +++ b/docs/evidence/uk-consumption-taxes-1113/outputs/stage_dev_run.base-7f235941c.json @@ -371,6 +371,6 @@ "road_fuel_level": null }, "seconds": 193.4, - "spine": "/Users/mariajuaristi/Desktop/PolicyEngine/data/ukds/acceptance/1095-uk-data-ports-2/arm-head-r3/spine/spine-head-r3.h5", + "spine": "spine-head-r3.h5", "support_clip_remainders": {} } diff --git a/docs/evidence/uk-consumption-taxes-1113/outputs/stage_dev_run.group-b.json b/docs/evidence/uk-consumption-taxes-1113/outputs/stage_dev_run.group-b.json index eccf96674c..b99476aa1a 100644 --- a/docs/evidence/uk-consumption-taxes-1113/outputs/stage_dev_run.group-b.json +++ b/docs/evidence/uk-consumption-taxes-1113/outputs/stage_dev_run.group-b.json @@ -440,6 +440,6 @@ } }, "seconds": 65.9, - "spine": "/Users/mariajuaristi/Desktop/PolicyEngine/data/ukds/acceptance/1095-uk-data-ports-2/arm-head-r3/spine/spine-head-r3.h5", + "spine": "spine-head-r3.h5", "support_clip_remainders": {} } diff --git a/docs/evidence/uk-consumption-taxes-1113/outputs/stage_dev_run.json b/docs/evidence/uk-consumption-taxes-1113/outputs/stage_dev_run.json index 8e71fb21f8..2c8b184e8e 100644 --- a/docs/evidence/uk-consumption-taxes-1113/outputs/stage_dev_run.json +++ b/docs/evidence/uk-consumption-taxes-1113/outputs/stage_dev_run.json @@ -294,6 +294,6 @@ } }, "seconds": 48.6, - "spine": "/Users/mariajuaristi/Desktop/PolicyEngine/data/ukds/acceptance/1095-uk-data-ports-2/arm-head-r3/spine/spine-head-r3.h5", + "spine": "spine-head-r3.h5", "support_clip_remainders": {} } diff --git a/docs/evidence/uk-consumption-taxes-1113/outputs/stage_dev_run.review-r2.json b/docs/evidence/uk-consumption-taxes-1113/outputs/stage_dev_run.review-r2.json index 8d43310920..e3bcc59f60 100644 --- a/docs/evidence/uk-consumption-taxes-1113/outputs/stage_dev_run.review-r2.json +++ b/docs/evidence/uk-consumption-taxes-1113/outputs/stage_dev_run.review-r2.json @@ -676,6 +676,6 @@ } }, "seconds": 98.4, - "spine": "/Users/mariajuaristi/Desktop/PolicyEngine/data/ukds/acceptance/1095-uk-data-ports-2/arm-head-r3/spine/spine-head-r3.h5", + "spine": "spine-head-r3.h5", "support_clip_remainders": {} } diff --git a/docs/evidence/uk-consumption-taxes-1113/scripts/m2_m3_desk.py b/docs/evidence/uk-consumption-taxes-1113/scripts/m2_m3_desk.py index 77998744fc..bd2c7f7373 100644 --- a/docs/evidence/uk-consumption-taxes-1113/scripts/m2_m3_desk.py +++ b/docs/evidence/uk-consumption-taxes-1113/scripts/m2_m3_desk.py @@ -8,13 +8,14 @@ from __future__ import annotations import json +import os import re from pathlib import Path import numpy as np import pandas as pd -PE = Path("/Users/mariajuaristi/Desktop/PolicyEngine") +PE = Path(os.environ.get("PE", Path.home() / "Desktop" / "PolicyEngine")) OUT = Path(__file__).resolve().parent FEED = ( PE diff --git a/docs/evidence/uk-consumption-taxes-1113/scripts/m4_resolve.py b/docs/evidence/uk-consumption-taxes-1113/scripts/m4_resolve.py index 6ee8788bc2..3ed30a086b 100644 --- a/docs/evidence/uk-consumption-taxes-1113/scripts/m4_resolve.py +++ b/docs/evidence/uk-consumption-taxes-1113/scripts/m4_resolve.py @@ -19,13 +19,14 @@ import argparse import json +import os import time from pathlib import Path import numpy as np import pandas as pd -PE = Path("/Users/mariajuaristi/Desktop/PolicyEngine") +PE = Path(os.environ.get("PE", Path.home() / "Desktop" / "PolicyEngine")) RUN = PE / "runs/uk-national-main-c5a1cba8" SPINE = ( PE diff --git a/docs/evidence/uk-consumption-taxes-1113/scripts/run_m4.sh b/docs/evidence/uk-consumption-taxes-1113/scripts/run_m4.sh index 17f184df32..3f71716868 100755 --- a/docs/evidence/uk-consumption-taxes-1113/scripts/run_m4.sh +++ b/docs/evidence/uk-consumption-taxes-1113/scripts/run_m4.sh @@ -1,8 +1,9 @@ #!/bin/bash # M4 runner: wait for a quieter machine, then two solves (base, drop4) and the report, all at low priority. set -uo pipefail -D=/Users/mariajuaristi/Desktop/PolicyEngine/data/ukds/acceptance/vat-fuel-energy-measure-2026-10-08 -TREE=/Users/mariajuaristi/Desktop/PolicyEngine/repos/populace-national-main +PE="${PE:-$HOME/Desktop/PolicyEngine}" +D=$PE/data/ukds/acceptance/vat-fuel-energy-measure-2026-10-08 +TREE=$PE/repos/populace-national-main LOG=$D/run_m4.log echo "== M4 start $(date -u +%FT%TZ)" > "$LOG" deadline=$(( $(date +%s) + 3600 )) diff --git a/docs/evidence/uk-consumption-taxes-1113/scripts/run_stage_dev_at.sh b/docs/evidence/uk-consumption-taxes-1113/scripts/run_stage_dev_at.sh index 9058ed1731..efd286ff10 100755 --- a/docs/evidence/uk-consumption-taxes-1113/scripts/run_stage_dev_at.sh +++ b/docs/evidence/uk-consumption-taxes-1113/scripts/run_stage_dev_at.sh @@ -5,11 +5,12 @@ # (PYTHONPATH puts the tree's packages first), behind a quiet-machine wait of at # most 15 minutes, at low priority. Writes stage_dev_run.