Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
43c6299
Bind the SPI net property-income amounts unscaled (#1106)
juaristi22 Oct 7, 2026
2cf984e
Leave property_wealth to the engine at both engine boundaries (#1106)
juaristi22 Oct 8, 2026
0253039
Add the #1106 receipts for the SPI amounts and the property-wealth drop
juaristi22 Oct 7, 2026
e0aef53
Lock policyengine-uk 2.123.0 for the landlord inputs (#1106)
juaristi22 Oct 8, 2026
908f78e
Draw landlords' restricted finance costs on the SPI channel (#1106)
juaristi22 Oct 7, 2026
df20f9a
Add landlords' receipts and finance costs as a spine stage (#1106)
juaristi22 Oct 8, 2026
f69a21d
Bind HMRC's property rental income statistics on the landlord inputs …
juaristi22 Oct 8, 2026
4587a7b
Fill the receipts bands by PRIS's shares of the spine's landlords (#1…
juaristi22 Oct 8, 2026
4b518d4
Keep PRIS a diagnostic: drop the three PRIS calibration targets (#1106)
juaristi22 Oct 8, 2026
89351e0
Add the receipts for the property-components arms (#1106)
juaristi22 Oct 8, 2026
6d7a453
Add the final head's arm to the #1106 receipts
juaristi22 Oct 8, 2026
238042e
Address the adversarial review on #1145 (#1106)
juaristi22 Oct 11, 2026
c1611b1
Retire the stale West Midlands deferral and sign the landlord registe…
juaristi22 Oct 11, 2026
c18a9fe
Uprate the SPI property amounts by the band index (#1106)
juaristi22 Oct 11, 2026
40a52f0
Add the review-fixed head's arm to the #1106 receipts
juaristi22 Oct 11, 2026
05211be
Address the re-review's minor items on #1145 (#1106)
juaristi22 Oct 11, 2026
33d203a
Address the #1167 re-review's minor items (#1113)
juaristi22 Oct 12, 2026
615fb81
Rebase onto main: re-derive the surfaces against feed 1ee7dfe (#1106)
juaristi22 Oct 12, 2026
63943a7
Record the post-rebase arms c8 and c9 in the receipts note (#1106)
juaristi22 Oct 12, 2026
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
1 change: 1 addition & 0 deletions changelog.d/1106-policyengine-uk-2-123.changed.md
Original file line number Diff line number Diff line change
@@ -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`.
1 change: 1 addition & 0 deletions changelog.d/1106-property-wealth-not-exported.fixed.md
Original file line number Diff line number Diff line change
@@ -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.
1 change: 1 addition & 0 deletions changelog.d/1106-spi-property-finance-costs.added.md
Original file line number Diff line number Diff line change
@@ -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`.
Original file line number Diff line number Diff line change
@@ -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.
11 changes: 11 additions & 0 deletions changelog.d/1106-uk-property-components-stage.added.md
Original file line number Diff line number Diff line change
@@ -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.
Loading
Loading