diff --git a/README.md b/README.md index f25d358cd6..b48e60cbc4 100644 --- a/README.md +++ b/README.md @@ -346,7 +346,11 @@ for what each mode contains and where the build records it. Its `--l2-basis chi_square` and `--mass-parametrization softmax` options (defaults: the historical `record` and `projection`) penalize distance from the design weights; see [penalized calibration toward the design weights](docs/calibration-l2-basis.md) -for the algebra, the evidence and the measured frontier. +for the algebra, the evidence and the measured frontier. The chain needs a +donor release that carries `employer_sponsored_insurance_premiums`: its +staging build transfers the column onto the ACS spine, and finalize grades it +on the calibrated artifact with both ESI premium gates. See +[ACS local releases](docs/us-esi-employer-premiums.md#acs-local-releases). National and ACS local-area builds now use the same typed schema-8 calibration diagnostics writer. The local builder adds its Census population marginals to a diff --git a/changelog.d/us-esi-premiums-acs-local-lane-454.fixed.md b/changelog.d/us-esi-premiums-acs-local-lane-454.fixed.md new file mode 100644 index 0000000000..ecbf9d9125 --- /dev/null +++ b/changelog.d/us-esi-premiums-acs-local-lane-454.fixed.md @@ -0,0 +1 @@ +The US ACS local release lane builds again and carries `employer_sponsored_insurance_premiums` on every row (microcosm #454). Its staging build transfers the column onto the ACS spine in a lane-local pass that fits on the donor release's ASEC observations, whose wages are measured, and then runs the stacked pool's anchor kernel on the pooled frame: an ACS person without wages carries no premium, and the rest are scaled so both spines carry the same weighted premium per unit of household mass. The lane-wide weighted column equals the donor rows' total divided by their share of household mass, which is the donor release's own column. The declared ACS transfer plan and the stacked pool's plan are unchanged. Both ESI premium gates run on the staging frame and, in finalize, on the calibrated artifact; the gate report records them as `esi_premiums_signal` and `esi_premiums_anchor`, bound to the artifact bytes, and its `input_coverage` entry passes only if both do. Package refuses a report without a passing verdict for the bytes it packages. A donor built before the `meps_esi_premiums` stage is refused; `--allow-esi-premium-gaps` records the red verdicts for a diagnostic build. diff --git a/changelog.d/us-esi-premiums-pool-operator-454.added.md b/changelog.d/us-esi-premiums-pool-operator-454.added.md new file mode 100644 index 0000000000..81cad0bb6f --- /dev/null +++ b/changelog.d/us-esi-premiums-pool-operator-454.added.md @@ -0,0 +1 @@ +The US stacked pool produces `employer_sponsored_insurance_premiums` (microcosm #454). `with_us_esi_premium_inputs` is now a pre-clone pool operator: it runs on the CPS-source rows with its factor set against the anchor times those rows' share of the pool's household mass, so each ASEC person carries the premium a single-source build assigns. The early gap-fill transfers the column to ACS rows as family `source_operator_esi_premiums`, and a new derive-stage operator, `with_us_esi_premium_pool_anchor`, clears a transferred premium where the person's source record has no wages and scales the transferred rows to the same weighted total per unit of household mass. The pool-wide column then equals the single-source column. Both ESI gates grade a pooled frame: the MEPS-IC cell proofs cover the rows that carry the raw coverage columns, and the anchor-universe total adds the transferred column at those rows' employed share. A pool needs an ASEC raw-stage artifact written after the coverage columns were restored. The ACS local release lane is not covered. diff --git a/docs/agent-guide.md b/docs/agent-guide.md index 0860d1e94a..0fe31e8b89 100644 --- a/docs/agent-guide.md +++ b/docs/agent-guide.md @@ -267,6 +267,17 @@ register entry with its reason, bound to its producer in name. A new US lane that writes a release H5 must run the check where it records `build.built_with_model_package`. +The ACS local-area chain produces `employer_sponsored_insurance_premiums` on +its ACS spine itself (microcosm#454): the staging build +(`tools/build_us_acs_multispine_base.py`) transfers it from the donor +release's ASEC observations and holds it to the donor rows' premium per unit +of household mass, and both ESI premium gates run on the staging frame and +again in finalize on the calibrated artifact. A donor built before the +`meps_esi_premiums` stage is refused. `--allow-esi-premium-gaps`, on the +staging tool and the release tool, is for diagnostic builds only: it records a +red verdict in the staging summary and the gate report instead of failing. See +[the ESI premium note](us-esi-employer-premiums.md#acs-local-releases). + A US release or release-gate preflight that receives a multispine pool through `--base-h5` must authenticate its sibling terminal manifest. A current stacked pool whose terminal battery is red remains fail-closed unless the operator diff --git a/docs/evidence/spec-engine/us-f0-coverage.json b/docs/evidence/spec-engine/us-f0-coverage.json index ac9a0a167c..f04ff9854f 100644 --- a/docs/evidence/spec-engine/us-f0-coverage.json +++ b/docs/evidence/spec-engine/us-f0-coverage.json @@ -6,7 +6,7 @@ "country": "us", "documentation_sha256": "f002c79cc4a9296d34573d9c259eea0058f06e999630752ae3396395333889eb", "field_usage": { - "authored_normative_field_count": 32436, + "authored_normative_field_count": 32477, "claim_count": 49, "claims": [ { @@ -33,8 +33,8 @@ ], "mode": "legacy_behavior", "pointer_class": "all", - "pointer_count": 797, - "pointer_sha256": "55c2c0cd2d652216ed35f2d2667f52fe00229eb4336507bef9758397a1e24a17", + "pointer_count": 802, + "pointer_sha256": "eaf3cc45daebdba940e20e7bf2c995e7fc0bd5219935a963e7fca60c87111409", "rationale": null, "relative_sink_prefix": "/battery_contract", "source_prefix": "/authored/spec~1battery.yaml", @@ -136,8 +136,8 @@ "legacy_sinks": [], "mode": "compiler_semantic", "pointer_class": "all", - "pointer_count": 1673, - "pointer_sha256": "a983c0d68e980a31bd1ad41e7ef3c0cb3db9a7ee4d73454ae46f81eb6d1bb427", + "pointer_count": 1683, + "pointer_sha256": "85c679eb6be3331c9eabe066688790b328286b04921dbe56740fc6c1c2b68d01", "rationale": null, "relative_sink_prefix": null, "source_prefix": "/authored/spec~1catalogs.yaml/columns", @@ -334,8 +334,8 @@ ], "mode": "legacy_behavior", "pointer_class": "family_execution", - "pointer_count": 1769, - "pointer_sha256": "cd395f41c1cc425c734dc344607de043f3506b4ec2e727a29130fc4304f351e3", + "pointer_count": 1793, + "pointer_sha256": "8b68e86393793c1830ba8ab57d274b167d758873ae54e94342d725103ed5689d", "rationale": null, "relative_sink_prefix": null, "source_prefix": "/authored/spec~1imputation.yaml/families", @@ -349,7 +349,7 @@ "mode": "front_end_validation", "pointer_class": "family_concept_validation", "pointer_count": 52, - "pointer_sha256": "bdf40812604e7cd35d68093fe14b7cd1371cb8ab8658fd6002b254610b062781", + "pointer_sha256": "58b1a3460b01856ac57133224c16192ee26ee9b42a82be526f33834e86f0de2a", "rationale": null, "relative_sink_prefix": null, "source_prefix": "/authored/spec~1imputation.yaml/families", @@ -530,8 +530,8 @@ ], "mode": "legacy_behavior", "pointer_class": "all", - "pointer_count": 88, - "pointer_sha256": "ae011455154bae0df3913ca9a056058a909d913439b292cb46c11f63c7d0d9a3", + "pointer_count": 90, + "pointer_sha256": "3407a3521ac3720d2b4a90bfe31b6856ba8a71173609a40f79115e2acae32557", "rationale": null, "relative_sink_prefix": null, "source_prefix": "/authored/spec~1spine.yaml/pipeline_contract", @@ -722,8 +722,8 @@ ], "mode": "legacy_behavior", "pointer_class": "all", - "pointer_count": 8614, - "pointer_sha256": "66eec1216f404e43f7605fba0016d1cd666e71ebe3e35278d14a944d8b48b619", + "pointer_count": 8743, + "pointer_sha256": "c4a7ba2589f2ed17cab5697197fbfa528a736692d23f6932405cdf4fe5d45454", "rationale": null, "relative_sink_prefix": null, "source_prefix": "/resolved/generated_authorities", @@ -772,21 +772,21 @@ "verifier": "vintages" } ], - "configuration_field_count": 42216, - "consumed_field_count": 42216, + "configuration_field_count": 42386, + "consumed_field_count": 42386, "generation0_effect_counts": { - "legacy_behavior": 38530, - "no_generation0_effect": 3686 + "legacy_behavior": 38690, + "no_generation0_effect": 3696 }, "mode_counts": { - "compiler_semantic": 27717, + "compiler_semantic": 27727, "front_end_validation": 354, "identity_only": 103, - "legacy_behavior": 14042 + "legacy_behavior": 14202 }, "multiple_primary_use_field_count": 0, - "pointer_inventory_sha256": "e8d32da2dbdaa015cb4eb363084c66cf509a93dde76cd473113750120dcaef80", - "resolved_binding_field_count": 9780, + "pointer_inventory_sha256": "6528cd3fccca59895d28cfda9b0f8d4268ffbd8dafdebe0c3e8d76ddd0ade93e", + "resolved_binding_field_count": 9909, "unused_field_count": 0 }, "inventory_coverage": { @@ -798,8 +798,8 @@ "counts": { "adapter_surfaces": 13, "authority_components": 9, - "early_families": 13, - "early_targets": 48, + "early_families": 14, + "early_targets": 49, "itemization_batches": 5, "itemization_targets": 37, "late_groups": 19, @@ -814,7 +814,7 @@ "producer_nodes": 38, "producer_virtual_resources": 75, "release_rungs": 5, - "resolved_references": 334, + "resolved_references": 335, "seed_owner_bindings": 112, "seed_owner_rows": 54, "seed_sites": 53, @@ -828,7 +828,7 @@ "take_up_pipeline_steps": 28, "take_up_programs": 17, "typed_artifacts": 84, - "typed_columns": 176, + "typed_columns": 177, "typed_entities": 8, "typed_scopes": 7 }, @@ -964,15 +964,15 @@ "legacy_adapter.imputation.gap_fill_plan" ], "expected": { - "families": 13, - "sha256": "4aa9f736fd76e83955477ad1667e58f48f264783f05bdc7f0102cd32d61323bd", - "targets": 48 + "families": 14, + "sha256": "69ecea17171ba40d46bc26e35f0cf8c3636f4cb27e51f84572b60e94c3b01370", + "targets": 49 }, "failures": [], "observed": { - "families": 13, - "families_sha256": "4aa9f736fd76e83955477ad1667e58f48f264783f05bdc7f0102cd32d61323bd", - "targets": 48 + "families": 14, + "families_sha256": "69ecea17171ba40d46bc26e35f0cf8c3636f4cb27e51f84572b60e94c3b01370", + "targets": 49 }, "status": "covered" }, @@ -992,7 +992,7 @@ "expected": "complete ordered early family and transfer authority projections", "failures": [], "observed": { - "families_sha256": "4aa9f736fd76e83955477ad1667e58f48f264783f05bdc7f0102cd32d61323bd" + "families_sha256": "69ecea17171ba40d46bc26e35f0cf8c3636f4cb27e51f84572b60e94c3b01370" }, "status": "covered" }, @@ -1010,11 +1010,11 @@ "legacy_adapter.stacked_checkpoint_static_components" ], "expected": { - "sha256": "1c31f9868f7884347cc19cf1ff65da43f950b9114941a715bab168246db414a7" + "sha256": "2c93d98926a267a05b9c339b087d14cca9c0dd7eb19fe5954d140a1b202454aa" }, "failures": [], "observed": { - "sha256": "1c31f9868f7884347cc19cf1ff65da43f950b9114941a715bab168246db414a7" + "sha256": "2c93d98926a267a05b9c339b087d14cca9c0dd7eb19fe5954d140a1b202454aa" }, "status": "covered" }, @@ -1285,7 +1285,7 @@ }, "producer_outputs_exact": { "bundle_home_match_counts": { - "/imputation/families/*/targets": 33, + "/imputation/families/*/targets": 34, "/imputation/producer_graph/nodes/*/outputs": 38 }, "bundle_homes": [ @@ -1840,11 +1840,11 @@ "legacy_adapter.stacked_checkpoint_static_components" ], "expected": { - "sha256": "9d4a9672a0f03039b1fe874b9fe21ed575be0d29f14afc396d03cdf5c809bdd2" + "sha256": "5d0c9e0c8626e7d5e8ab3f65f9a6b4ce0a15d64aceac4da02ca67b2b879c623c" }, "failures": [], "observed": { - "sha256": "9d4a9672a0f03039b1fe874b9fe21ed575be0d29f14afc396d03cdf5c809bdd2" + "sha256": "5d0c9e0c8626e7d5e8ab3f65f9a6b4ce0a15d64aceac4da02ca67b2b879c623c" }, "status": "covered" }, @@ -1887,7 +1887,7 @@ "alpha", "zeta" ], - "sha256": "e2a40490a6b705bab15bf2e7dff8eea4d7841ad70d3b7858874778d4e4829021" + "sha256": "03987d2ccf871324910457f699b750773cc60044591180ec269f7fb89ae55b25" }, "failures": [], "observed": { @@ -1911,7 +1911,7 @@ "alpha", "zeta" ], - "sha256": "e2a40490a6b705bab15bf2e7dff8eea4d7841ad70d3b7858874778d4e4829021" + "sha256": "03987d2ccf871324910457f699b750773cc60044591180ec269f7fb89ae55b25" }, "status": "covered" }, @@ -1975,7 +1975,7 @@ "take_up_contract", "us_qbi_reconciliation_contract" ], - "sha256": "fa02861d576da88cc771651aa309fb87bd8ac9427157b4175bced510f20d6d4d" + "sha256": "949c6d450e78f08cb92765b487e6e5c2269481e4ef21a0949005fa41eaa83e8d" }, "status": "covered" }, @@ -2599,7 +2599,7 @@ "country": "us", "schema_id": "country_spec", "schema_version": 1, - "spec_sha256": "a1e98deaa1f5a451c7d0e1f380a7bf50a82b0cbc94753b885b7cf9a11e7d0005" + "spec_sha256": "e4b8c7ec593721baede44aa2c43271d49d26a509f5a43d94ad10c9f02fb0f874" } }, "report_schema_version": 3, @@ -2609,7 +2609,7 @@ "country": "us", "schema_id": "country_spec", "schema_version": 1, - "spec_sha256": "a1e98deaa1f5a451c7d0e1f380a7bf50a82b0cbc94753b885b7cf9a11e7d0005" + "spec_sha256": "e4b8c7ec593721baede44aa2c43271d49d26a509f5a43d94ad10c9f02fb0f874" }, "status": "pass" } diff --git a/docs/us-esi-employer-premiums.md b/docs/us-esi-employer-premiums.md index 886d34ac05..20d5171208 100644 --- a/docs/us-esi-employer-premiums.md +++ b/docs/us-esi-employer-premiums.md @@ -284,12 +284,310 @@ class, and 0.1M have no labor-force status (0). Both the signal gate and the anchor gate pass on each pool, before and after the PUF-support clone, and the clone conserves both totals. +## Stacked pools + +The stacked pool (`tools/build_us_multispine_pool.py`) assembles ASEC and ACS +households into one frame. Assembly gives each source half of ASEC's household +mass (`DEFAULT_STACKED_HOUSEHOLD_MASS_SHARES`), so the frame holds the +population once and its ASEC rows carry half of it. Only those rows have the +raw coverage columns. + +### The ASEC rows take their mass share of the anchor + +A pool source operator runs on the rows with raw CPS evidence (`PERIDNUM`), at +pool weights. Left as it was, the stage would hold half the population's +policyholders to the whole anchor and double every premium. + +The pool passes the stage `anchor_share`: the household mass of the rows it +runs on over the pool's household mass, read from the live frame +(`us_esi_premiums_household_mass_share`). The factor becomes +`anchor x share / sum(w x raw)` over those rows' policyholders. Assembly +multiplies every ASEC household weight by the same number, so this is the +single-source factor: each ASEC person carries the dollars the base build +gives them. + +The operator runs before the PUF clone, like the other measured ASEC mappings. +The stage assigns one premium per source person and the clone copies it. + +### ACS rows + +ACS has no policyholder flag, payment status, coverage tier or firm size, so +the stage cannot run there. The column enters the pool's QRF transfer as +family `source_operator_esi_premiums`. Because the operator is pre-clone, the +fill is the early gap-fill: the donors are ASEC rows before the PUF clone, so +the model sees the measured CPS wage on the donor side and the measured ACS +wage (`WAGP`) on the recipient side. A post-clone operator would have filled +from PUF-detail clones, whose wages are PUF-imputed. + +The predictors are the transfer's fixed surface: age, sex and State always; +wages, self-employment income, Social Security, retirement income, investment +income, household head and tenure where both sources observe them. ACS also +reports employer coverage (`HINS1`), class of worker (`COW`) and employment +status (`ESR`). The pool's ACS mapping does not carry them, so the fill does +not use them. + +### The transferred rows are held to the ASEC rows' scale + +Nothing in a QRF draw keeps a total. `with_us_esi_premium_pool_anchor` runs in +the pool's derive stage, once every row carries the column. + +**Which rows it touches.** A row is source-derived if every raw coverage column +is present and transferred if all are null; a row with only some is refused. +Nulls alone do not make a row transferred, because an ASEC record that lost +its coverage codes would look the same. The CPS record id (`PERIDNUM`) +decides: a row with the id must carry every coverage column, a row with the +columns must carry the id, and a frame without the id column cannot hold +transferred rows. + +**What it does.** On the transferred rows it: + +1. gives every support clone its source record's draw (support clone 0), so a + person carries one premium whether the pool transferred before or after it + cloned; +2. clears the premium where that source record reports zero wages, because the + column's universe is people employed by an employer; then +3. scales the rest by one factor so those rows carry the same weighted premium + per unit of household mass as the source-derived rows. + +It never rewrites a source-derived row. A transferred person's source record +must report a wage: a missing wage is refused, not read as zero. In the +stacked pool the wage is always a number by then, because the ACS +earnings-universe producer writes an explicit zero below age 15 before the +derive stage. The rule adds no refusal a pool would otherwise survive: the QBI +reconciliation that follows in the same derive stage already refuses a blank +ACS earnings value below age 15, and the one producer that writes those zeros +writes wages and self-employment income together. Transferred rows that hold +no household mass have nothing to be scaled to, and their factor stays at one. + +**What holds.** For every pool +(`tests/engine_free/us/test_us_esi_premiums_pool.py`, property-tested over +pools with zero-weight households and support clones): + +- the pool-wide weighted column equals the source-derived rows' total divided + by their household mass share, which is the single-source column; +- both sides carry the same weighted premium per unit of household mass; +- every support clone of a transferred person carries one premium; +- a transferred person whose source record has zero wages carries nothing, on + every support clone; +- a pool already on that scale is returned unchanged. + +Because both sides carry the same premium per unit of household mass, shifting +household mass from one source to the other leaves the pool total where it +was. + +**The legacy two-spine path** shares the pool's operator registry, so it runs +the stage and the anchor too. It transfers after it clones, which is why the +anchor resets each clone to its source record's draw. + +**Assumption.** The anchor counts every policyholder, and ACS rows have no +policyholder flag to price the non-employed ones from. The pool's +anchor-universe total is the ASEC rows' total plus the transferred column over +the ASEC rows' employed share of the anchor universe. That assumes employed +policyholders carry the same share of employer premiums on the ACS half as on +the ASEC half. + +**No post-transfer calibration.** The pool can match a transferred target's +incidence and quantiles to the ASEC rows (`post_transfer_calibration.py`), and +it binds the calibrated bytes through terminal validation, so a calibrated +target cannot be rescaled afterwards. This column has no calibration spec: the +scale to the ASEC rows' mass has the last word. The pool's by-origin battery +still grades it. + +### Measured on the pinned inputs + +`experiments/us-esi-454/run_pool_fill_on_pinned_inputs.py` runs the part of +the stacked pool that decides this column on the real inputs: the pooled +2023-2025 ASEC, the ACS 2024 1-year PUMS, the pool's assembly on a household +sample, the stage at the live mass share, the early gap-fill's weighted QRF +for this family alone, the anchor operator, the by-origin battery and both +gates. It skips the rest of the pool, and its fill runs without the tenure +predictor a full build has. Target year 2024, sample seed 578. + +| | 1% of households | 5% of households | +|---|---:|---:| +| Person rows, ASEC / ACS | 4,177 / 34,293 | 21,133 / 171,381 | +| ACS rows filled / left null | 34,293 / 0 | 171,381 / 0 | +| People with a positive premium after the fill, ASEC / ACS | 24.6% / 22.9% | 22.6% / 22.0% | +| ACS-over-ASEC incidence, after the fill / after the anchor | 0.933 / 0.930 | 0.975 / 0.969 | +| Conditional quantile distance, after the fill / after the anchor | 0.072 / 0.169 | 0.047 / 0.077 | +| Mean per person with a positive premium after the fill, ASEC / ACS | $11,741 / $11,741 | $12,608 / $12,614 | +| Transferred rows cleared for no wages | 34 ($1.8B) | 255 ($2.9B) | +| Scale factor on the other transferred rows | 1.102 | 1.047 | +| Mean per person with a positive premium after the anchor, ASEC / ACS | $11,741 / $12,935 | $12,608 / $13,208 | +| Pool column total | $947.3B | $924.7B | +| Against the single-source column ($925.7B) | +2.3% | -0.1% | +| By-origin battery, signal gate, anchor gate | pass | pass | + +The battery passes a monetary target whose incidence ratio is between 0.8 and +1.25 and whose conditional quantile distance is at most 0.25. + +The fill reproduces ASEC's premium per holder and gives slightly fewer ACS +people one. ACS rows also carry fewer weighted people than ASEC rows at equal +household mass (160.2M against 162.6M in the 5% sample). The scale factor +makes up both, so ACS holders end about 5% above ASEC holders. The factor +falls as the donor sample grows. A full build has twenty times the donors of +the 5% sample and was not run here. + +The stage holds the sampled ASEC rows' anchor universe to the anchor, so a +sample's column total moves with that sample's employed share of the +universe. That is why the two samples' totals differ from the full pool's. + +Every ACS wage was a number when the anchor ran. In the 5% sample the +earnings-universe producer wrote the explicit zero on 25,511 records below age +15, and none of the other 145,870 was missing a wage. No clone needed +resetting, because the stacked order fills before it clones. + +## ACS local releases + +The ACS local lane (`tools/build_us_acs_multispine_base.py`, then +`tools/build_us_acs_local_release.py`) pools a dense donor release with the +ACS 2024 1-year spine. `with_optional_acs_spine` multiplies every donor +household weight by `1 - acs_share` and gives ACS the rest of the donor's +household mass (half each by default). The donor rows arrive with the column +and the raw coverage columns the release carries. ACS rows have neither. + +### The lane transfers the column in its own pass + +`acs_local_esi_premium_transfer_target_families` is a one-family plan, +`source_operator_esi_premiums`, that only the lane's staging build uses, as it +does for usual hours (#765). The declared ACS plan +(`declared_acs_transfer_target_families`) does not gain the column: + +- The lane's main transfer fits every declared family on the PUF-detail role + (`ACS_DONOR_CHANNEL_AUTO`), the wrong donor for this column (next section). +- Under one of the declared plan's existing families, the column would also + leave the stacked pool's `source_operator_esi_premiums` family: + `pool_transfer_target_families` adds a `source_operator_*` family only for + outputs the declared plan does not own. And it would enter the frozen v11 + authority reconstruction (`stacked_spine._legacy_stacked_authority_receipt`), + which leaves out post-v11 targets by family name; scoring an attested + schema-9 pool refuses an authority that differs from that reconstruction. + Declaring it under its own `source_operator_esi_premiums` family would avoid + both, but not the donor problem. +- The declared plan is also the default registry of the spine-agreement + battery (`spine_agreement`), which would gain the column as a metric. + +Taking the lane's ACS rows from the stacked pool instead would replace the +lane. Its two tools read the legacy spine tags, the legacy support roles and +the staging summary's null register, and its hours repair refuses an assembled +frame. + +### The donor rows are the ASEC observations + +The transfer fits on the donor's ASEC observation role (support clone 0). The +lane's tax-detail families fit on the PUF-detail role, which is the wrong +donor for this column: + +- On the observation role, `employment_income_before_lsr` is the measured CPS + wage, and a person has a premium only if they hold a job with an employer. +- PUF support imputation writes the clone's wages + (`PUF_TAX_DETAIL_DEFAULT_PERSON_OUTPUTS`), while the clone's premium is a + copy of its source person's. On those rows the premium no longer follows the + wage. + +The recipient side is the measured ACS wage (`WAGP`), so both sides of the fit +see a measured wage, as in the stacked pool's early fill. On the test fixture, +where only wages tell the employed from the rest, a fit on ASEC observations +gives no ACS person without wages a premium; a fit on the PUF-detail role +gives one to more than a tenth of them and to fewer workers +(`test_the_puf_detail_role_would_put_premiums_on_people_without_wages`). + +`prepare_acs_local_esi_premium_donor` qualifies the donor before the ACS +sources are fetched. It refuses a donor without the column, the raw coverage +columns, the CPS record id (`PERIDNUM`), wages or legacy support roles, and +one that fails the stage's signal gate. + +### The ACS rows are held to the donor rows' scale + +Nothing in a QRF draw keeps a total. Once the frame is pooled, +`with_acs_local_esi_premium_anchor` runs the stacked pool's kernel, +`with_us_esi_premium_pool_anchor`, on it. The kernel tells the donor rows from +the ACS rows by the CPS record id and the raw coverage columns, which only the +donor rows carry. On the ACS rows it: + +1. clears the premium where the person reports zero wages; then +2. scales the rest by one factor so the ACS rows carry the same weighted + premium per unit of household mass as the donor rows. + +The kernel refuses a transferred row whose wage is missing: a missing wage is +not a zero wage. ACS PUMS leaves `WAGP` blank below age 15, outside its +earnings universe, and the lane keeps that blank in the staging frame, where +the reviewed-null register fills it for the engine pass. The anchor reads +those people's wages as zero under the universe rule `acs_income_universe` +names (`acs_2024_pums_wagp_age_15_plus`), in its own view of the frame, and +writes no zero into the frame. A blank wage at age 15 or older, or one whose +raw `WAGP` is not blank, stays missing and stops the build. + +It never rewrites a donor row. These hold for every lane frame +(`tests/engine_free/us/test_us_acs_local_esi_premiums.py`, property-tested +over the share, both spines' weights and the transfer's draws): + +- the lane-wide weighted column equals the donor rows' total divided by their + share of household mass, `1 - acs_share`. Pooling multiplied every donor + household weight by that share, so the lane-wide column is the donor + release's own column; +- both spines carry the same weighted premium per unit of household mass, so + moving mass from one spine to the other does not move the total; +- an ACS person with zero wages, or below age 15, carries nothing; +- the frame's own wage blanks are never overwritten; +- an anchored frame is returned unchanged. + +The lane runs the kernel and both gates on a narrow view of the frame, for two +reasons: + +- **Source ids.** The kernel finds a support clone's wages and draw by + `person_source_id` across the whole frame. The stacked pool makes that id + unique at assembly. This lane does not: ACS rows keep their ids from before + the pooling remap as source ids, and those can repeat a donor's. Every ACS + row here is its own source record, so the view leaves the lookup's columns + out and the kernel reads each row's own wages. A transferred row that is not + clone 0 is refused. +- **Memory.** The kernel copies every table it is given and each gate copies + the person table. The staging frame holds two full spines, and the view + carries only the columns they read. + +**Assumption.** As in the stacked pool, ACS rows have no policyholder flag, so +the lane's anchor-universe total is the donor rows' total plus the ACS column +over the donor rows' employed share of the anchor universe. + +The donor is a calibrated release. Its anchor-universe total is within the +release tolerance of the anchor, not on it, and the staging frame starts from +the same place. + +### What the lane records + +- **Staging.** Both gates run on the pooled frame before the staging H5 is + written. A red gate fails the build. The verdicts, the donor receipt and the + anchor receipt are in the staging summary under `local_esi_premiums`. +- **Finalize.** Both gates run on the calibrated artifact. The gate report + carries them as `esi_premiums_signal` and `esi_premiums_anchor`, each bound + to the artifact's SHA-256, and either one red fails finalize. The report's + `input_coverage` entry used to be a fixed pass; it now passes only if both + gates do. +- **Package.** A report without both verdicts, with a verdict bound to other + bytes, or with a red verdict is refused before a release directory exists. +- **`fill_reviewed_nulls`** still refuses a frame whose column is null on some + rows. A current staging frame has none; a staging H5 built before this + change does. + +`--allow-esi-premium-gaps`, on both tools, records a red verdict without +failing a diagnostic build from a donor that predates the stage. No row then +carries the column. + +No certified donor release carries the column yet, so the lane's fill has not +been measured on real inputs. The stacked pool's measurement above is the +nearest evidence: the same transfer, from ASEC rows with measured wages onto +the ACS 2024 spine. It differs in its donor rows (the pooled ASEC before the +clone, at design weights, where the lane's are a calibrated release's +observation role) and in its sample. The first staging build records the +lane's own fill in `local_esi_premiums`. + ## Gates | Gate | Where | Checks | |---|---|---| -| `us_esi_premiums_signal_gate` | base build, before and after the clone; release tool, on the base and on the calibrated export | Column present, finite, nonnegative and non-constant; support clones agree; the weighted share of people with a positive value is plausible; no employer premium outside the column universe or where the employer pays none; every premium is one common multiple of its MEPS-IC share. | -| `us_esi_premiums_anchor_gate` | release tool, on the calibrated export, for both the dense and the sparse default | The column absent or zero-mass is red. The anchor-universe total, recomputed at the release's weights, must be within **5%** of NHE Table 24 for the release period. Employed policyholders must carry 80% to 95% of it. | +| `us_esi_premiums_signal_gate` | base build, before and after the clone; release tool, on the base and on the calibrated export; ACS local lane, on the staging frame and the calibrated artifact | Column present, finite, nonnegative and non-constant; support clones agree; the weighted share of people with a positive value is plausible; no employer premium outside the column universe or where the employer pays none; every premium is one common multiple of its MEPS-IC share. On a pooled frame these proofs cover the rows with raw coverage columns; the other rows must carry the premium with a weighted positive share and mean within 0.5 to 2 times those rows'. | +| `us_esi_premiums_anchor_gate` | release tool, on the calibrated export, for both the dense and the sparse default; ACS local lane, on the staging frame and the calibrated artifact | The column absent or zero-mass is red. The anchor-universe total, recomputed at the release's weights, must be within **5%** of NHE Table 24 for the release period. Employed policyholders must carry 80% to 95% of it. On a pooled frame the total adds the transferred column at the source-derived rows' employed share, and the transferred rows' column per unit of household mass must stay within 0.8 to 1.25 times the source-derived rows'. | | `us_release_input_coverage_gate` | release tool | The input is `required` with no reviewed exclusion, so an export that drops or flattens it fails. | | `assert_required_us_release_source_columns` | the L0/refit export (`l0_refit_export.export_us_l0_refit_h5`, run by `tools/export_us_l0_refit_h5.py`), unless `--allow-missing-source-columns` is passed | The column must be present and non-constant. | | reform-coverage smoke | release tool, on the written file | Neutralizing the employer premium must lower `cbo_household_market_income` by at least $500B. | @@ -302,6 +600,20 @@ What the gates need, and what they do not catch: cannot be certified. Published release files carry raw ASEC person fields today (`PEIO1COW`, `PHIP_VAL`, `WSAL_VAL`, `NOW_MCAID`); a release path that dropped the restored columns would turn both gates red. +- **A pooled frame is graded by row kind.** Rows with every raw coverage + column get the full recomputation. Rows with none of them and no CPS record + id are the ones a transfer filled; the gates compare them with the first + kind and cannot check them against MEPS-IC cells. Three things fail both + gates: a row with only some of the columns, a CPS record without them + (lost coverage codes are never graded as a transfer, in a pool or a + single-source frame), and a row without them in a frame that has no CPS + record id column. The signal gate also fails when a transferred person's + support clones disagree. When the transferred rows hold no household mass, + the gates skip the comparison between the two kinds: there is no second + half to compare. The pool tool does not run these gates: its anchor + operator raises if its own invariants fail, its by-origin battery grades + the column's distribution, and the release tool grades the pool as its + base. - **The raw-mean band catches unit errors only.** The signal gate requires the unscaled share per holder to sit between $6k and $20k, which catches a cell table in the wrong units. A cell table that is 20% low passes: the @@ -339,15 +651,20 @@ stage; the failures it waives are still written to that file. ## What this does not do -- **The multispine pool.** `multispine_pool.py` runs its own operator chain on - CPS-source rows that carry only part of the stacked population's weight, so - scaling to a national total there needs its own design. Until then the - coverage and anchor gates are red on that lineage. The raw-stage operator - boundary already refuses a source frame that carries the output. -- **ACS local releases.** An ACS spine pooled beside a donor that carries the - input has it null on its ACS rows. `fill_reviewed_nulls` refuses that frame - instead of default-filling it to zero, so this lineage does not build until - the input is assigned or transferred for every spine. +- **An ACS local release from an older donor.** The lane transfers the column + from its donor release. A donor built before the stage has nothing to + transfer, and the lane refuses it unless a diagnostic build waives the + gates. +- **ACS-native predictors for the fill.** The stacked pool and the ACS local + lane fill ACS rows from age, sex, State and income. Neither uses ACS's own + employer-coverage, class-of-worker or employment-status items. +- **A second verdict on the transferred rows' cells.** The gates recompute the + MEPS-IC assignment on the rows that carry the raw coverage columns. They + compare the transferred rows with those rows and cannot check them against + the cells. +- **A pool built from an older raw stage.** The pool reads the coverage + columns from the ASEC raw-stage artifact. One written before the columns + were restored lacks them, and the pool's ESI operator refuses it by name. - **A calibration target.** The column is the employed part of the NHE fact, so the fact cannot be compiled as a sum target on it. The target-parity manifest keeps the two `cms_nhe` ESI families as `deferred` reviewed diff --git a/docs/us-multispine-operator-ordering.md b/docs/us-multispine-operator-ordering.md index 507b2dd70c..2e8b402185 100644 --- a/docs/us-multispine-operator-ordering.md +++ b/docs/us-multispine-operator-ordering.md @@ -155,6 +155,11 @@ by_origin_battery particular, the pinned ACS rent artifact trains `with_us_housing_inputs`, which materializes `pre_subsidy_rent` on ASEC; native ACS `RNTP`/`GRNTP` remain predictors and are not relabeled as that model input. + The ESI premium stage (`with_us_esi_premium_inputs`, microcosm#454) also + runs here. Its factor is set against the anchor times the share of the + stack's household mass those CPS/ASEC rows carry, so each ASEC person + takes the employer premium a single-source build assigns, and the early + fill then sees measured wages on both origins. Targets produced only by the later PUF pass or late source producers are excluded from this early authority surface. No population operator selects behavior from the source-channel labels. @@ -321,7 +326,22 @@ by_origin_battery rejects a stale source asset/config even when every engine and sampling pin is otherwise identical. 8. Schedule-D preparation, deterministic derivation, seeded inputs, and - batched simulation run on the transferred stack. QBI reconciliation uses + batched simulation run on the transferred stack. Between Schedule-D + completion and QBI reconciliation the derive stage runs + `with_us_esi_premium_pool_anchor`. On rows without the raw ASEC coverage + columns it gives every support clone its clone-0 record's transferred + employer premium, clears it where that record has zero wages, then scales + the rest by one factor so those rows carry the same weighted premium per + unit of household mass as the rows the stage derived. It never rewrites a + source-derived row. It tells the two kinds of row apart by whether the raw + columns are present, corroborated by the CPS record id (`PERIDNUM`), not + by a source channel: a CPS record without the columns is refused. A + transferred record with a missing wage is refused too; the late ACS + earnings-universe producer has already written the explicit zeros below + age 15. The stack-wide total is then the source-derived total divided by + its household mass share. The receipt + (`derive.pool_derivation.esi_premium_pool_anchor`) records that share, the + rows reset and cleared, and the factor. QBI reconciliation uses the same source declaration: it fails on any in-universe self-employment null and preserves the receipted ACS under-15 base self-employment zero in every clone role. That narrow source exception does not suppress independent QBI @@ -357,7 +377,7 @@ by_origin_battery boundaries. 9. A fresh `us_stacked_completeness` gate proves every declared input is observed or has exact source-by-role absence authority. The terminal - `us_by_origin_battery` then evaluates all 134 declared targets (114 person, + `us_by_origin_battery` then evaluates all 135 declared targets (115 person, 12 tax-unit, 8 SPM-unit), plus joint immigration structure, using an immutable live-digested per-column metric registry. Metric choice never dispatches from physical dtype. A digest-bound structural-absence rule may @@ -965,7 +985,7 @@ and valid. Neither receipt authorizes an upstream null. | Boundary | Hard requirement | Stacked 1% supplier | Can an upstream insufficient-support/unmodeled state starve it? | |---|---|---|---| -| Early gap-fill handoff | Donors observe every declared target; every recipient null is filled except the exact ACS group-quarters rent rule. Nonstructural `unmodeled_rows` and residual nulls are forbidden. | The pre-clone ASEC source operators supply 48 early targets to the two ASEC-to-ACS directions. | No accepted starvation remains. A nonstructural residual fails before cloning; literal `insufficient_support` is not an early-transfer outcome. | +| Early gap-fill handoff | Donors observe every declared target; every recipient null is filled except the exact ACS group-quarters rent rule. Nonstructural `unmodeled_rows` and residual nulls are forbidden. | The pre-clone ASEC source operators supply 49 early targets to the two ASEC-to-ACS directions. | No accepted starvation remains. A nonstructural residual fails before cloning; literal `insufficient_support` is not an early-transfer outcome. | | Clone attachment | Input rows are all clone 0; the seeded whole-household selection, lineage, pair weights, fraction, and seed agree exactly. | The completed gap-filled stack and the attachment sampler. | A permitted structural rent null is copied with its authority. Any other early residual has already failed. | | PUF raw predictor sources | Every filing-status, count, and income component is observed in its declared source universe. Raw WAGP/SEMP authority is present and agrees with mapped leaves; a cross-grain source collision is rejected. A null on any eligible member fails before coercion. | Structure supplies status/count; ACS-native or ASEC-carried earnings supply earnings; early transfer supplies interest, dividends, and gains. | No. ACS under-15 WAGP/SEMP blanks are an exact source-universe state, not transfer starvation; all other source nulls fail. | | PUF tax-unit features | Every clone-1 recipient has a finite feature vector. Post-aggregation NaN, `+inf`, and `-inf` are counted by named predictor and rejected before fitting; none is coerced or snapped to zero. | Universe-aware person sums plus tax-unit structural inputs. | No. Eligible member values must be complete; the only special case is an all-child unit whose numeric-zero predictor is explicitly owned and counted by the named universe-zero rule. | @@ -977,12 +997,13 @@ and valid. Neither receipt authorizes an upstream null. | Fit-weight audit | Every primary and post-PUF QRF fit receipts its resolved entity weight kind, and the collected fit records pass the weights audit before a transferred checkpoint can exist. | Calibrated household weights mapped by the frame to each modeled entity. | No. A missing, inconsistent, or manually substituted weight declaration fails before checkpoint emission. | | Tail preservation | Tail manifest, support decisions, attached descendants, IDs, weights, provenance, joint vector, and non-tail QRF cells remain exact after completion, transfer, derive, seed, and simulation. | The schema-v2 tail manifest and support receipt bound during the PUF pass and projected into both terminal gates. | A support receipt cannot authorize mutation. Any byte or identity change in an attached status, any descendant for a skipped status, or any receipt change fails. | | Schedule-D derive | Both transferred parent columns are finite for every person and align to every tax unit. Bounded late-transfer groups do not write this leaf; the whole-pool tax-unit derive is its sole canonical owner. | Completed late transfer plus tail replacements. | No. A residual would fail late transfer first and derive again by name. | +| ESI premium anchor | Every row carries a finite, nonnegative employer premium. Each row is source-derived (every raw ASEC coverage column and a CPS record id present) or transferred (all null), and no household mixes the two. Every transferred person's clone-0 record reports a finite wage. Transferred rows that hold household mass hold premium mass on people whose source record has wages. | The pre-clone ESI operator on ASEC rows, the early gap-fill on ACS rows, the clone, which copies one value per source person, and the late ACS earnings-universe producer, which writes the explicit wage zeros below age 15. | No. A null premium, a row with only some raw columns, a CPS record without them, a missing wage, or a weighted transferred side with nothing to scale raises by name; nothing is defaulted and no source-derived cell is rewritten. | | QBI derive | All QBI detail outputs are finite; self-employment is finite wherever its source applies; every independent archived QBI identity holds. The declared surface includes the base self-employment rewrite and binds pre/post digests. Its exact receipt is recomputed and authenticated at every persisted and publication boundary. | PUF/source detail plus ACS/ASEC native self-employment. Raw under-15 ACS `SEMP` remains structurally blank; mapped `self_employment_income_before_lsr` is a named, receipted universe zero. | No silent starvation. Every mapped ACS under-15 base value is held at its receipted universe zero across clone roles; all derived QBI cells remain in scope, and an in-universe null, forged receipt, or non-kernel output fails. | | Take-up seed | Every administratively seeded variable completes; transfer-owned take-up cannot use a default; only explicitly non-transfer-owned inputs may use receipted engine defaults. | Seed kernels, the complete transfer surface, and declared defaults. | Transfer-owned residuals fail. A declared default is a separate modeled state, not an insufficient-support receipt. | | SSI simulation projection | Every nullable engine input has a declared default on the disposable projection; the engine returns exactly one SSI value per person. | The persistent derived/seeded pool plus separately receipted ephemeral defaults. | A projection default can enable simulation but cannot cure the persistent pool; terminal evaluation returns to the original inputs plus SSI. | | Simulated checkpoint pair and resume | The persistent input-only frame and temporary evaluation frame must share exact assembly provenance; SSI exists only on the evaluation half. The live QBI receipt must authenticate the persistent frame at emission, durable write/load, and resume. | Derived/seeded persistent inputs plus the separately materialized SSI evaluation output. | No. A forged QBI receipt, altered persistent value, invalid SSI binding, or mismatched pair invalidates the simulated checkpoint and falls back only to an independently valid earlier stage. | -| Terminal completeness | All 134 registered targets exist; every positive-weight value is metric-valid; a null needs exact source/role authority, and post-PUF targets forbid absence authority. | The 48 early targets, 70 late targets, derived leaves, take-up inputs, and SSI output. | No. Only the canonical group-quarters rent rule reaches this gate as null; base WAGP/SEMP leaves are outside the 134-target terminal surface. | -| By-origin battery | All 134 clone-0 comparison surfaces are complete and valid before support is measured. | The terminal simulation frame, comparing ASEC and ACS native origins. | No. `insufficient_support` is assigned only after null and validity checks, so it cannot hide an upstream missing value. | +| Terminal completeness | All 135 registered targets exist; every positive-weight value is metric-valid; a null needs exact source/role authority, and post-PUF targets forbid absence authority. | The 49 early targets, 70 late targets, derived leaves, take-up inputs, and SSI output. | No. Only the canonical group-quarters rent rule reaches this gate as null; base WAGP/SEMP leaves are outside the 135-target terminal surface. | +| By-origin battery | All 135 clone-0 comparison surfaces are complete and valid before support is measured. | The terminal simulation frame, comparing ASEC and ACS native origins. | No. `insufficient_support` is assigned only after null and validity checks, so it cannot hide an upstream missing value. | | Manifest construction and canonical publication closure | Legacy and stacked builders reauthenticate QBI live output, canonical stacked authority, terminal-gate receipts, H5/diagnostics run IDs, and artifact digests before readiness can be asserted. | The validated persistent pool, immutable stage receipts, terminal gate snapshot, and atomically staged publication files. | No. Construction rejects forged or wrong-route receipts; publication begins with a non-ready tombstone, and only one fully authenticated run can replace it with a ready manifest. | The audit leaves no generic “receipted but null” path into a hard consumer. @@ -1053,7 +1074,7 @@ cannot bypass late-DAG validation: The gate batches all failures and controls the manifest's simulation-ready status. -On the retiring path, the 23-operator pool contract registry makes clone +On the retiring path, the 25-operator pool contract registry makes clone placement total and executable. Adding an operator without a phase declaration, or calling one in an undeclared phase, fails before the kernel runs: @@ -1067,6 +1088,7 @@ runs: | Medicare take-up | post | Rowwise carry/completion is clone-safe. | | Housing inputs | pre | Rent is drawn once per source household and then cloned unchanged. | | Eligibility inputs | pre | Raw `PH_SEQ`/`A_LINENO` parent pointers would count every cloned child twice, and `PH_SEQ` collides between the ASEC and ACS spines, so the stage runs on the CPS-evidence projection. Its `parent_1_id`/`parent_2_id` outputs name a `person_id`, so the support clone shifts them with the rest of the person id surface ([microcosm#884](https://github.com/PolicyEngine/microcosm/issues/884)). | +| ESI premiums | pre | One premium per source person from MEPS-IC cells, with the factor set at the CPS rows' share of pool household mass; the clone copies it unchanged. | | Pregnancy | post | Stable source-identity hashes share draws across clones. | | WIC | post | Remapped family grouping and source-identity draws are clone-safe. | | Housing assistance | post | The QRF intentionally replaces only the PUF support role. | @@ -1082,6 +1104,7 @@ runs: | Immigration | post | Source-keyed draws preserve equality across clones. | | Education | post | Deterministic rowwise derivation follows PUF tuition imputation. | | Schedule-D completion | post | Transferred tax-unit parents exist only on the physically cloned pool. | +| ESI premium pool anchor | post | Runs once every row is filled: transferred employer premiums take their clone-0 record's draw, are cleared for people whose source record has zero wages, and are scaled to the source rows' total per unit of household mass. | | QBI reconciliation | post | All-or-nothing identities reconcile the post-transfer PUF detail surface. | The ASEC checkpoint remains the operator-untouched `raw_source_mapping` @@ -1142,7 +1165,7 @@ source ingestion and faithful schema harmonization -> derive -> seed take-up and other stochastic inputs -> simulate - -> completeness gate plus 134-target by-origin battery + -> completeness gate plus 135-target by-origin battery -> emit input-only pool, receipts, and terminal Logbook row ``` diff --git a/experiments/us-esi-454/README.md b/experiments/us-esi-454/README.md index 84072aceb0..58a6b251b0 100644 --- a/experiments/us-esi-454/README.md +++ b/experiments/us-esi-454/README.md @@ -35,3 +35,44 @@ These are pre-calibration figures at pooled ASEC weights. They are evidence about the stage, not about a release: `packages/microcosm-build/tests/engine_free/us/test_us_esi_premiums.py` pins the figures the docs and registers quote to these files. + +## The stacked pool's fill + +`run_pool_fill_on_pinned_inputs.py` runs the part of the stacked ASEC + ACS +pool that decides the column: it pools the same ASEC inputs, builds the ACS +2024 1-year frame from the pinned PUMS archives, samples households and +assembles the stacked spine as the pool tool does, runs the stage on the +CPS-source rows at their live mass share, fills the ACS rows with the pool's +early gap-fill (the real weighted QRF, for this family alone), writes the ACS +wage zeros below age 15 with the pool's earnings-universe producer, runs +`with_us_esi_premium_pool_anchor`, and grades the result with the pool's +by-origin battery and both gates. + +``` +uv run python experiments/us-esi-454/run_pool_fill_on_pinned_inputs.py \ + --asec-h5 2023= --asec-h5 2024= \ + --asec-h5 2025= \ + --census-person-dir ~/.cache/microcosm/cps/asec_education \ + --acs-household-zip --acs-person-zip \ + --sample-fraction 0.05 --sample-seed 578 +``` + +`--acs-frame-checkpoint ` caches the ACS frame between runs. With the +cache, about five minutes at 5%. + +| Receipt | Sample | +|---|---| +| `receipts/pool_fill_2023_2025_f001.json` | 1% of households, seed 578 | +| `receipts/pool_fill_2023_2025_f005.json` | 5% of households, seed 578 | + +Each receipt records the input digests, the rows filled, the ACS wage +universe counts, the anchor operator's receipt (rows reset and cleared, scale +factor, totals before and after), the +by-origin battery's comparison before and after the anchor, weighted totals +and incidence by origin, and both gate verdicts. Receipts hold aggregates +only. + +It is not a pool build. It skips geography, the other pre-clone operators, +the PUF pass and the other late producers, and its fill runs without the +tenure predictor. `test_us_esi_premiums_pool.py` pins the figures +`docs/us-esi-employer-premiums.md` quotes to these files. diff --git a/experiments/us-esi-454/receipts/pool_fill_2023_2025_f001.json b/experiments/us-esi-454/receipts/pool_fill_2023_2025_f001.json new file mode 100644 index 0000000000..f53d768c91 --- /dev/null +++ b/experiments/us-esi-454/receipts/pool_fill_2023_2025_f001.json @@ -0,0 +1,199 @@ +{ + "acs_inputs": { + "sha256": { + "household": "8281008e53de98f0ef81e7a2ee5a8725991dda1ecfd2713ead73246425e515d0", + "person": "afdc6d90c6e2f0bab365ed32d95ba4c4d8ac651162f46ac7861295b2dc469894" + }, + "vintage": 2024 + }, + "acs_wage_universe": { + "eligible_acs_person_rows": 28999, + "in_universe_null_rows": 0, + "rule_id": "acs_2024_pums_wagp_age_15_plus", + "structurally_absent_person_rows": 5294 + }, + "after_anchor": { + "by_origin_battery": { + "comparisons": { + "person/source_operator_esi_premiums/employer_sponsored_insurance_premiums[clone_0]": { + "legs": { + "negative": { + "acs_incidence": 0.0, + "asec_incidence": 0.0, + "nonzero_rows": { + "acs": 0, + "asec": 0 + }, + "status": "absent_on_both_origins" + }, + "positive": { + "acs_incidence": 0.22848382689182437, + "asec_incidence": 0.24576342102042903, + "incidence_ratio_acs_over_asec": 0.929690130220118, + "nonzero_rows": { + "acs": 7406, + "asec": 968 + }, + "quantile_envelope_distance": 0.16901723076654432 + } + }, + "metric": "monetary_sign_separated", + "status": "tested" + } + }, + "failures": [], + "passed": true + }, + "sides": { + "employer_sponsored_insurance_premiums": { + "acs": { + "mean_per_positive_person": 12935.473269796874, + "positive_rows_without_wages": 0, + "positive_share": 0.22848382689182437, + "positive_weight_without_wages_share": 0.0, + "rows": 34293, + "weighted_persons": 160253817.4747425, + "weighted_total": 473637598987.1167 + }, + "cps": { + "mean_per_positive_person": 11740.80411953737, + "positive_rows_without_wages": 4, + "positive_share": 0.24576342102042903, + "positive_weight_without_wages_share": 0.006686874936554632, + "rows": 4177, + "weighted_persons": 164146295.03247333, + "weighted_total": 473637598987.1168 + } + } + } + }, + "anchor": 1047000000000.0, + "anchor_gate": { + "failures": [], + "passed": true + }, + "asec_inputs": [ + { + "census_person_member": "pppub24.csv", + "census_person_member_sha256": "21a2b9e0e4b08534563578a45acad77868af4ae9a7d46f23776b707d4a559aa7", + "h5": "census_cps_2023.h5", + "h5_sha256": "cb57817327799f42b741caed5f9be94d04021c2e6809c1ad7bd0686da5428d88", + "income_year": 2023 + }, + { + "census_person_member": "pppub25.csv", + "census_person_member_sha256": "06921fe83fc66c907e6c7b86b82255dc70458ee7d76258fc48297cb34f0c06b5", + "h5": "census_cps_2024.h5", + "h5_sha256": "ec36604cb735a660b51b0b2f90be27d803b5878f3464fb30d0eacead59c1260d", + "income_year": 2024 + }, + { + "census_person_member": "pppub26.csv", + "census_person_member_sha256": "f78920699bf671cc211cb720ff8c6274392524a22138aedaf9e3954f91ba4334", + "h5": "census_cps_2025.h5", + "h5_sha256": "4c5a32188b6acfbcfbeb9f5d719d3847873887b72ebdbb19bc402c16e0a64e58", + "income_year": 2025 + } + ], + "before_anchor": { + "by_origin_battery": { + "comparisons": { + "person/source_operator_esi_premiums/employer_sponsored_insurance_premiums[clone_0]": { + "legs": { + "negative": { + "acs_incidence": 0.0, + "asec_incidence": 0.0, + "nonzero_rows": { + "acs": 0, + "asec": 0 + }, + "status": "absent_on_both_origins" + }, + "positive": { + "acs_incidence": 0.2292975889043234, + "asec_incidence": 0.24576342102042903, + "incidence_ratio_acs_over_asec": 0.9330012902337613, + "nonzero_rows": { + "acs": 7440, + "asec": 968 + }, + "quantile_envelope_distance": 0.07183792407547415 + } + }, + "metric": "monetary_sign_separated", + "status": "tested" + } + }, + "failures": [], + "passed": true + }, + "sides": { + "employer_sponsored_insurance_premiums": { + "acs": { + "mean_per_positive_person": 11741.355574096913, + "positive_rows_without_wages": 34, + "positive_share": 0.2292975889043234, + "positive_weight_without_wages_share": 0.0035489340136001133, + "rows": 34293, + "weighted_persons": 160253817.4747425, + "weighted_total": 431445667560.1228 + }, + "cps": { + "mean_per_positive_person": 11740.80411953737, + "positive_rows_without_wages": 4, + "positive_share": 0.24576342102042903, + "positive_weight_without_wages_share": 0.006686874936554632, + "rows": 4177, + "weighted_persons": 164146295.03247333, + "weighted_total": 473637598987.1168 + } + } + } + }, + "cps_household_mass_share": 0.5000000000000001, + "gap_fill_targets": { + "person/source_operator_esi_premiums/employer_sponsored_insurance_premiums": { + "authorized_null_rows": 34293, + "imputed_rows": 34293, + "residual_null_rows": 0, + "unmodeled_rows": 0 + } + }, + "issue": "PolicyEngine/microcosm#454", + "n_estimators": 100, + "pool_anchor": { + "cleared_rows": { + "employer_sponsored_insurance_premiums": 34 + }, + "cleared_weighted_total": { + "employer_sponsored_insurance_premiums": 1830438587.1855903 + }, + "employer_premium_total": 947275197974.2334, + "pool_employer_premium_target": 947275197974.2334, + "scale_factor": 1.1024692958846496, + "source_employer_premium_total": 473637598987.1168, + "source_household_mass_share": 0.5000000000000001, + "source_rows": 4177, + "status": "scaled", + "transferred_employer_premium_target": 473637598987.1166, + "transferred_employer_premium_total_before": 429615228972.9372, + "transferred_household_mass_share": 0.4999999999999999, + "transferred_rows": 34293, + "transferred_rows_reset_to_source_record": { + "employer_sponsored_insurance_premiums": 0 + }, + "transferred_rows_without_source_wages": 17785, + "wage_column": "employment_income_before_lsr" + }, + "pool_employer_premium_total": 947275197974.2334, + "pool_over_single_source_minus_one": 0.023293396224303153, + "sample_fraction": 0.01, + "sample_seed": 578, + "seconds": 102.59727333299816, + "signal_gate": { + "failures": [], + "passed": true + }, + "single_source_employer_premium_total": 925712216525.0378, + "target_year": 2024 +} diff --git a/experiments/us-esi-454/receipts/pool_fill_2023_2025_f005.json b/experiments/us-esi-454/receipts/pool_fill_2023_2025_f005.json new file mode 100644 index 0000000000..bcf0f900f3 --- /dev/null +++ b/experiments/us-esi-454/receipts/pool_fill_2023_2025_f005.json @@ -0,0 +1,199 @@ +{ + "acs_inputs": { + "sha256": { + "household": "8281008e53de98f0ef81e7a2ee5a8725991dda1ecfd2713ead73246425e515d0", + "person": "afdc6d90c6e2f0bab365ed32d95ba4c4d8ac651162f46ac7861295b2dc469894" + }, + "vintage": 2024 + }, + "acs_wage_universe": { + "eligible_acs_person_rows": 145870, + "in_universe_null_rows": 0, + "rule_id": "acs_2024_pums_wagp_age_15_plus", + "structurally_absent_person_rows": 25511 + }, + "after_anchor": { + "by_origin_battery": { + "comparisons": { + "person/source_operator_esi_premiums/employer_sponsored_insurance_premiums[clone_0]": { + "legs": { + "negative": { + "acs_incidence": 0.0, + "asec_incidence": 0.0, + "nonzero_rows": { + "acs": 0, + "asec": 0 + }, + "status": "absent_on_both_origins" + }, + "positive": { + "acs_incidence": 0.2184835885438439, + "asec_incidence": 0.22553394294415505, + "incidence_ratio_acs_over_asec": 0.9687392757459266, + "nonzero_rows": { + "acs": 35037, + "asec": 4564 + }, + "quantile_envelope_distance": 0.07732000596898936 + } + }, + "metric": "monetary_sign_separated", + "status": "tested" + } + }, + "failures": [], + "passed": true + }, + "sides": { + "employer_sponsored_insurance_premiums": { + "acs": { + "mean_per_positive_person": 13208.106704583106, + "positive_rows_without_wages": 0, + "positive_share": 0.2184835885438439, + "positive_weight_without_wages_share": 0.0, + "rows": 171381, + "weighted_persons": 160226262.33596113, + "weighted_total": 462373665675.62024 + }, + "cps": { + "mean_per_positive_person": 12608.252877926678, + "positive_rows_without_wages": 31, + "positive_share": 0.22553394294415505, + "positive_weight_without_wages_share": 0.006924132748017103, + "rows": 21133, + "weighted_persons": 162602144.0098466, + "weighted_total": 462373665675.6201 + } + } + } + }, + "anchor": 1047000000000.0, + "anchor_gate": { + "failures": [], + "passed": true + }, + "asec_inputs": [ + { + "census_person_member": "pppub24.csv", + "census_person_member_sha256": "21a2b9e0e4b08534563578a45acad77868af4ae9a7d46f23776b707d4a559aa7", + "h5": "census_cps_2023.h5", + "h5_sha256": "cb57817327799f42b741caed5f9be94d04021c2e6809c1ad7bd0686da5428d88", + "income_year": 2023 + }, + { + "census_person_member": "pppub25.csv", + "census_person_member_sha256": "06921fe83fc66c907e6c7b86b82255dc70458ee7d76258fc48297cb34f0c06b5", + "h5": "census_cps_2024.h5", + "h5_sha256": "ec36604cb735a660b51b0b2f90be27d803b5878f3464fb30d0eacead59c1260d", + "income_year": 2024 + }, + { + "census_person_member": "pppub26.csv", + "census_person_member_sha256": "f78920699bf671cc211cb720ff8c6274392524a22138aedaf9e3954f91ba4334", + "h5": "census_cps_2025.h5", + "h5_sha256": "4c5a32188b6acfbcfbeb9f5d719d3847873887b72ebdbb19bc402c16e0a64e58", + "income_year": 2025 + } + ], + "before_anchor": { + "by_origin_battery": { + "comparisons": { + "person/source_operator_esi_premiums/employer_sponsored_insurance_premiums[clone_0]": { + "legs": { + "negative": { + "acs_incidence": 0.0, + "asec_incidence": 0.0, + "nonzero_rows": { + "acs": 0, + "asec": 0 + }, + "status": "absent_on_both_origins" + }, + "positive": { + "acs_incidence": 0.21987895665248253, + "asec_incidence": 0.22553394294415505, + "incidence_ratio_acs_over_asec": 0.9749262296492871, + "nonzero_rows": { + "acs": 35292, + "asec": 4564 + }, + "quantile_envelope_distance": 0.04681415503153391 + } + }, + "metric": "monetary_sign_separated", + "status": "tested" + } + }, + "failures": [], + "passed": true + }, + "sides": { + "employer_sponsored_insurance_premiums": { + "acs": { + "mean_per_positive_person": 12614.037909664165, + "positive_rows_without_wages": 255, + "positive_share": 0.21987895665248253, + "positive_weight_without_wages_share": 0.006346073903033663, + "rows": 171381, + "weighted_persons": 160226262.33596113, + "weighted_total": 444397391663.02527 + }, + "cps": { + "mean_per_positive_person": 12608.252877926678, + "positive_rows_without_wages": 31, + "positive_share": 0.22553394294415505, + "positive_weight_without_wages_share": 0.006924132748017103, + "rows": 21133, + "weighted_persons": 162602144.0098466, + "weighted_total": 462373665675.6201 + } + } + } + }, + "cps_household_mass_share": 0.4999999999999999, + "gap_fill_targets": { + "person/source_operator_esi_premiums/employer_sponsored_insurance_premiums": { + "authorized_null_rows": 171381, + "imputed_rows": 171381, + "residual_null_rows": 0, + "unmodeled_rows": 0 + } + }, + "issue": "PolicyEngine/microcosm#454", + "n_estimators": 100, + "pool_anchor": { + "cleared_rows": { + "employer_sponsored_insurance_premiums": 255 + }, + "cleared_weighted_total": { + "employer_sponsored_insurance_premiums": 2942930463.319238 + }, + "employer_premium_total": 924747331351.2404, + "pool_employer_premium_target": 924747331351.2405, + "scale_factor": 1.0473870043561544, + "source_employer_premium_total": 462373665675.6201, + "source_household_mass_share": 0.4999999999999999, + "source_rows": 21133, + "status": "scaled", + "transferred_employer_premium_target": 462373665675.62036, + "transferred_employer_premium_total_before": 441454461199.70605, + "transferred_household_mass_share": 0.5000000000000001, + "transferred_rows": 171381, + "transferred_rows_reset_to_source_record": { + "employer_sponsored_insurance_premiums": 0 + }, + "transferred_rows_without_source_wages": 88169, + "wage_column": "employment_income_before_lsr" + }, + "pool_employer_premium_total": 924747331351.2404, + "pool_over_single_source_minus_one": -0.0010423165607768015, + "sample_fraction": 0.05, + "sample_seed": 578, + "seconds": 92.54829929198604, + "signal_gate": { + "failures": [], + "passed": true + }, + "single_source_employer_premium_total": 925712216525.0378, + "target_year": 2024 +} diff --git a/experiments/us-esi-454/run_pool_fill_on_pinned_inputs.py b/experiments/us-esi-454/run_pool_fill_on_pinned_inputs.py new file mode 100644 index 0000000000..2dd161a28f --- /dev/null +++ b/experiments/us-esi-454/run_pool_fill_on_pinned_inputs.py @@ -0,0 +1,430 @@ +"""Measure the ESI premium stage on a real stacked ASEC + ACS pool. + +Runs the part of the stacked pool that decides the ESI premium inputs, on the +real pinned inputs: + +1. pool the sha-pinned processed ASEC inputs as the base build does, with the + reviewed Census person columns and ``PAW_TYP`` restored; +2. build the ACS 2024 1-year frame from the sha-pinned PUMS archives and map + its native inputs; +3. sample both arms and assemble one stacked spine, as the pool tool does; +4. run the pool's pre-clone operators that the fill needs on the CPS-source + rows: CPS-carried inputs, relationships and the ESI premium stage; +5. fill the ESI premium family on ACS rows with the pool's early gap-fill + (the real weighted QRF, under a test authority limited to this family); +6. materialize the ACS earnings-universe zeros (wages below age 15) with the + pool's late producer, as the pool does before its derive stage, so every + transferred person's wage is a number and none is missing; +7. run ``with_us_esi_premium_pool_anchor``; and +8. grade each output with the pool's by-origin battery, before and after the + anchor, and with the stage's gates. + +It skips everything else the pool does (geography, the other pre-clone +operators, the PUF pass, the other late producers), none of which writes or +reads the ESI premium family before the anchor. Without the housing operator the +ASEC donors carry no tenure, so the script drops the ACS tenure columns and +the fill runs without the tenure predictor that a full pool build has. It +also drops the native ACS usual-hours column, which the pool's operator +boundary refuses on an ACS frame. + + uv run python experiments/us-esi-454/run_pool_fill_on_pinned_inputs.py \ + --asec-h5 2023= --asec-h5 2024=<...> \ + --asec-h5 2025=<...> \ + --census-person-dir ~/.cache/microcosm/cps/asec_education \ + --acs-household-zip --acs-person-zip \ + --sample-fraction 0.10 --sample-seed 578 + +Writes ``receipts/pool_fill___f.json``. +""" + +from __future__ import annotations + +import argparse +import hashlib +import json +import time +from pathlib import Path + +import numpy as np + +from microcosm.build.frame_checkpoint import ( + load_frame_checkpoint, + write_frame_checkpoint, +) +from microcosm.build.serialization_dtypes import canonicalize_frame_string_dtypes +from microcosm.build.us_runtime import esi_premiums as esi +from microcosm.build.us_runtime import multispine_pool as pool +from microcosm.build.us_runtime import stacked_spine +from microcosm.build.us_runtime.acs_inputs import map_acs_native_inputs +from microcosm.build.us_runtime.acs_pums import AcsPumsSource, build_acs_pums_unit_frame +from microcosm.build.us_runtime.acs_sources import load_acs_source_manifest +from microcosm.build.us_runtime.asec_pool import ( + AsecSource, + build_pooled_asec_unit_frame, +) +from microcosm.build.us_runtime.asec_sources import ASEC_SOURCE_ARTIFACTS +from microcosm.build.us_runtime.cps_carried import derive_us_cps_carried_inputs +from microcosm.build.us_runtime.esi_premiums import ( + US_ESI_EMPLOYER_PREMIUM_COLUMN, + US_ESI_PREMIUMS_OUTPUT_COLUMNS, + US_ESI_PREMIUMS_WAGE_COLUMN, + us_esi_premiums_anchor_gate, + us_esi_premiums_signal_gate, + with_us_esi_premium_inputs, + with_us_esi_premium_pool_anchor, +) +from microcosm.build.us_runtime.operator_boundary import ( + assert_operator_free_source_frame, +) +from microcosm.build.us_runtime.public_assistance_type_source import ( + fill_asec_public_assistance_type_source, + load_asec_public_assistance_type_sources, +) +from microcosm.build.us_runtime.relationship_inputs import with_us_relationship_inputs +from microcosm.build.us_runtime.spm_role_source import ASEC_SPM_ROLE_SOURCES +from microcosm.build.us_runtime.stacked_spine import ( + GapFillDirection, + assemble_stacked_spine, +) +from microcosm.frame import Frame + +HERE = Path(__file__).resolve().parent +ACS_NATIVE_HOURS = "weekly_hours_worked_before_lsr" +TENURE_COLUMNS = ("tenure_type", "spm_unit_tenure_type") +FAMILY = "source_operator_esi_premiums" +EVIDENCE = "PERIDNUM" + + +def _sha256(path: Path) -> str: + with path.open("rb") as stream: + return hashlib.file_digest(stream, "sha256").hexdigest() + + +def _jsonable(value): + if isinstance(value, dict): + return {str(key): _jsonable(item) for key, item in value.items()} + if isinstance(value, (list, tuple)): + return [_jsonable(item) for item in value] + if isinstance(value, (np.floating, np.integer, np.bool_)): + return value.item() + return value + + +def _asec_arm(args) -> tuple[object, list[dict]]: + paths = { + int(year): Path(path).expanduser() + for year, path in (value.split("=", 1) for value in args.asec_h5) + } + sources, inputs = [], [] + for year in sorted(paths): + artifact = ASEC_SOURCE_ARTIFACTS[year] + digest = _sha256(paths[year]) + if digest != artifact.sha256: + raise SystemExit(f"{paths[year]}: sha256 {digest} is not the pinned one") + pin = ASEC_SPM_ROLE_SOURCES[year] + member = args.census_person_dir / pin.member + member_digest = _sha256(member) + if member_digest != pin.csv_sha256: + raise SystemExit(f"{member}: sha256 {member_digest} is not the pinned one") + sources.append( + AsecSource(year=year, path=paths[year], census_person_source=member) + ) + inputs.append( + { + "income_year": year, + "h5": artifact.filename, + "h5_sha256": digest, + "census_person_member": pin.member, + "census_person_member_sha256": member_digest, + } + ) + frame, _metadata = build_pooled_asec_unit_frame( + sources, target_year=args.target_year + ) + # The pool reads the ASEC arm from the raw-stage artifact, which also + # restores PAW_TYP by exact Census identity; the CPS-carried operator + # needs it. + tables = {entity: frame.table(entity) for entity in frame.entities} + tables["person"] = fill_asec_public_assistance_type_source( + tables["person"], + load_asec_public_assistance_type_sources( + {source.year: source.census_person_source for source in sources}, + income_years=tuple(source.year for source in sources), + ), + ) + frame = Frame( + tables, + frame.schema, + {"household": frame.weights_for("household")}, + frame.strata, + ) + assert_operator_free_source_frame(frame, label="pooled ASEC") + return frame, inputs + + +def _acs_arm(args) -> tuple[object, dict]: + manifest = load_acs_source_manifest() + digests = { + "household": _sha256(args.acs_household_zip), + "person": _sha256(args.acs_person_zip), + } + pinned = {artifact.role: artifact.sha256 for artifact in manifest.artifacts} + if digests != pinned: + raise SystemExit(f"ACS archives {digests} are not the pinned {pinned}") + inputs = {"vintage": manifest.vintage, "sha256": digests} + cache = args.acs_frame_checkpoint + if cache is not None and cache.is_file(): + # Building the ACS unit structure takes most of a run; reuse a frame + # this script wrote from the same pinned archives. + loaded = load_frame_checkpoint(cache) + if loaded.metadata != inputs: + raise SystemExit(f"{cache} was built from {loaded.metadata}, not {inputs}") + return loaded.frame, inputs + built, _build = build_acs_pums_unit_frame( + AcsPumsSource( + household_zip=args.acs_household_zip, + person_zip=args.acs_person_zip, + vintage=manifest.vintage, + ) + ) + mapped = map_acs_native_inputs(built) + # The native mapping writes ACS usual hours (WKHP) to + # weekly_hours_worked_before_lsr. The pool declares that column an + # ASEC-filled target and its operator boundary refuses it on an ACS + # frame, so the pool tool stops here on these archives. The ESI fill + # neither reads nor writes hours; drop the column and carry on. + tables = {entity: mapped.frame.table(entity) for entity in mapped.frame.entities} + tables["person"] = tables["person"].drop(columns=[ACS_NATIVE_HOURS]) + frame = Frame( + tables, + mapped.frame.schema, + {"household": mapped.frame.weights_for("household")}, + mapped.frame.strata, + ) + if cache is not None: + write_frame_checkpoint(cache, frame, metadata=inputs) + assert_operator_free_source_frame( + frame, + label="ACS", + native_inputs={ + output: receipt + for output, receipt in mapped.native_inputs.items() + if output != ACS_NATIVE_HOURS + }, + ) + return frame, inputs + + +def _without_tenure(frame): + """Drop the ACS-native tenure columns. + + The pool's ASEC donors get tenure from the housing operator, which this + script does not run. Left on the ACS arm, tenure would be a predictor no + donor observes, and the transfer refuses that pattern. + """ + + tables = { + entity: frame.table(entity).drop(columns=list(TENURE_COLUMNS), errors="ignore") + for entity in frame.entities + } + return Frame( + tables, + frame.schema, + {"household": frame.weights_for("household")}, + frame.strata, + ) + + +def _prepare_cps_rows(stack): + """The pool's pre-clone operators the ESI fill depends on, in pool order.""" + + operators = { + "derive_us_cps_carried_inputs": derive_us_cps_carried_inputs, + "with_us_relationship_inputs": lambda current: with_us_relationship_inputs( + current, seed=pool.POOL_RANDOM_SEED, time_period=pool.POOL_TIME_PERIOD + ), + "with_us_esi_premium_inputs": lambda available: ( + pool._with_pool_us_esi_premium_inputs(available, pool=stack) + ), + } + staged = pool._run_source_operator_chain( + stack, + phase="pre_clone", + operator_names=tuple(operators), + operators=operators, + ) + share = staged.receipt["suboperators"][-1]["kernel_receipt"]["anchor_share"] + return staged.frame, share + + +def _authority(): + targets = tuple(sorted(US_ESI_PREMIUMS_OUTPUT_COLUMNS)) + surface = {"person": {FAMILY: targets}} + return stacked_spine._make_test_stacked_authority( + declared_surface=surface, + gap_fill_plan=( + GapFillDirection( + name="asec_survey_to_acs", + recipient_channel="acs", + donor_channel="asec", + target_families=surface, + ), + ), + metric_registry={ + ("person", FAMILY, target, 0): "monetary_sign_separated" + for target in targets + }, + ) + + +def _side_summary(frame) -> dict[str, dict]: + person = frame.table("person") + weights = np.asarray(frame.resolve_weights("person").values, dtype=np.float64) + cps = person[EVIDENCE].notna().to_numpy() + wages = person[US_ESI_PREMIUMS_WAGE_COLUMN].to_numpy(dtype=np.float64) + out: dict[str, dict] = {} + for column in US_ESI_PREMIUMS_OUTPUT_COLUMNS: + values = person[column].to_numpy(dtype=np.float64) + sides = {} + for name, rows in (("cps", cps), ("acs", ~cps)): + positive = rows & (values > 0) + mass = float(weights[rows].sum()) + sides[name] = { + "rows": int(rows.sum()), + "weighted_persons": mass, + "weighted_total": float(weights[rows] @ values[rows]), + "positive_share": float(weights[positive].sum()) / mass, + "mean_per_positive_person": float( + weights[positive] @ values[positive] / weights[positive].sum() + ), + "positive_rows_without_wages": int((positive & ~(wages > 0)).sum()), + "positive_weight_without_wages_share": float( + weights[positive & ~(wages > 0)].sum() / weights[positive].sum() + ), + } + out[column] = sides + return out + + +def _battery(frame, authority) -> dict: + gate = stacked_spine._by_origin_battery_with_test_authority( + frame, authority=authority + ) + return { + "passed": gate.passed, + "failures": list(gate.failures), + "comparisons": _jsonable(gate.details.get("comparisons", gate.details)), + } + + +def main() -> None: + parser = argparse.ArgumentParser() + parser.add_argument("--asec-h5", action="append", required=True) + parser.add_argument("--census-person-dir", type=Path, required=True) + parser.add_argument("--acs-household-zip", type=Path, required=True) + parser.add_argument("--acs-person-zip", type=Path, required=True) + parser.add_argument( + "--acs-frame-checkpoint", + type=Path, + help="Reuse (or write) the built, native-mapped ACS frame here.", + ) + parser.add_argument("--sample-fraction", type=float, default=0.10) + parser.add_argument("--sample-seed", type=int, default=578) + parser.add_argument("--n-estimators", type=int, default=100) + parser.add_argument("--target-year", type=int, default=pool.POOL_TIME_PERIOD) + args = parser.parse_args() + started = time.perf_counter() + + asec, asec_inputs = _asec_arm(args) + acs, acs_inputs = _acs_arm(args) + # The pool tool reads the ASEC arm back from its raw-stage checkpoint, + # which restores canonical string dtypes; do the same to both arms here. + asec = canonicalize_frame_string_dtypes(asec, boundary="pooled ASEC arm") + acs = canonicalize_frame_string_dtypes(_without_tenure(acs), boundary="ACS arm") + stack = assemble_stacked_spine( + asec, + acs, + sample_fraction=args.sample_fraction, + sample_seed=args.sample_seed, + ).frame + del acs + staged, share = _prepare_cps_rows(stack) + authority = _authority() + filled = stacked_spine._gap_fill_stacked_spine_with_test_authority( + staged, + authority=authority, + seed=pool.POOL_RANDOM_SEED, + n_estimators=args.n_estimators, + ) + universe = stacked_spine._materialize_stacked_acs_earnings_universe(filled.frame) + wage_rule = universe.receipt["rules"][esi.US_ESI_PREMIUMS_WAGE_COLUMN] + anchored, anchor_receipt = with_us_esi_premium_pool_anchor(universe.frame) + + alone = with_us_esi_premium_inputs( + asec, seed=pool.POOL_RANDOM_SEED, time_period=args.target_year + ) + alone_weights = np.asarray(alone.resolve_weights("person").values, dtype=np.float64) + alone_total = float( + alone_weights + @ alone.table("person")[US_ESI_EMPLOYER_PREMIUM_COLUMN].to_numpy(dtype=float) + ) + pool_weights = np.asarray( + anchored.resolve_weights("person").values, dtype=np.float64 + ) + pool_total = float( + pool_weights + @ anchored.table("person")[US_ESI_EMPLOYER_PREMIUM_COLUMN].to_numpy(dtype=float) + ) + signal = us_esi_premiums_signal_gate(anchored) + anchor_gate = us_esi_premiums_anchor_gate(anchored, time_period=args.target_year) + receipt = { + "issue": "PolicyEngine/microcosm#454", + "asec_inputs": asec_inputs, + "acs_inputs": acs_inputs, + "sample_fraction": args.sample_fraction, + "sample_seed": args.sample_seed, + "n_estimators": args.n_estimators, + "target_year": args.target_year, + "cps_household_mass_share": share, + "anchor": esi._anchor(args.target_year), + "single_source_employer_premium_total": alone_total, + "pool_employer_premium_total": pool_total, + "pool_over_single_source_minus_one": pool_total / alone_total - 1.0, + "gap_fill_targets": _jsonable( + filled.receipt["directions"]["asec_survey_to_acs"]["targets"] + ), + "acs_wage_universe": { + key: wage_rule[key] + for key in ( + "rule_id", + "structurally_absent_person_rows", + "eligible_acs_person_rows", + "in_universe_null_rows", + ) + }, + "pool_anchor": _jsonable(anchor_receipt), + "before_anchor": { + "sides": _side_summary(filled.frame), + "by_origin_battery": _battery(filled.frame, authority), + }, + "after_anchor": { + "sides": _side_summary(anchored), + "by_origin_battery": _battery(anchored, authority), + }, + "signal_gate": {"passed": signal.passed, "failures": list(signal.failures)}, + "anchor_gate": { + "passed": anchor_gate.passed, + "failures": list(anchor_gate.failures), + }, + "seconds": time.perf_counter() - started, + } + years = sorted(item["income_year"] for item in asec_inputs) + token = f"{args.sample_fraction:.2f}".replace(".", "") + out = HERE / "receipts" / f"pool_fill_{years[0]}_{years[-1]}_f{token}.json" + out.write_text(json.dumps(_jsonable(receipt), indent=2, sort_keys=True) + "\n") + print(json.dumps(_jsonable(receipt), indent=2, sort_keys=True)[:6000]) + print(f"\nwrote {out}") + + +if __name__ == "__main__": + main() diff --git a/packages/microcosm-build/src/microcosm/build/spec_engine/field_usage.py b/packages/microcosm-build/src/microcosm/build/spec_engine/field_usage.py index ba54255837..e83db11fab 100644 --- a/packages/microcosm-build/src/microcosm/build/spec_engine/field_usage.py +++ b/packages/microcosm-build/src/microcosm/build/spec_engine/field_usage.py @@ -26,9 +26,9 @@ ) from .schemas import load_schema_registry -EXPECTED_AUTHORED_FIELD_COUNT = 32_436 -EXPECTED_RESOLVED_BINDING_FIELD_COUNT = 9_780 -EXPECTED_CONFIGURATION_FIELD_COUNT = 42_216 +EXPECTED_AUTHORED_FIELD_COUNT = 32_477 +EXPECTED_RESOLVED_BINDING_FIELD_COUNT = 9_909 +EXPECTED_CONFIGURATION_FIELD_COUNT = 42_386 class FieldUsageError(AssertionError): @@ -341,8 +341,8 @@ def _path_inventory(rows: Sequence[tuple[str, object]]) -> tuple[int, str]: # wildcard broadening a source diff rather than an automatically accepted field. _PINS: dict[str, tuple[int, str]] = { "battery": ( - 797, - "55c2c0cd2d652216ed35f2d2667f52fe00229eb4336507bef9758397a1e24a17", + 802, + "eaf3cc45daebdba940e20e7bf2c995e7fc0bd5219935a963e7fca60c87111409", ), "bundle_country": ( 1, @@ -365,8 +365,8 @@ def _path_inventory(rows: Sequence[tuple[str, object]]) -> tuple[int, str]: "9bad55b4945af1c4213c510942e7b9d22d104bf75b0d9804e4a183e1656c8393", ), "catalog_columns": ( - 1_673, - "a983c0d68e980a31bd1ad41e7ef3c0cb3db9a7ee4d73454ae46f81eb6d1bb427", + 1_683, + "85c679eb6be3331c9eabe066688790b328286b04921dbe56740fc6c1c2b68d01", ), "catalog_metadata_waivers": ( 5, @@ -377,8 +377,8 @@ def _path_inventory(rows: Sequence[tuple[str, object]]) -> tuple[int, str]: "8a186065f5b8ffc59bc3f62fe927975e6f36bc1e913aa61761652c9a8aa67988", ), "generated_authorities": ( - 8_614, - "66eec1216f404e43f7605fba0016d1cd666e71ebe3e35278d14a944d8b48b619", + 8_743, + "c4a7ba2589f2ed17cab5697197fbfa528a736692d23f6932405cdf4fe5d45454", ), "geography_assignment": ( 28, @@ -398,11 +398,11 @@ def _path_inventory(rows: Sequence[tuple[str, object]]) -> tuple[int, str]: ), "imputation_family_concept_validation": ( 52, - "bdf40812604e7cd35d68093fe14b7cd1371cb8ab8658fd6002b254610b062781", + "58b1a3460b01856ac57133224c16192ee26ee9b42a82be526f33834e86f0de2a", ), "imputation_family_execution": ( - 1_769, - "cd395f41c1cc425c734dc344607de043f3506b4ec2e727a29130fc4304f351e3", + 1_793, + "8b68e86393793c1830ba8ab57d274b167d758873ae54e94342d725103ed5689d", ), "imputation_gap_fill_schedule": ( 5, @@ -505,8 +505,8 @@ def _path_inventory(rows: Sequence[tuple[str, object]]) -> tuple[int, str]: "cf0000464013118955571dac2691d4cc1b900c97c6570349b489678cdf937649", ), "spine_pipeline_contract": ( - 88, - "ae011455154bae0df3913ca9a056058a909d913439b292cb46c11f63c7d0d9a3", + 90, + "3407a3521ac3720d2b4a90bfe31b6856ba8a71173609a40f79115e2acae32557", ), "spine_sampling": ( 17, diff --git a/packages/microcosm-build/src/microcosm/build/spec_engine/inventory_coverage.py b/packages/microcosm-build/src/microcosm/build/spec_engine/inventory_coverage.py index f82307a13f..6aad75d9f7 100644 --- a/packages/microcosm-build/src/microcosm/build/spec_engine/inventory_coverage.py +++ b/packages/microcosm-build/src/microcosm/build/spec_engine/inventory_coverage.py @@ -348,10 +348,10 @@ EXPECTED_HASHES = { "acs_group_predictors": "a927bb7ecf3e84f54c93583ab79318654514ac546aefafba67da5285615fbd60", "acs_person_predictors": "878c788a6f037d7aca12b3586ea034eff04f3034ffa11935a736493042551f25", - "authority": "9d4a9672a0f03039b1fe874b9fe21ed575be0d29f14afc396d03cdf5c809bdd2", - "early_families": "4aa9f736fd76e83955477ad1667e58f48f264783f05bdc7f0102cd32d61323bd", - "full_checkpoint": "e2a40490a6b705bab15bf2e7dff8eea4d7841ad70d3b7858874778d4e4829021", - "gap_fill_schedule": "1c31f9868f7884347cc19cf1ff65da43f950b9114941a715bab168246db414a7", + "authority": "5d0c9e0c8626e7d5e8ab3f65f9a6b4ce0a15d64aceac4da02ca67b2b879c623c", + "early_families": "69ecea17171ba40d46bc26e35f0cf8c3636f4cb27e51f84572b60e94c3b01370", + "full_checkpoint": "03987d2ccf871324910457f699b750773cc60044591180ec269f7fb89ae55b25", + "gap_fill_schedule": "2c93d98926a267a05b9c339b087d14cca9c0dd7eb19fe5954d140a1b202454aa", "graph_nodes": "40cd51ffdfe2e9d9d08d48c08e8ded9de1e4b134783bab05c4abc6ad5c72ca1e", "geography_assignment": "44e7f5f6cd7ceeef85d532c3d46306d03de4f4ee811376e6d29920742746b65c", "late_families": "d91f9ff0eb52f43e7b6eed3d5c58c37abe1620c3a11021da15dae9c10e16d382", @@ -417,8 +417,8 @@ EXPECTED_INVENTORY_COUNTS: Mapping[str, int] = { "adapter_surfaces": 13, "authority_components": 9, - "early_families": 13, - "early_targets": 48, + "early_families": 14, + "early_targets": 49, "itemization_batches": 5, "itemization_targets": 37, "late_groups": 19, @@ -433,7 +433,7 @@ "producer_nodes": 38, "producer_virtual_resources": 75, "release_rungs": 5, - "resolved_references": 334, + "resolved_references": 335, "seed_owner_bindings": 112, "seed_owner_rows": 54, "seed_sites": 53, @@ -447,7 +447,7 @@ "take_up_pipeline_steps": 28, "take_up_programs": 17, "typed_artifacts": 84, - "typed_columns": 176, + "typed_columns": 177, "typed_entities": 8, "typed_scopes": 7, } @@ -723,8 +723,8 @@ def add( add( "early_gap_fill_plan_exact", clauses={ - "early family count differs": len(early) == 13, - "early target count differs": early_targets == 48, + "early family count differs": len(early) == 14, + "early target count differs": early_targets == 49, "early family content digest differs": sha256_json(early) == EXPECTED_HASHES["early_families"], "compiled gap-fill plan differs": _json_equal( @@ -740,8 +740,8 @@ def add( "families_sha256": sha256_json(early), }, expected={ - "families": 13, - "targets": 48, + "families": 14, + "targets": 49, "sha256": EXPECTED_HASHES["early_families"], }, ) diff --git a/packages/microcosm-build/src/microcosm/build/us/engine_abi.lock.json b/packages/microcosm-build/src/microcosm/build/us/engine_abi.lock.json index 65c22eecef..33f27d8fc2 100644 --- a/packages/microcosm-build/src/microcosm/build/us/engine_abi.lock.json +++ b/packages/microcosm-build/src/microcosm/build/us/engine_abi.lock.json @@ -1 +1 @@ -{"engine":{"package":"policyengine-us","version":"2.2.1"},"programs":{"aca":{"consumers":["assigned_aca_ptc","person_receives_aca","selected_marketplace_plan_actuarial_value","selected_marketplace_plan_premium_proxy"],"default":true,"engine_class":"data_seeded","entity":"tax_unit","value_type":"bool","variable":"takes_up_aca_if_eligible"},"basic_health_program":{"consumers":["basic_health_program_enrolled"],"default":true,"engine_class":"data_seeded","entity":"person","value_type":"bool","variable":"takes_up_basic_health_program_if_eligible"},"ca_premium_subsidy":{"consumers":["assigned_ca_premium_subsidy"],"default":true,"engine_class":"data_seeded","entity":"tax_unit","value_type":"bool","variable":"takes_up_ca_premium_subsidy_if_eligible"},"chip":{"consumers":["chip_enrolled"],"default":true,"engine_class":"data_seeded","entity":"person","value_type":"bool","variable":"takes_up_chip_if_eligible"},"co_premium_assistance":{"consumers":["assigned_co_premium_assistance"],"default":true,"engine_class":"data_seeded","entity":"tax_unit","value_type":"bool","variable":"takes_up_co_premium_assistance_if_eligible"},"dc_ptc":{"consumers":["dc_ptc"],"default":true,"engine_class":"data_seeded","entity":"tax_unit","value_type":"bool","variable":"takes_up_dc_ptc"},"early_head_start":{"consumers":["early_head_start"],"default":true,"engine_class":"data_seeded","entity":"person","value_type":"bool","variable":"takes_up_early_head_start_if_eligible"},"eitc":{"consumers":["dc_eitc_without_qualifying_child","eitc","nj_eitc","ok_federal_eitc","wa_working_families_tax_credit","wa_working_families_tax_credit_age_expansion_eligible"],"default":true,"engine_class":"data_seeded","entity":"tax_unit","value_type":"bool","variable":"takes_up_eitc"},"head_start":{"consumers":["head_start"],"default":true,"engine_class":"data_seeded","entity":"person","value_type":"bool","variable":"takes_up_head_start_if_eligible"},"housing_assistance":{"consumers":["housing_assistance"],"default":true,"engine_class":"data_seeded","entity":"spm_unit","value_type":"bool","variable":"takes_up_housing_assistance_if_eligible"},"medicaid":{"consumers":["medicaid_enrolled"],"default":true,"engine_class":"data_seeded","entity":"person","value_type":"bool","variable":"takes_up_medicaid_if_eligible"},"medicare":{"consumers":["medicare_enrolled"],"default":true,"engine_class":"data_seeded","entity":"person","value_type":"bool","variable":"takes_up_medicare_if_eligible"},"nm_premium_assistance":{"consumers":["assigned_nm_premium_assistance"],"default":true,"engine_class":"data_seeded","entity":"tax_unit","value_type":"bool","variable":"takes_up_nm_premium_assistance_if_eligible"},"snap":{"consumers":["snap"],"default":true,"engine_class":"data_seeded","entity":"spm_unit","value_type":"bool","variable":"takes_up_snap_if_eligible"},"ssi":{"consumers":["ca_sbd_general_relief_receives_other_cash_assistance","ssi"],"default":true,"engine_class":"data_seeded","entity":"person","value_type":"bool","variable":"takes_up_ssi_if_eligible"},"tanf":{"consumers":["ca_calworks_child_care_eligible","tanf"],"default":true,"engine_class":"data_seeded","entity":"spm_unit","value_type":"bool","variable":"takes_up_tanf_if_eligible"},"wic":{"consumers":["wic"],"default":true,"engine_class":"data_seeded","entity":"person","value_type":"bool","variable":"takes_up_wic_if_eligible"}},"remaining_stage_input_manifest":{"receipt":{"consumer_counts":{"PolicyEngineUSEngine.materialize":12,"_complete_schedule_d_input":5,"_simulation_projection":926,"prepare_stacked_tail_derivation":2,"seed_multispine_pool_inputs":17,"ssi_static_dependency_closure":54,"with_us_qbi_input_reconciliation":27,"with_us_take_up_inputs":16},"engine_input_projection_contract":{"default_count":925,"defaults_sha256":"f938af6506623f453ca55922cf4a8ba6443d5f780f85e4381b777083a90396a0","engine_version_ref":{"kind":"engine_abi_lock","pointer":"/engine/version"},"input_count":926,"sha256":"cefb137f164c6629589a887bbb56831ebc463cd46909a72ead4dbe0557961e61"},"entry_count":1059,"manifest_sha256":"0a84565a659a6404cb17715dda36f094a87431c713c7a37bf65a936b16937325","schema_version":1,"sha256":"a1bbee6d7784821947c71551916347a7cf9ac6d15b13ac10c131ae74f941bfe0","ssi_dependency_contract":{"edge_count":187,"engine_version_ref":{"kind":"engine_abi_lock","pointer":"/engine/version"},"formula_node_count":63,"input_leaf_count":54,"root":"ssi","sha256":"200ca39e784511e9ede685261f5e0840198ec2b9c4292a522c0fc504c535b31c"},"stage_counts":{"derive":34,"seed":33,"simulate":992}},"rows":[{"available_by":"transferred","consumer":"_complete_schedule_d_input","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"long_term_capital_gains_before_response"},{"available_by":"transferred","consumer":"_complete_schedule_d_input","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"non_sch_d_capital_gains"},{"available_by":"assembled","consumer":"_complete_schedule_d_input","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_membership","stage":"derive","variable":"person_tax_unit_id"},{"available_by":"transferred","consumer":"_complete_schedule_d_input","entity":"person","execution_scope":"whole_pool","fallback":"derive_from_finite_transferred_parents","provision":"optional_transferred_or_schedule_d_derived","stage":"derive","variable":"schedule_d_capital_gain_distributions"},{"available_by":"assembled","consumer":"_complete_schedule_d_input","entity":"tax_unit","execution_scope":"whole_pool","fallback":null,"provision":"frame_entity_id","stage":"derive","variable":"tax_unit_id"},{"available_by":"assembled","consumer":"prepare_stacked_tail_derivation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembly_support_provenance","stage":"derive","variable":"person_support_clone_index"},{"available_by":"transferred","consumer":"prepare_stacked_tail_derivation","entity":"person","execution_scope":"clone_2","fallback":"absent_or_cleared_then_schedule_d_derived","provision":"optional_existing_derived_leaf","stage":"derive","variable":"schedule_d_capital_gain_distributions"},{"available_by":"assembled","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembled_raw_acs_source_authority","stage":"derive","variable":"SEMP"},{"available_by":"assembled","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembled_native_person_input","stage":"derive","variable":"age"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"business_is_sstb"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"estate_income"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"estate_income_would_be_qualified"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"farm_operations_income_would_be_qualified"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"farm_rent_income_would_be_qualified"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"non_qualified_dividend_income"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"partnership_income"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"partnership_s_corp_income_would_be_qualified"},{"available_by":"assembled","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_entity_id","stage":"derive","variable":"person_id"},{"available_by":"assembled","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":"person_id_for_unstacked_lineage_digest","provision":"assembly_support_source_identity","stage":"derive","variable":"person_source_id"},{"available_by":"assembled","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembly_support_provenance","stage":"derive","variable":"person_support_channel"},{"available_by":"assembled","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembly_support_provenance","stage":"derive","variable":"person_support_clone_index"},{"available_by":"assembled","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_membership","stage":"derive","variable":"person_tax_unit_id"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"qualified_bdc_income"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"qualified_reit_and_ptp_income"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"rental_income_would_be_qualified"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"primary_puf_exact_zero_universe","stage":"derive","variable":"s_corp_income"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:primary_puf_qrf_nontransfer","stage":"derive","variable":"self_employment_income_before_lsr"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"self_employment_income_would_be_qualified"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"sstb_self_employment_income_before_lsr"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"sstb_self_employment_income_would_be_qualified"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"sstb_unadjusted_basis_qualified_property"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"sstb_w2_wages_from_qualified_business"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"unadjusted_basis_qualified_property"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"w2_wages_from_qualified_business"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"person","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_basic_health_program_if_eligible"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"person","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_chip_if_eligible"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"person","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_early_head_start_if_eligible"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"person","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_head_start_if_eligible"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"person","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_medicaid_if_eligible"},{"available_by":"transferred","consumer":"seed_multispine_pool_inputs","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"transferred_or_preserved_input","stage":"seed","variable":"takes_up_medicare_if_eligible"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"person","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_ssi_if_eligible"},{"available_by":"transferred","consumer":"seed_multispine_pool_inputs","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"transferred_or_preserved_input","stage":"seed","variable":"takes_up_wic_if_eligible"},{"available_by":"transferred","consumer":"seed_multispine_pool_inputs","entity":"spm_unit","execution_scope":"whole_pool","fallback":null,"provision":"transferred_or_preserved_input","stage":"seed","variable":"takes_up_housing_assistance_if_eligible"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"spm_unit","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_snap_if_eligible"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"spm_unit","execution_scope":"whole_pool","fallback":"sourced_seed_when_input_is_missing","provision":"administrative_seed_or_preserved_input","stage":"seed","variable":"takes_up_tanf_if_eligible"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"tax_unit","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_aca_if_eligible"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"tax_unit","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_ca_premium_subsidy_if_eligible"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"tax_unit","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_co_premium_assistance_if_eligible"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"tax_unit","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_dc_ptc"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"tax_unit","execution_scope":"whole_pool","fallback":"sourced_seed_when_input_is_missing","provision":"administrative_seed_or_preserved_input","stage":"seed","variable":"takes_up_eitc"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"tax_unit","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_nm_premium_assistance_if_eligible"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"family","execution_scope":"whole_pool","fallback":null,"provision":"assembly_support_source_identity","stage":"seed","variable":"family_source_id"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"household","execution_scope":"whole_pool","fallback":null,"provision":"assembly_support_source_identity","stage":"seed","variable":"household_source_id"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"marital_unit","execution_scope":"whole_pool","fallback":null,"provision":"assembly_support_source_identity","stage":"seed","variable":"marital_unit_source_id"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembled_native_person_input","stage":"seed","variable":"age"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembly_support_source_identity","stage":"seed","variable":"person_source_id"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_membership","stage":"seed","variable":"person_spm_unit_id"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_membership","stage":"seed","variable":"person_tax_unit_id"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"person","execution_scope":"whole_pool","fallback":"support_source_id_then_entity_id","provision":"optional_assembled_source_identity","stage":"seed","variable":"source_household_id"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"person","execution_scope":"whole_pool","fallback":"support_source_id_then_entity_id","provision":"optional_assembled_source_identity","stage":"seed","variable":"source_person_id"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"person","execution_scope":"whole_pool","fallback":"support_source_id_then_entity_id","provision":"optional_assembled_source_identity","stage":"seed","variable":"source_year"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"spm_unit","execution_scope":"whole_pool","fallback":null,"provision":"frame_resolve_weights_from_household_weight","stage":"seed","variable":""},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"spm_unit","execution_scope":"whole_pool","fallback":null,"provision":"frame_entity_id","stage":"seed","variable":"spm_unit_id"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"spm_unit","execution_scope":"whole_pool","fallback":null,"provision":"assembly_support_source_identity","stage":"seed","variable":"spm_unit_source_id"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"tax_unit","execution_scope":"whole_pool","fallback":null,"provision":"frame_resolve_weights_from_household_weight","stage":"seed","variable":""},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"tax_unit","execution_scope":"whole_pool","fallback":null,"provision":"frame_entity_id","stage":"seed","variable":"tax_unit_id"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"tax_unit","execution_scope":"whole_pool","fallback":null,"provision":"assembly_support_source_identity","stage":"seed","variable":"tax_unit_source_id"},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"family","execution_scope":"whole_pool","fallback":null,"provision":"frame_entity_id","stage":"simulate","variable":"family_id"},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"household","execution_scope":"whole_pool","fallback":null,"provision":"frame_household_weight","stage":"simulate","variable":""},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"household","execution_scope":"whole_pool","fallback":null,"provision":"frame_entity_id","stage":"simulate","variable":"household_id"},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"marital_unit","execution_scope":"whole_pool","fallback":null,"provision":"frame_entity_id","stage":"simulate","variable":"marital_unit_id"},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_membership","stage":"simulate","variable":"person_family_id"},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_membership","stage":"simulate","variable":"person_household_id"},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_entity_id","stage":"simulate","variable":"person_id"},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_membership","stage":"simulate","variable":"person_marital_unit_id"},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_membership","stage":"simulate","variable":"person_spm_unit_id"},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_membership","stage":"simulate","variable":"person_tax_unit_id"},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"spm_unit","execution_scope":"whole_pool","fallback":null,"provision":"frame_entity_id","stage":"simulate","variable":"spm_unit_id"},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"tax_unit","execution_scope":"whole_pool","fallback":null,"provision":"frame_entity_id","stage":"simulate","variable":"tax_unit_id"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"family","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"frame_structural_engine_input","stage":"simulate","variable":"family_id"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"family","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"family_weight"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ak_ssp_excluded_institutional_setting"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"auto_loan_balance"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"auto_loan_interest"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"average_home_energy_use_in_state"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"bedrooms"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"block_geoid"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"cbo_corporate_income_tax"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"cbo_excise_tax"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"cbsa_code"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"congressional_district_geoid"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"county_fips"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ct_tfa_region"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"current_home_energy_use"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"de_ssp_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_business_assets_debt"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_business_assets_equity"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_business_assets_value"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_count"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"frame_structural_engine_input","stage":"simulate","variable":"household_id"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_income_ami_ratio"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_other_real_estate_debt"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_other_real_estate_equity"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_other_real_estate_value"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_rental_property_debt"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_rental_property_equity"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_rental_property_value"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_vehicles_debt"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_vehicles_equity"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_vehicles_owned"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_vehicles_value"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_weight"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_denver"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_wilmington"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_yonkers"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_homeless"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_public_housing"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_non_english_speaking_home"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_on_tribal_land"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_rural"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_shared_living"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_sro"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"living_arrangements_allow_for_food_preparation"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ma_state_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"net_worth"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_drive_clean_purchased_qualifying_vehicle"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_drive_clean_vehicle_cost"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_drive_clean_vehicle_electric_range"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"parent_has_less_than_high_school_education"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"place_fips"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_for_null","provision":"preserved_stacked_engine_input","stage":"simulate","variable":"puma"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"qualified_passenger_vehicle_loan_interest"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"sldl"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"sldu"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"preserved_stacked_engine_input","stage":"simulate","variable":"state_fips"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tenant_pays_utilities"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"assembled_native_engine_input","stage":"simulate","variable":"tenure_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tract_geoid"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"vtd"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"zcta"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"zip_code"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"marital_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"frame_structural_engine_input","stage":"simulate","variable":"marital_unit_id"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"able_contributions_person"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"adopted_this_year"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"after_school_expenses"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"assembled_native_engine_input","stage":"simulate","variable":"age"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ak_ccap_care_schedule"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ak_ccap_charged_rate"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ak_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ak_resides_in_assisted_living_home"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_ccsp_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_ccsp_quality_tier"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_level_b_care"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_meets_snf_criteria"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_receives_elderly_disabled_medicaid_waiver"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_ssp_care_setting"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_ssp_grandfathered"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_ssp_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_ui_base_period_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_ui_high_quarter_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_ui_quarters_with_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_ui_second_high_quarter_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_ui_weekly_earnings"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"alimony_expense"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"alimony_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ambulance_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"american_opportunity_credit_claimed_prior_years"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"amt_foreign_tax_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ar_sra_care_type"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"attends_eligible_educational_institution_for_american_opportunity_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"attends_eligible_educational_institution_for_lifetime_learning_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"az_530a_distribution"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"az_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"az_ccap_quality_enhanced_provider"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default","provision":"declared_deferred_null_input","stage":"simulate","variable":"bank_account_assets"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default","provision":"declared_deferred_null_input","stage":"simulate","variable":"bond_assets"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"business_is_qualified"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"business_is_sstb"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_calworks_child_care_factor_category"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_calworks_child_care_provider_category"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_calworks_child_care_time_category"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_calworks_child_care_welfare_to_work"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_cvrp_vehicle_rebate_amount"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_in_home_supportive_services"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_in_medical_care_facility"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_state_disability_insurance"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"care_and_support_costs"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"care_and_support_payments_from_tax_filer"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"casualty_loss"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"charitable_cash_donations"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"charitable_non_cash_donations"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"charitable_non_cash_donations_non_50_pct_orgs"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"child_support_expense"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"child_support_received"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"childcare_attending_days_per_month"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"childcare_days_per_week"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"childcare_hours_per_day"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"childcare_provider_type_group"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"claimed_as_dependent_on_another_return"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"claimed_ma_covid_19_essential_employee_premium_pay_program_2020"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"co_care_worker_credit_eligible_care_worker"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"co_denver_employee_occupational_privilege_tax_months"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"co_glendale_employee_occupational_privilege_tax_months"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"co_greenwood_village_employee_occupational_privilege_tax_months"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"co_quality_rating_of_child_care_facility"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"co_sheridan_employee_occupational_privilege_tax_months"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"cost_of_attending_college"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"count_529_contribution_beneficiaries"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"cps_race"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"csrs_retirement_pay"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ct_c4k_provider_accredited"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ct_c4k_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ct_ssp_has_therapeutic_diet"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ct_ssp_lives_with_others"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ct_ssp_resides_in_boarding_home"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"current_pregnancy_month"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"dc_ccsp_childcare_provider_category"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"dc_ccsp_schedule_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"dc_ossp_facility_size"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"dc_ossp_in_adult_foster_care"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"de_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"de_poc_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"de_wilmington_nonresident_earnings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"debt_relief"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"dependent_care_employer_benefits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"detailed_industry_recode"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"detailed_occupation_recode"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"disability_benefits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"divorce_year"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e00700"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e01100"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e01200"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e02000"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e03220"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e03230"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e03240"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e03270"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e03290"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e03300"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e03400"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e03500"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e07240"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e07260"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e07300"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e09700"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e09800"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e09900"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e11200"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e18500"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e19200"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e19800"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e20100"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e20400"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e24515"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e24518"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e26270"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e27200"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e32800"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e58990"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e62900"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e87521"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e87530"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"early_withdrawal_penalty"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"educational_assistance"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"educator_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_contribution_to_health_insurance_premiums_category"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_headcount"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_ny_mctmt_zone_1_quarterly_payroll_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_ny_mctmt_zone_2_quarterly_payroll_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_quarterly_payroll_expense_override"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_sponsored_insurance_premiums"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_state_unemployment_tax_rate_override"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_co_denver_occupational_privilege_tax_employee_months"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_co_denver_occupational_privilege_tax_owner_months"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_co_glendale_occupational_privilege_tax_employee_months"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_co_glendale_occupational_privilege_tax_owner_months"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_co_greenwood_village_occupational_privilege_tax_employee_months"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_co_greenwood_village_occupational_privilege_tax_owner_months"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_co_sheridan_occupational_privilege_tax_employee_months"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_mo_st_louis_payroll_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_or_lane_transit_district_taxable_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_or_trimet_taxable_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_payroll_tax_gross_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_taxable_earnings_for_federal_unemployment_tax"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_taxable_earnings_for_social_security"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_taxable_earnings_for_state_unemployment_tax"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_wa_seattle_payroll_expense_current_year_total"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_wa_seattle_payroll_expense_lower_band_taxable_payroll"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_wa_seattle_payroll_expense_prior_year_total"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_wa_seattle_payroll_expense_upper_band_taxable_payroll"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_wa_seattle_social_housing_excess_compensation"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"employment_income_before_lsr"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"er_visit_expense"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"estate_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"estate_income_would_be_qualified"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"excess_withheld_payroll_tax"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"farm_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"farm_operations_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"farm_operations_income_would_be_qualified"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"farm_rent_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"farm_rent_income_would_be_qualified"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"financial_assistance"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"fl_oss_community_care_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"fl_oss_program_track"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"fl_sr_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"four_year_college_student"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"fsla_overtime_premium"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ga_caps_care_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ga_caps_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ga_caps_quality_rating"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ga_ssp_in_nursing_home_or_institutionalized_hospice"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"gambling_losses"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"gambling_winnings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"general_assistance"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"general_business_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"gi_cash_assistance"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"has_american_opportunity_credit_1098_t_or_exception"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"has_american_opportunity_credit_institution_ein"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_applied_for_unemployment_compensation"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_bcc_qualifying_coverage"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"has_champva_health_coverage_at_interview"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_chip_health_coverage_at_interview"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_completed_first_four_years_of_postsecondary_education"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_developmental_delay"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_emergency_medical_condition"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"has_esi"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_felony_drug_conviction"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_health_coverage_other_than_chip"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"has_indian_health_service_coverage_at_interview"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_individualized_education_program"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_lifetime_learning_credit_1098_t_or_exception"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_long_distance_medical_travel_for_medicaid_ce"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"has_marketplace_health_coverage_at_interview"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"has_medicaid_health_coverage_at_interview"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_never_worked"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_no_prior_formal_early_learning"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"has_non_marketplace_direct_purchase_health_coverage_at_interview"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"has_other_means_tested_health_coverage_at_interview"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"has_tricare_health_coverage_at_interview"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"has_va_health_coverage_at_interview"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"health_insurance_premiums"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"health_insurance_premiums_without_medicare_part_b"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"health_savings_account_payroll_contributions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"heating_expense_person"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"hi_ccap_provider_category"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"hi_oss_care_facility_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"home_equity"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"home_is_on_agricultural_land"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"home_mortgage_interest"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"hourly_wage"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"hours_worked_last_week"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ia_cca_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ia_cca_quality_rating"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"id_aabd_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"id_iccp_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_aabd_is_bedfast"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_ccap_base_day_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"illicit_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"imaging_expense"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"immigration_status_str"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_ccdf_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_ccdf_ptq_level"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_out_of_home_care_facility"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_resides_in_licensed_residential_facility"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_resides_in_unlicensed_residential_facility"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"inpatient_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"investment_expenses"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"investment_in_529_plan_indv"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"investment_income_elected_form_4952"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"investment_interest_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_american_indian_or_alaska_native_for_medicaid_ce"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_blind"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_born_outside_us"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_breastfeeding"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_complying_with_tanf_work_requirements"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_computer_scientist"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_deaf"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_deceased"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_disabled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_english_proficient"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_enrolled_at_least_half_time_for_american_opportunity_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_enrolled_in_ccdf"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_enrolled_in_head_start"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_executive_administrative_professional"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_farmer_fisher"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_federal_work_study_participant"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"assembled_native_engine_input","stage":"simulate","variable":"is_female"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_full_time_college_student"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_fully_disabled_service_connected_veteran"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_grandparent_of_filer_or_spouse"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_hispanic"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_hospitalized_for_medicaid_ce"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"assembled_native_engine_input","stage":"simulate","variable":"is_household_head"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_household_spouse"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_adult_residential_care"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_foster_care"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_foster_care_group_home"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_k12_nonpublic_school"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_medicaid_community_engagement_treatment_program"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_medicaid_facility"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_residential_care_facility"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_secondary_school"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_substance_use_treatment_program"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_work_program"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_incapable_of_self_care"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_incarcerated"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_medicaid_1115_mec_adult"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_medicaid_community_engagement_seasonal_worker"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_medically_frail_or_has_special_medical_needs_for_medicaid_ce"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_migratory_child"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_military"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_paid_hourly"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_parent_of_filer_or_spouse"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_part_time_college_student"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_permanently_and_totally_disabled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_permanently_disabled_veteran"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_pregnant"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_pursuing_credential_for_american_opportunity_credit"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"preserved_stacked_engine_input","stage":"simulate","variable":"is_related_to_head_or_spouse"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_runaway_child"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_self_employed"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_separated"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_severely_disabled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_snap_abawd_discretionary_exempt"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_snap_abawd_indian_exempt"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_snap_employment_training_student"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_snap_work_incentive_student"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_snap_work_program_participant"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_snap_work_registration_noncompliant"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_snap_workfare_participant"},{"available_by":"release","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"refuse_null_if_present_no_default","provision":"unprovisioned_source_input","stage":"simulate","variable":"is_spm_independent_minor_role"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_surviving_child_of_disabled_veteran"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_surviving_spouse"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_surviving_spouse_of_disabled_veteran"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_tafdc_related_to_head_or_spouse"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_union_member_or_covered"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_unmarried_partner_of_household_head"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_wccc_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_wic_at_nutritional_risk"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_wic_fully_breastfeeding"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"keogh_distributions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ks_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ky_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ky_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ky_service_credit_months_post_1997"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ky_service_credit_months_pre_1998"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ky_ssp_care_receivers"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ky_ssp_category"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"la_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"la_quality_rating_of_child_care_facility"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"la_receives_blind_exemption"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"lab_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"life_insurance_benefits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"long_term_capital_gains_basis"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"long_term_capital_gains_before_response"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"long_term_capital_gains_on_assets_eligible_for_vt_exclusion"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"long_term_capital_gains_on_collectibles"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"long_term_capital_gains_on_small_business_stock"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"long_term_capital_gains_years_held"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"long_term_health_insurance_premiums"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ma_ccfa_care_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ma_ccfa_is_in_relatives_home_care"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ma_ccfa_schedule_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"major_industry_recode"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"md_ccs_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"md_paa_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"md_paa_pending_federal_benefit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"me_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"me_ssp_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"medicaid_claiming_tax_unit_id"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"medicaid_community_engagement_community_service_hours"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"medicaid_community_engagement_less_than_half_time_education_hours"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"medicaid_community_engagement_six_month_average_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"medicaid_community_engagement_work_program_hours"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"medicaid_tax_dependent_exception_non_custodial_parent"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"medicare_part_b_premiums_reported"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"medicare_quarters_of_coverage"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"meets_ssi_disability_criteria"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mi_ccap_exempt_level"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mi_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mi_ccap_star_rating"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mi_ssp_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"military_basic_pay"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"military_retirement_pay"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"military_retirement_pay_survivors"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"military_service_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"miscellaneous_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mn_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mn_ccap_quality_rating"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mn_msa_has_guardian"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mn_msa_housing_assistance_eligible"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mn_msa_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mn_msa_uses_representative_payee"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mo_ccs_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mo_kansas_city_earnings_tax_taxable_earnings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mo_snc_facility_base_charge"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mo_ssp_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mo_st_louis_earnings_tax_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mo_st_louis_earnings_tax_taxable_earnings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"months_receiving_social_security_disability"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ms_ccpp_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mt_ccap_care_time"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mt_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nd_ccap_provider_qris_step"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nd_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ne_aabd_alternate_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ne_child_care_subsidy_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ne_child_care_subsidy_quality_tier"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ne_school_readiness_credit_child_care_worker_rating"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ne_school_readiness_credit_eligible_worker"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"never_eligible_for_social_security_benefits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nh_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_ccap_grow_nj_kids_rating"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_unemployment_insurance_base_period_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_unemployment_insurance_base_period_weeks"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_unemployment_insurance_qualifying_dependents"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_unemployment_insurance_spouse_employed_when_claim_established"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_unemployment_insurance_weekly_gross_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_unemployment_insurance_weeks_claimed"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_unemployment_insurance_working_less_than_full_time"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nm_ccap_focus_level"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nm_ccap_non_traditional_hours"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nm_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"non_public_school_tuition"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"non_qualified_dividend_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"non_sch_d_capital_gains"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nv_ccdp_provider_star_rating"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nv_ccdp_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_ui_base_period_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_ui_gross_weekly_earnings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_ui_high_quarter_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_ui_quarters_with_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_ui_second_high_quarter_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_ui_weekly_hours_worked"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_yonkers_nonresident_earnings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"offered_aca_disqualifying_esi"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_bonus_depreciation_add_back"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_ccap_has_special_accommodations"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_ccap_is_accredited"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_ccap_non_traditional_hours"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_ccap_owf_transitional"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_ccap_quality_tier"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_educator_expense_deduction_person"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_federal_conformity_deductions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_has_taken_oh_lump_sum_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_homestead_exemption_qualifying_surviving_spouse"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_other_add_backs"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_section_179_expense_add_back"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_uniformed_services_retirement_income_deduction"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ok_ccs_provider_setting"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ok_ccs_star_level"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ok_ui_base_period_taxable_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ok_ui_base_period_total_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ok_ui_gross_weekly_earnings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ok_ui_high_quarter_taxable_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ok_ui_high_quarter_total_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"or_erdc_provider_area"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"or_erdc_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"other_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"other_health_insurance_premiums"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"other_medical_expenses"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"outpatient_expense"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"over_the_counter_health_expenses"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"own_children_in_household"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"p08000"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pa_ccw_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pa_philadelphia_wage_tax_reduced_rate_eligible"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pa_philadelphia_wage_tax_resident"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pa_philadelphia_wage_tax_taxable_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pa_uc_base_year_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pa_uc_credit_weeks"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pa_uc_gross_weekly_earnings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pa_uc_highest_quarter_wages"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"partnership_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"partnership_s_corp_income_would_be_qualified"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"partnership_self_employment_net_earnings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"passive_partnership_s_corp_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pell_grant_countable_assets"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pell_grant_dependent_available_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pell_grant_dependent_other_allowances"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pell_grant_head_allowances"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pell_grant_months_in_school"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pension_survivors"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"person_count"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"frame_structural_engine_input","stage":"simulate","variable":"person_family_id"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"frame_structural_engine_input","stage":"simulate","variable":"person_household_id"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"frame_structural_engine_input","stage":"simulate","variable":"person_marital_unit_id"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"frame_structural_engine_input","stage":"simulate","variable":"person_spm_unit_id"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"frame_structural_engine_input","stage":"simulate","variable":"person_tax_unit_id"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"personal_property"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pfml_benefits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"physician_services_expense"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"pre_subsidy_care_expenses"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"pre_subsidy_rent"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pre_subsidy_transportation_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pre_tax_health_insurance_premiums"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"prescription_expense"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"previous_year_income_available"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"primary_residence_value"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"prior_year_minimum_tax_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"qualified_adoption_assistance_expense"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"qualified_bdc_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"qualified_dividend_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"qualified_reit_and_ptp_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"qualified_tuition_expenses"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"railroad_benefits"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"real_estate_taxes"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"receives_medicaid"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"receives_or_needs_protective_services"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"receives_ssi"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"receives_wic"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"rental_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"rental_income_would_be_qualified"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"retired_from_federal_government"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"retired_from_ky_government"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"retired_on_total_disability"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"retirement_benefits_from_ss_exempt_employment"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ri_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ri_ccap_star_rating"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ri_ccap_step_rating"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"roth_401k_contributions_desired"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"roth_403b_contributions_desired"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"roth_ira_contributions_desired"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"s_corp_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"salt_refund_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"sc_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"sc_ccap_quality_level"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"sc_ccap_registered_quality_level"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"sc_ccap_second_child_discount_rate"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"sc_tuition_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"sc_tuition_credit_eligible"},{"available_by":"derived","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"derived_schedule_d_input","stage":"simulate","variable":"schedule_d_capital_gain_distributions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"sd_cca_provider_type"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"self_employed_pension_contributions_desired"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"self_employment_income_before_lsr"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"self_employment_income_last_year"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"self_employment_income_would_be_qualified"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"short_term_capital_gains"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"social_security_dependents"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"social_security_disability"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"social_security_retirement"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"social_security_survivors"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ss_aime_input"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_lives_in_another_persons_household"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_lives_in_medical_treatment_facility"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_medicaid_pays_majority_of_care"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_others_pay_all_meals"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_qualifying_quarters_earnings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_receives_food_from_others"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_receives_outside_shelter_support"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_receives_shelter_from_others_in_household"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_for_null","provision":"preserved_stacked_engine_input","stage":"simulate","variable":"ssi_reported"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_shelter_support_value"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"ssn_card_type"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"sstb_self_employment_income_before_lsr"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"sstb_self_employment_income_would_be_qualified"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"sstb_unadjusted_basis_qualified_property"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"sstb_w2_wages_from_qualified_business"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"state_or_federal_salary"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default","provision":"declared_deferred_null_input","stage":"simulate","variable":"stock_assets"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"strike_benefits"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"student_loan_interest"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"survivor_benefits"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_basic_health_program_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_chip_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_early_head_start_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_head_start_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_medicaid_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_medicare_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_ssi_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_wic_if_eligible"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_exempt_401k_distributions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_exempt_403b_distributions"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"tax_exempt_interest_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"tax_exempt_ira_distributions"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"tax_exempt_private_pension_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_exempt_public_pension_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_exempt_sep_distributions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_preparation_fees"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_401k_distributions"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_403b_distributions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"taxable_estate_value"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"taxable_federal_pension_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_interest_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_ira_distributions"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_private_pension_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"taxable_public_pension_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"taxable_roth_conversions"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_sep_distributions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"technical_institution_student"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tip_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tn_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tn_ccap_qris_tier"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"total_disability_payments"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"traditional_401k_contributions_desired"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"traditional_403b_contributions_desired"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"traditional_ira_contributions_desired"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"treasury_tipped_occupation_code"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tx_ccs_care_schedule"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tx_ccs_provider_rating"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tx_ccs_provider_type"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"unadjusted_basis_qualified_property"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"under_12_months_postpartum"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"under_60_days_postpartum"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"unemployment_compensation"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"unreimbursed_business_employee_expenses"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"urgent_care_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"us_bonds_for_higher_ed"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"us_govt_interest_person"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"use_reported_ssi"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ut_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ut_ui_base_period_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ut_ui_gross_weekly_earnings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ut_ui_high_quarter_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ut_ui_quarters_with_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ut_ui_weekly_hours_worked"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ut_ui_weeks_unemployed"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"va_ccsp_is_full_day"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"va_ccsp_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"va_educator_expenses"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"veterans_benefits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"vt_ccfap_provider_type"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"w2_wages_from_qualified_business"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wa_eceap_slot_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wa_pfml_average_weekly_wage_override"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wa_pfml_leave_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wa_pfml_qualifying_period_hours_worked"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wa_wccc_day_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wa_wccc_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"was_in_foster_care"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"was_recently_incarcerated_for_medicaid_ce"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"weekly_hours_worked_before_lsr"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"weekly_snap_work_program_hours"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"weeks_unemployed"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wi_shares_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wic_breastfeeding_infant_count"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wic_infant_feeding_category"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"worked_last_year"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"workers_compensation"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wv_ccap_non_traditional_hours"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wv_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wv_ccap_quality_tier"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wy_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"year_deceased"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"year_of_retirement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"years_in_military"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"years_since_us_entry"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_ccsp_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ar_months_since_tea_exit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ar_was_tea_recipient"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"az_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"bottled_gas_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"broadband_cost"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_riv_share_eligible_for_emergency_payment"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_scc_general_assistance_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_sf_caap_clothing_provided_in_kind"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_sf_caap_food_provided_in_kind"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_sf_caap_housing_provided_in_kind"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_sf_caap_is_recipient"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_sf_caap_utilities_provided_in_kind"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_smc_general_assistance_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"co_ccap_is_in_entry_process"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"co_ccap_is_in_re_determination_process"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"coal_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"cooking_fuel_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"dc_ccsp_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"dc_liheap_housing_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"de_poc_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"enrolled_in_ebb"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"experienced_covid_income_loss"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"fdpir"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"fl_sr_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"fuel_oil_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ga_caps_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"gas_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_cooling_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"head_start_applies_housing_cost_adjustment"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"head_start_uses_discretionary_income_limit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"heat_expense_included_in_rent"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"heating_cooling_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"heating_expense_last_year"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"heating_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"homeowners_association_fees"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"homeowners_insurance"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"housing_designated_welfare"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ia_cca_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"id_iccp_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_aabd_institutional_status"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_aabd_vehicle_is_essential"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_ccap_non_parent_relative_child_only_tanf"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_ccap_protective_care_override"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_liheap_eligible_for_crisis_assistance"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_ccdf_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_nd_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_sd_cca_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_wi_shares_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"la_general_relief_disability_eligible"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"la_general_relief_housing_subsidy_program_eligible"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"la_general_relief_recipient"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ma_ccfa_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ma_eaedc_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"md_ccs_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"meets_ccdf_activity_test"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"metered_gas_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mi_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mn_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mn_ccap_registration_fee"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mo_ccs_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"months_since_calworks_exit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mortgage_payments"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mt_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ne_child_care_subsidy_at_redetermination"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ne_child_care_subsidy_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nm_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nv_ccdp_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_ccap_owf_basic_assistance"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"other_heating_fuel_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pa_ccw_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pa_ccw_has_stepparent"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"phone_cost"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pre_subsidy_electricity_expense"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"receives_housing_assistance"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"receives_snap"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"receives_tanf"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ri_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"sd_tanf_is_shared_living"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"sewage_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"snap_self_employment_income_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"spm_unit_assets"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"spm_unit_count"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"spm_unit_energy_subsidy"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"frame_structural_engine_input","stage":"simulate","variable":"spm_unit_id"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"spm_unit_net_income_reported"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"spm_unit_pre_subsidy_childcare_expenses"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"spm_unit_school_lunch_subsidy"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"spm_unit_snap"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"assembled_native_engine_input","stage":"simulate","variable":"spm_unit_tenure_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"spm_unit_total_income_reported"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_housing_assistance_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_snap_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_tanf_if_eligible"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tn_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tn_ccap_protective_services_waiver"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"trash_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tx_ottanf_crisis_criteria"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"va_ccsp_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wa_show_all_cash_assistance_programs"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"was_calworks_recipient"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"water_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wood_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wy_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wy_power_shelter_qualified"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"advanced_main_air_circulating_fan_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"air_sealing_ventilation_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_non_refundable_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_refundable_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"amt_form_completed"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"amt_non_agi_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"az_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"az_charitable_contributions_to_qualifying_charitable_organizations"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"az_charitable_contributions_to_qualifying_foster_care_organizations"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"biomass_stove_boiler_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"co_non_refundable_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"co_property_tax_exemption"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"cohabitating_spouses"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ct_amt"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ct_section_179_expense_add_back"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"domestic_production_ald"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"electric_heat_pump_clothes_dryer_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"electric_load_service_center_upgrade_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"electric_stove_cooktop_range_or_oven_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"electric_wiring_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"energy_efficient_central_air_conditioner_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"energy_efficient_door_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"energy_efficient_insulation_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"energy_efficient_roof_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"energy_efficient_window_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"excess_payroll_tax_withheld"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"first_home_mortgage_balance"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"first_home_mortgage_interest"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"first_home_mortgage_origination_year"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"foreign_earned_income_exclusion"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"foreign_tax_credit_potential"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"form_4972_lumpsum_distributions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"fuel_cell_property_capacity"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"fuel_cell_property_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ga_investment_in_529_plan_deduction"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ga_itemized_deductions_adjustment"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"geothermal_heat_pump_property_expenditures"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"health_savings_account_ald"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"heat_pump_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"heat_pump_water_heater_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"home_energy_audit_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"id_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_pass_through_entity_tax_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_pass_through_withholding"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_schedule_m_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_schedule_m_subtractions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_bonus_depreciation_add_back"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_healthcare_sharing_deduction"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_nol"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_nol_add_back"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_oos_municipal_obligation_interest_add_back"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_other_add_backs"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_other_deductions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_section_179_expense_add_back"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_tax_add_back"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_use_tax"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"investment_income_form_4952"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_barred_from_american_opportunity_credit_due_to_improper_claims"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_nonresident_alien_for_american_opportunity_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_nonresident_alien_for_lifetime_learning_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"k12_tuition_and_fees"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ks_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ky_refundable_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"md_total_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"me_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"me_affordability_payment_subtraction_reported"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"me_property_tax_fairness_credit_utilities_in_rent_amount"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"me_step_4_share_of_child_care_expenses"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mi_non_refundable_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mn_renters_credit_property_tax_exempt"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mn_renters_credit_qualifying_crp"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ms_charitable_contributions_to_qualifying_foster_care_organizations"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ms_refundable_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nc_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nd_refundable_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nd_renters_refund_property_tax_exempt"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ne_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"new_clean_vehicle_battery_capacity"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"new_clean_vehicle_battery_components_made_in_north_america"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"new_clean_vehicle_battery_critical_minerals_extracted_in_trading_partner_country"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"new_clean_vehicle_classification"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"new_clean_vehicle_msrp"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nh_refundable_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_non_refundable_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_senior_freeze"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nm_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nm_non_refundable_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_qualified_geothermal_energy_system_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_qualified_solar_energy_systems_equipment_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nyc_unincorporated_business_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_refundable_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ok_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ok_adjustments"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"or_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"or_federal_pension_subtraction"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"or_tax_before_credits_in_prior_year"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"other_net_gain"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pell_grant_primary_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"prior_energy_efficient_home_improvement_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"prior_energy_efficient_window_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"property_sales_net_capital_gain"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"puerto_rico_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"purchased_qualifying_new_clean_vehicle"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"purchased_qualifying_used_clean_vehicle"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"qualified_battery_storage_technology_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"qualified_furnace_or_hot_water_boiler_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"qualified_retirement_penalty"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"recapture_of_investment_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"refundable_payroll_tax_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"rent_is_shared_with_another_tax_unit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"residential_efficiency_electrification_retrofit_energy_savings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"residential_efficiency_electrification_retrofit_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ri_section_179_expense_add_back"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"salt_refund_last_year"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"second_home_mortgage_balance"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"second_home_mortgage_interest"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"second_home_mortgage_origination_year"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"selected_marketplace_plan_benchmark_ratio"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"selected_marketplace_plan_category"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"separate_filer_itemizes"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"small_wind_energy_property_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"solar_electric_property_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"solar_water_heating_property_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"specified_possession_income"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_aca_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_ca_premium_subsidy_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_co_premium_assistance_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_dc_ptc"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_eitc"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_nm_premium_assistance_if_eligible"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_unit_count"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"frame_structural_engine_input","stage":"simulate","variable":"tax_unit_id"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_unit_income_ami_ratio"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_unit_stillborn_children"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"taxsim_pprofinc"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"taxsim_sprofinc"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tuition_and_fees"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"unrecaptured_section_1250_gain"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"unreported_payroll_tax"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"used_clean_vehicle_sale_price"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ut_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"utilities_included_in_rent"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"va_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wa_pte_cotenant_disposable_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"would_file_if_eligible_for_refundable_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"would_file_taxes_voluntarily"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wv_additions"},{"available_by":"assembled","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembled_native_person_input","stage":"simulate","variable":"age"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"alimony_income"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"ephemeral_simulation_projection_engine_default","provision":"declared_deferred_null_input","stage":"simulate","variable":"bank_account_assets"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"ephemeral_simulation_projection_engine_default","provision":"declared_deferred_null_input","stage":"simulate","variable":"bond_assets"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"child_support_received"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"disability_benefits"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"employment_income_before_lsr"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"financial_assistance"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"gi_cash_assistance"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"immigration_status_str"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_blind"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_full_time_college_student"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_separated"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"keogh_distributions"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"meets_ssi_disability_criteria"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"non_qualified_dividend_income"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"own_children_in_household"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"qualified_dividend_income"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"rental_income"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"self_employment_income_before_lsr"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"social_security_dependents"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"social_security_disability"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"social_security_retirement"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"social_security_survivors"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_lives_in_another_persons_household"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_lives_in_medical_treatment_facility"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_medicaid_pays_majority_of_care"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_others_pay_all_meals"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_qualifying_quarters_earnings"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_receives_food_from_others"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_receives_outside_shelter_support"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_receives_shelter_from_others_in_household"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_shelter_support_value"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"sstb_self_employment_income_before_lsr"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"ephemeral_simulation_projection_engine_default","provision":"declared_deferred_null_input","stage":"simulate","variable":"stock_assets"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"survivor_benefits"},{"available_by":"seeded","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"seed_receipted_value_or_disclosed_engine_default","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_ssi_if_eligible"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_exempt_401k_distributions"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_exempt_403b_distributions"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"tax_exempt_interest_income"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"tax_exempt_ira_distributions"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"tax_exempt_private_pension_income"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_exempt_public_pension_income"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_exempt_sep_distributions"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_401k_distributions"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_403b_distributions"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_interest_income"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_ira_distributions"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_private_pension_income"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"taxable_public_pension_income"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_sep_distributions"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"unemployment_compensation"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"veterans_benefits"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"workers_compensation"}]}} +{"engine":{"package":"policyengine-us","version":"2.2.1"},"programs":{"aca":{"consumers":["assigned_aca_ptc","person_receives_aca","selected_marketplace_plan_actuarial_value","selected_marketplace_plan_premium_proxy"],"default":true,"engine_class":"data_seeded","entity":"tax_unit","value_type":"bool","variable":"takes_up_aca_if_eligible"},"basic_health_program":{"consumers":["basic_health_program_enrolled"],"default":true,"engine_class":"data_seeded","entity":"person","value_type":"bool","variable":"takes_up_basic_health_program_if_eligible"},"ca_premium_subsidy":{"consumers":["assigned_ca_premium_subsidy"],"default":true,"engine_class":"data_seeded","entity":"tax_unit","value_type":"bool","variable":"takes_up_ca_premium_subsidy_if_eligible"},"chip":{"consumers":["chip_enrolled"],"default":true,"engine_class":"data_seeded","entity":"person","value_type":"bool","variable":"takes_up_chip_if_eligible"},"co_premium_assistance":{"consumers":["assigned_co_premium_assistance"],"default":true,"engine_class":"data_seeded","entity":"tax_unit","value_type":"bool","variable":"takes_up_co_premium_assistance_if_eligible"},"dc_ptc":{"consumers":["dc_ptc"],"default":true,"engine_class":"data_seeded","entity":"tax_unit","value_type":"bool","variable":"takes_up_dc_ptc"},"early_head_start":{"consumers":["early_head_start"],"default":true,"engine_class":"data_seeded","entity":"person","value_type":"bool","variable":"takes_up_early_head_start_if_eligible"},"eitc":{"consumers":["dc_eitc_without_qualifying_child","eitc","nj_eitc","ok_federal_eitc","wa_working_families_tax_credit","wa_working_families_tax_credit_age_expansion_eligible"],"default":true,"engine_class":"data_seeded","entity":"tax_unit","value_type":"bool","variable":"takes_up_eitc"},"head_start":{"consumers":["head_start"],"default":true,"engine_class":"data_seeded","entity":"person","value_type":"bool","variable":"takes_up_head_start_if_eligible"},"housing_assistance":{"consumers":["housing_assistance"],"default":true,"engine_class":"data_seeded","entity":"spm_unit","value_type":"bool","variable":"takes_up_housing_assistance_if_eligible"},"medicaid":{"consumers":["medicaid_enrolled"],"default":true,"engine_class":"data_seeded","entity":"person","value_type":"bool","variable":"takes_up_medicaid_if_eligible"},"medicare":{"consumers":["medicare_enrolled"],"default":true,"engine_class":"data_seeded","entity":"person","value_type":"bool","variable":"takes_up_medicare_if_eligible"},"nm_premium_assistance":{"consumers":["assigned_nm_premium_assistance"],"default":true,"engine_class":"data_seeded","entity":"tax_unit","value_type":"bool","variable":"takes_up_nm_premium_assistance_if_eligible"},"snap":{"consumers":["snap"],"default":true,"engine_class":"data_seeded","entity":"spm_unit","value_type":"bool","variable":"takes_up_snap_if_eligible"},"ssi":{"consumers":["ca_sbd_general_relief_receives_other_cash_assistance","ssi"],"default":true,"engine_class":"data_seeded","entity":"person","value_type":"bool","variable":"takes_up_ssi_if_eligible"},"tanf":{"consumers":["ca_calworks_child_care_eligible","tanf"],"default":true,"engine_class":"data_seeded","entity":"spm_unit","value_type":"bool","variable":"takes_up_tanf_if_eligible"},"wic":{"consumers":["wic"],"default":true,"engine_class":"data_seeded","entity":"person","value_type":"bool","variable":"takes_up_wic_if_eligible"}},"remaining_stage_input_manifest":{"receipt":{"consumer_counts":{"PolicyEngineUSEngine.materialize":12,"_complete_schedule_d_input":5,"_simulation_projection":926,"prepare_stacked_tail_derivation":2,"seed_multispine_pool_inputs":17,"ssi_static_dependency_closure":54,"with_us_esi_premium_pool_anchor":16,"with_us_qbi_input_reconciliation":27,"with_us_take_up_inputs":16},"engine_input_projection_contract":{"default_count":925,"defaults_sha256":"f938af6506623f453ca55922cf4a8ba6443d5f780f85e4381b777083a90396a0","engine_version_ref":{"kind":"engine_abi_lock","pointer":"/engine/version"},"input_count":926,"sha256":"cefb137f164c6629589a887bbb56831ebc463cd46909a72ead4dbe0557961e61"},"entry_count":1075,"manifest_sha256":"d32b748b4e240a7a93c6354925bd2e7af2c493587cc740cd822cda8d8480833c","schema_version":1,"sha256":"ffd964903029b4f00aeeec0cd12bf87a1a48133d61f7bdfd8f786a63e9a6d307","ssi_dependency_contract":{"edge_count":187,"engine_version_ref":{"kind":"engine_abi_lock","pointer":"/engine/version"},"formula_node_count":63,"input_leaf_count":54,"root":"ssi","sha256":"200ca39e784511e9ede685261f5e0840198ec2b9c4292a522c0fc504c535b31c"},"stage_counts":{"derive":50,"seed":33,"simulate":992}},"rows":[{"available_by":"transferred","consumer":"_complete_schedule_d_input","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"long_term_capital_gains_before_response"},{"available_by":"transferred","consumer":"_complete_schedule_d_input","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"non_sch_d_capital_gains"},{"available_by":"assembled","consumer":"_complete_schedule_d_input","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_membership","stage":"derive","variable":"person_tax_unit_id"},{"available_by":"transferred","consumer":"_complete_schedule_d_input","entity":"person","execution_scope":"whole_pool","fallback":"derive_from_finite_transferred_parents","provision":"optional_transferred_or_schedule_d_derived","stage":"derive","variable":"schedule_d_capital_gain_distributions"},{"available_by":"assembled","consumer":"_complete_schedule_d_input","entity":"tax_unit","execution_scope":"whole_pool","fallback":null,"provision":"frame_entity_id","stage":"derive","variable":"tax_unit_id"},{"available_by":"assembled","consumer":"prepare_stacked_tail_derivation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembly_support_provenance","stage":"derive","variable":"person_support_clone_index"},{"available_by":"transferred","consumer":"prepare_stacked_tail_derivation","entity":"person","execution_scope":"clone_2","fallback":"absent_or_cleared_then_schedule_d_derived","provision":"optional_existing_derived_leaf","stage":"derive","variable":"schedule_d_capital_gain_distributions"},{"available_by":"assembled","consumer":"with_us_esi_premium_pool_anchor","entity":"household","execution_scope":"whole_pool","fallback":null,"provision":"frame_household_weight","stage":"derive","variable":""},{"available_by":"assembled","consumer":"with_us_esi_premium_pool_anchor","entity":"household","execution_scope":"whole_pool","fallback":null,"provision":"frame_entity_id","stage":"derive","variable":"household_id"},{"available_by":"assembled","consumer":"with_us_esi_premium_pool_anchor","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_resolve_weights_from_household_weight","stage":"derive","variable":""},{"available_by":"assembled","consumer":"with_us_esi_premium_pool_anchor","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembled_raw_asec_source_evidence","stage":"derive","variable":"NOEMP"},{"available_by":"assembled","consumer":"with_us_esi_premium_pool_anchor","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembled_raw_asec_source_evidence","stage":"derive","variable":"NOW_GRPFTYP"},{"available_by":"assembled","consumer":"with_us_esi_premium_pool_anchor","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembled_raw_asec_source_evidence","stage":"derive","variable":"NOW_GRPFTYP2"},{"available_by":"assembled","consumer":"with_us_esi_premium_pool_anchor","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembled_raw_asec_source_evidence","stage":"derive","variable":"NOW_HIPAID"},{"available_by":"assembled","consumer":"with_us_esi_premium_pool_anchor","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembled_raw_asec_source_evidence","stage":"derive","variable":"NOW_OWNGRP"},{"available_by":"assembled","consumer":"with_us_esi_premium_pool_anchor","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembled_raw_asec_source_evidence","stage":"derive","variable":"PEIO1COW"},{"available_by":"assembled","consumer":"with_us_esi_premium_pool_anchor","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembled_raw_asec_source_evidence","stage":"derive","variable":"PEMLR"},{"available_by":"assembled","consumer":"with_us_esi_premium_pool_anchor","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembled_raw_asec_source_evidence","stage":"derive","variable":"PERIDNUM"},{"available_by":"transferred","consumer":"with_us_esi_premium_pool_anchor","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:source_operator_esi_premiums","stage":"derive","variable":"employer_sponsored_insurance_premiums"},{"available_by":"assembled","consumer":"with_us_esi_premium_pool_anchor","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembled_native_person_input","stage":"derive","variable":"employment_income_before_lsr"},{"available_by":"assembled","consumer":"with_us_esi_premium_pool_anchor","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_membership","stage":"derive","variable":"person_household_id"},{"available_by":"assembled","consumer":"with_us_esi_premium_pool_anchor","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembly_support_source_identity","stage":"derive","variable":"person_source_id"},{"available_by":"assembled","consumer":"with_us_esi_premium_pool_anchor","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembly_support_provenance","stage":"derive","variable":"person_support_clone_index"},{"available_by":"assembled","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembled_raw_acs_source_authority","stage":"derive","variable":"SEMP"},{"available_by":"assembled","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembled_native_person_input","stage":"derive","variable":"age"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"business_is_sstb"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"estate_income"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"estate_income_would_be_qualified"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"farm_operations_income_would_be_qualified"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"farm_rent_income_would_be_qualified"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"non_qualified_dividend_income"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"partnership_income"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"partnership_s_corp_income_would_be_qualified"},{"available_by":"assembled","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_entity_id","stage":"derive","variable":"person_id"},{"available_by":"assembled","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":"person_id_for_unstacked_lineage_digest","provision":"assembly_support_source_identity","stage":"derive","variable":"person_source_id"},{"available_by":"assembled","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembly_support_provenance","stage":"derive","variable":"person_support_channel"},{"available_by":"assembled","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembly_support_provenance","stage":"derive","variable":"person_support_clone_index"},{"available_by":"assembled","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_membership","stage":"derive","variable":"person_tax_unit_id"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"qualified_bdc_income"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"qualified_reit_and_ptp_income"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"rental_income_would_be_qualified"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"primary_puf_exact_zero_universe","stage":"derive","variable":"s_corp_income"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:primary_puf_qrf_nontransfer","stage":"derive","variable":"self_employment_income_before_lsr"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"self_employment_income_would_be_qualified"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"sstb_self_employment_income_before_lsr"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"sstb_self_employment_income_would_be_qualified"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"sstb_unadjusted_basis_qualified_property"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"sstb_w2_wages_from_qualified_business"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"unadjusted_basis_qualified_property"},{"available_by":"transferred","consumer":"with_us_qbi_input_reconciliation","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"pool_input_surface:puf_tax_itemization","stage":"derive","variable":"w2_wages_from_qualified_business"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"person","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_basic_health_program_if_eligible"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"person","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_chip_if_eligible"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"person","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_early_head_start_if_eligible"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"person","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_head_start_if_eligible"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"person","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_medicaid_if_eligible"},{"available_by":"transferred","consumer":"seed_multispine_pool_inputs","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"transferred_or_preserved_input","stage":"seed","variable":"takes_up_medicare_if_eligible"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"person","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_ssi_if_eligible"},{"available_by":"transferred","consumer":"seed_multispine_pool_inputs","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"transferred_or_preserved_input","stage":"seed","variable":"takes_up_wic_if_eligible"},{"available_by":"transferred","consumer":"seed_multispine_pool_inputs","entity":"spm_unit","execution_scope":"whole_pool","fallback":null,"provision":"transferred_or_preserved_input","stage":"seed","variable":"takes_up_housing_assistance_if_eligible"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"spm_unit","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_snap_if_eligible"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"spm_unit","execution_scope":"whole_pool","fallback":"sourced_seed_when_input_is_missing","provision":"administrative_seed_or_preserved_input","stage":"seed","variable":"takes_up_tanf_if_eligible"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"tax_unit","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_aca_if_eligible"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"tax_unit","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_ca_premium_subsidy_if_eligible"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"tax_unit","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_co_premium_assistance_if_eligible"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"tax_unit","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_dc_ptc"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"tax_unit","execution_scope":"whole_pool","fallback":"sourced_seed_when_input_is_missing","provision":"administrative_seed_or_preserved_input","stage":"seed","variable":"takes_up_eitc"},{"available_by":"seeded","consumer":"seed_multispine_pool_inputs","entity":"tax_unit","execution_scope":"whole_pool","fallback":"checked_take_up_contract_engine_default","provision":"preserved_input_or_disclosed_engine_default","stage":"seed","variable":"takes_up_nm_premium_assistance_if_eligible"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"family","execution_scope":"whole_pool","fallback":null,"provision":"assembly_support_source_identity","stage":"seed","variable":"family_source_id"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"household","execution_scope":"whole_pool","fallback":null,"provision":"assembly_support_source_identity","stage":"seed","variable":"household_source_id"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"marital_unit","execution_scope":"whole_pool","fallback":null,"provision":"assembly_support_source_identity","stage":"seed","variable":"marital_unit_source_id"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembled_native_person_input","stage":"seed","variable":"age"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembly_support_source_identity","stage":"seed","variable":"person_source_id"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_membership","stage":"seed","variable":"person_spm_unit_id"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_membership","stage":"seed","variable":"person_tax_unit_id"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"person","execution_scope":"whole_pool","fallback":"support_source_id_then_entity_id","provision":"optional_assembled_source_identity","stage":"seed","variable":"source_household_id"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"person","execution_scope":"whole_pool","fallback":"support_source_id_then_entity_id","provision":"optional_assembled_source_identity","stage":"seed","variable":"source_person_id"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"person","execution_scope":"whole_pool","fallback":"support_source_id_then_entity_id","provision":"optional_assembled_source_identity","stage":"seed","variable":"source_year"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"spm_unit","execution_scope":"whole_pool","fallback":null,"provision":"frame_resolve_weights_from_household_weight","stage":"seed","variable":""},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"spm_unit","execution_scope":"whole_pool","fallback":null,"provision":"frame_entity_id","stage":"seed","variable":"spm_unit_id"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"spm_unit","execution_scope":"whole_pool","fallback":null,"provision":"assembly_support_source_identity","stage":"seed","variable":"spm_unit_source_id"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"tax_unit","execution_scope":"whole_pool","fallback":null,"provision":"frame_resolve_weights_from_household_weight","stage":"seed","variable":""},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"tax_unit","execution_scope":"whole_pool","fallback":null,"provision":"frame_entity_id","stage":"seed","variable":"tax_unit_id"},{"available_by":"assembled","consumer":"with_us_take_up_inputs","entity":"tax_unit","execution_scope":"whole_pool","fallback":null,"provision":"assembly_support_source_identity","stage":"seed","variable":"tax_unit_source_id"},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"family","execution_scope":"whole_pool","fallback":null,"provision":"frame_entity_id","stage":"simulate","variable":"family_id"},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"household","execution_scope":"whole_pool","fallback":null,"provision":"frame_household_weight","stage":"simulate","variable":""},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"household","execution_scope":"whole_pool","fallback":null,"provision":"frame_entity_id","stage":"simulate","variable":"household_id"},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"marital_unit","execution_scope":"whole_pool","fallback":null,"provision":"frame_entity_id","stage":"simulate","variable":"marital_unit_id"},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_membership","stage":"simulate","variable":"person_family_id"},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_membership","stage":"simulate","variable":"person_household_id"},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_entity_id","stage":"simulate","variable":"person_id"},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_membership","stage":"simulate","variable":"person_marital_unit_id"},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_membership","stage":"simulate","variable":"person_spm_unit_id"},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"frame_membership","stage":"simulate","variable":"person_tax_unit_id"},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"spm_unit","execution_scope":"whole_pool","fallback":null,"provision":"frame_entity_id","stage":"simulate","variable":"spm_unit_id"},{"available_by":"assembled","consumer":"PolicyEngineUSEngine.materialize","entity":"tax_unit","execution_scope":"whole_pool","fallback":null,"provision":"frame_entity_id","stage":"simulate","variable":"tax_unit_id"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"family","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"frame_structural_engine_input","stage":"simulate","variable":"family_id"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"family","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"family_weight"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ak_ssp_excluded_institutional_setting"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"auto_loan_balance"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"auto_loan_interest"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"average_home_energy_use_in_state"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"bedrooms"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"block_geoid"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"cbo_corporate_income_tax"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"cbo_excise_tax"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"cbsa_code"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"congressional_district_geoid"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"county_fips"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ct_tfa_region"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"current_home_energy_use"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"de_ssp_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_business_assets_debt"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_business_assets_equity"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_business_assets_value"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_count"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"frame_structural_engine_input","stage":"simulate","variable":"household_id"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_income_ami_ratio"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_other_real_estate_debt"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_other_real_estate_equity"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_other_real_estate_value"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_rental_property_debt"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_rental_property_equity"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_rental_property_value"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_vehicles_debt"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_vehicles_equity"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_vehicles_owned"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_vehicles_value"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"household_weight"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_denver"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_wilmington"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_yonkers"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_homeless"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_public_housing"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_non_english_speaking_home"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_on_tribal_land"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_rural"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_shared_living"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_sro"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"living_arrangements_allow_for_food_preparation"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ma_state_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"net_worth"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_drive_clean_purchased_qualifying_vehicle"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_drive_clean_vehicle_cost"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_drive_clean_vehicle_electric_range"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"parent_has_less_than_high_school_education"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"place_fips"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_for_null","provision":"preserved_stacked_engine_input","stage":"simulate","variable":"puma"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"qualified_passenger_vehicle_loan_interest"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"sldl"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"sldu"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"preserved_stacked_engine_input","stage":"simulate","variable":"state_fips"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tenant_pays_utilities"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"assembled_native_engine_input","stage":"simulate","variable":"tenure_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tract_geoid"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"vtd"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"zcta"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"household","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"zip_code"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"marital_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"frame_structural_engine_input","stage":"simulate","variable":"marital_unit_id"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"able_contributions_person"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"adopted_this_year"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"after_school_expenses"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"assembled_native_engine_input","stage":"simulate","variable":"age"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ak_ccap_care_schedule"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ak_ccap_charged_rate"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ak_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ak_resides_in_assisted_living_home"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_ccsp_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_ccsp_quality_tier"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_level_b_care"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_meets_snf_criteria"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_receives_elderly_disabled_medicaid_waiver"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_ssp_care_setting"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_ssp_grandfathered"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_ssp_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_ui_base_period_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_ui_high_quarter_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_ui_quarters_with_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_ui_second_high_quarter_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_ui_weekly_earnings"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"alimony_expense"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"alimony_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ambulance_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"american_opportunity_credit_claimed_prior_years"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"amt_foreign_tax_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ar_sra_care_type"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"attends_eligible_educational_institution_for_american_opportunity_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"attends_eligible_educational_institution_for_lifetime_learning_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"az_530a_distribution"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"az_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"az_ccap_quality_enhanced_provider"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default","provision":"declared_deferred_null_input","stage":"simulate","variable":"bank_account_assets"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default","provision":"declared_deferred_null_input","stage":"simulate","variable":"bond_assets"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"business_is_qualified"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"business_is_sstb"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_calworks_child_care_factor_category"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_calworks_child_care_provider_category"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_calworks_child_care_time_category"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_calworks_child_care_welfare_to_work"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_cvrp_vehicle_rebate_amount"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_in_home_supportive_services"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_in_medical_care_facility"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_state_disability_insurance"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"care_and_support_costs"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"care_and_support_payments_from_tax_filer"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"casualty_loss"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"charitable_cash_donations"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"charitable_non_cash_donations"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"charitable_non_cash_donations_non_50_pct_orgs"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"child_support_expense"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"child_support_received"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"childcare_attending_days_per_month"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"childcare_days_per_week"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"childcare_hours_per_day"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"childcare_provider_type_group"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"claimed_as_dependent_on_another_return"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"claimed_ma_covid_19_essential_employee_premium_pay_program_2020"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"co_care_worker_credit_eligible_care_worker"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"co_denver_employee_occupational_privilege_tax_months"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"co_glendale_employee_occupational_privilege_tax_months"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"co_greenwood_village_employee_occupational_privilege_tax_months"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"co_quality_rating_of_child_care_facility"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"co_sheridan_employee_occupational_privilege_tax_months"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"cost_of_attending_college"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"count_529_contribution_beneficiaries"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"cps_race"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"csrs_retirement_pay"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ct_c4k_provider_accredited"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ct_c4k_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ct_ssp_has_therapeutic_diet"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ct_ssp_lives_with_others"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ct_ssp_resides_in_boarding_home"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"current_pregnancy_month"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"dc_ccsp_childcare_provider_category"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"dc_ccsp_schedule_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"dc_ossp_facility_size"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"dc_ossp_in_adult_foster_care"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"de_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"de_poc_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"de_wilmington_nonresident_earnings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"debt_relief"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"dependent_care_employer_benefits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"detailed_industry_recode"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"detailed_occupation_recode"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"disability_benefits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"divorce_year"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e00700"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e01100"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e01200"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e02000"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e03220"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e03230"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e03240"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e03270"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e03290"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e03300"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e03400"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e03500"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e07240"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e07260"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e07300"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e09700"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e09800"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e09900"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e11200"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e18500"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e19200"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e19800"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e20100"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e20400"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e24515"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e24518"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e26270"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e27200"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e32800"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e58990"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e62900"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e87521"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"e87530"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"early_withdrawal_penalty"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"educational_assistance"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"educator_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_contribution_to_health_insurance_premiums_category"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_headcount"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_ny_mctmt_zone_1_quarterly_payroll_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_ny_mctmt_zone_2_quarterly_payroll_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_quarterly_payroll_expense_override"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"employer_sponsored_insurance_premiums"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_state_unemployment_tax_rate_override"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_co_denver_occupational_privilege_tax_employee_months"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_co_denver_occupational_privilege_tax_owner_months"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_co_glendale_occupational_privilege_tax_employee_months"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_co_glendale_occupational_privilege_tax_owner_months"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_co_greenwood_village_occupational_privilege_tax_employee_months"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_co_greenwood_village_occupational_privilege_tax_owner_months"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_co_sheridan_occupational_privilege_tax_employee_months"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_mo_st_louis_payroll_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_or_lane_transit_district_taxable_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_or_trimet_taxable_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_payroll_tax_gross_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_taxable_earnings_for_federal_unemployment_tax"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_taxable_earnings_for_social_security"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_taxable_earnings_for_state_unemployment_tax"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_wa_seattle_payroll_expense_current_year_total"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_wa_seattle_payroll_expense_lower_band_taxable_payroll"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_wa_seattle_payroll_expense_prior_year_total"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_wa_seattle_payroll_expense_upper_band_taxable_payroll"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"employer_total_wa_seattle_social_housing_excess_compensation"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"employment_income_before_lsr"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"er_visit_expense"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"estate_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"estate_income_would_be_qualified"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"excess_withheld_payroll_tax"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"farm_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"farm_operations_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"farm_operations_income_would_be_qualified"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"farm_rent_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"farm_rent_income_would_be_qualified"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"financial_assistance"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"fl_oss_community_care_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"fl_oss_program_track"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"fl_sr_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"four_year_college_student"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"fsla_overtime_premium"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ga_caps_care_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ga_caps_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ga_caps_quality_rating"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ga_ssp_in_nursing_home_or_institutionalized_hospice"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"gambling_losses"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"gambling_winnings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"general_assistance"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"general_business_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"gi_cash_assistance"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"has_american_opportunity_credit_1098_t_or_exception"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"has_american_opportunity_credit_institution_ein"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_applied_for_unemployment_compensation"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_bcc_qualifying_coverage"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"has_champva_health_coverage_at_interview"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_chip_health_coverage_at_interview"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_completed_first_four_years_of_postsecondary_education"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_developmental_delay"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_emergency_medical_condition"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"has_esi"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_felony_drug_conviction"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_health_coverage_other_than_chip"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"has_indian_health_service_coverage_at_interview"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_individualized_education_program"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_lifetime_learning_credit_1098_t_or_exception"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_long_distance_medical_travel_for_medicaid_ce"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"has_marketplace_health_coverage_at_interview"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"has_medicaid_health_coverage_at_interview"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_never_worked"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_no_prior_formal_early_learning"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"has_non_marketplace_direct_purchase_health_coverage_at_interview"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"has_other_means_tested_health_coverage_at_interview"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"has_tricare_health_coverage_at_interview"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"has_va_health_coverage_at_interview"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"health_insurance_premiums"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"health_insurance_premiums_without_medicare_part_b"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"health_savings_account_payroll_contributions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"heating_expense_person"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"hi_ccap_provider_category"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"hi_oss_care_facility_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"home_equity"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"home_is_on_agricultural_land"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"home_mortgage_interest"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"hourly_wage"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"hours_worked_last_week"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ia_cca_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ia_cca_quality_rating"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"id_aabd_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"id_iccp_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_aabd_is_bedfast"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_ccap_base_day_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"illicit_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"imaging_expense"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"immigration_status_str"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_ccdf_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_ccdf_ptq_level"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_out_of_home_care_facility"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_resides_in_licensed_residential_facility"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_resides_in_unlicensed_residential_facility"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"inpatient_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"investment_expenses"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"investment_in_529_plan_indv"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"investment_income_elected_form_4952"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"investment_interest_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_american_indian_or_alaska_native_for_medicaid_ce"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_blind"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_born_outside_us"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_breastfeeding"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_complying_with_tanf_work_requirements"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_computer_scientist"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_deaf"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_deceased"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_disabled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_english_proficient"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_enrolled_at_least_half_time_for_american_opportunity_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_enrolled_in_ccdf"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_enrolled_in_head_start"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_executive_administrative_professional"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_farmer_fisher"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_federal_work_study_participant"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"assembled_native_engine_input","stage":"simulate","variable":"is_female"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_full_time_college_student"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_fully_disabled_service_connected_veteran"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_grandparent_of_filer_or_spouse"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_hispanic"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_hospitalized_for_medicaid_ce"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"assembled_native_engine_input","stage":"simulate","variable":"is_household_head"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_household_spouse"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_adult_residential_care"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_foster_care"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_foster_care_group_home"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_k12_nonpublic_school"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_medicaid_community_engagement_treatment_program"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_medicaid_facility"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_residential_care_facility"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_secondary_school"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_substance_use_treatment_program"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_work_program"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_incapable_of_self_care"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_incarcerated"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_medicaid_1115_mec_adult"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_medicaid_community_engagement_seasonal_worker"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_medically_frail_or_has_special_medical_needs_for_medicaid_ce"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_migratory_child"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_military"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_paid_hourly"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_parent_of_filer_or_spouse"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_part_time_college_student"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_permanently_and_totally_disabled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_permanently_disabled_veteran"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_pregnant"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_pursuing_credential_for_american_opportunity_credit"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"preserved_stacked_engine_input","stage":"simulate","variable":"is_related_to_head_or_spouse"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_runaway_child"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_self_employed"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_separated"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_severely_disabled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_snap_abawd_discretionary_exempt"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_snap_abawd_indian_exempt"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_snap_employment_training_student"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_snap_work_incentive_student"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_snap_work_program_participant"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_snap_work_registration_noncompliant"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_snap_workfare_participant"},{"available_by":"release","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"refuse_null_if_present_no_default","provision":"unprovisioned_source_input","stage":"simulate","variable":"is_spm_independent_minor_role"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_surviving_child_of_disabled_veteran"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_surviving_spouse"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_surviving_spouse_of_disabled_veteran"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_tafdc_related_to_head_or_spouse"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_union_member_or_covered"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_unmarried_partner_of_household_head"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_wccc_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_wic_at_nutritional_risk"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_wic_fully_breastfeeding"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"keogh_distributions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ks_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ky_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ky_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ky_service_credit_months_post_1997"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ky_service_credit_months_pre_1998"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ky_ssp_care_receivers"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ky_ssp_category"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"la_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"la_quality_rating_of_child_care_facility"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"la_receives_blind_exemption"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"lab_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"life_insurance_benefits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"long_term_capital_gains_basis"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"long_term_capital_gains_before_response"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"long_term_capital_gains_on_assets_eligible_for_vt_exclusion"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"long_term_capital_gains_on_collectibles"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"long_term_capital_gains_on_small_business_stock"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"long_term_capital_gains_years_held"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"long_term_health_insurance_premiums"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ma_ccfa_care_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ma_ccfa_is_in_relatives_home_care"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ma_ccfa_schedule_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"major_industry_recode"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"md_ccs_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"md_paa_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"md_paa_pending_federal_benefit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"me_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"me_ssp_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"medicaid_claiming_tax_unit_id"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"medicaid_community_engagement_community_service_hours"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"medicaid_community_engagement_less_than_half_time_education_hours"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"medicaid_community_engagement_six_month_average_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"medicaid_community_engagement_work_program_hours"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"medicaid_tax_dependent_exception_non_custodial_parent"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"medicare_part_b_premiums_reported"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"medicare_quarters_of_coverage"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"meets_ssi_disability_criteria"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mi_ccap_exempt_level"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mi_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mi_ccap_star_rating"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mi_ssp_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"military_basic_pay"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"military_retirement_pay"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"military_retirement_pay_survivors"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"military_service_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"miscellaneous_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mn_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mn_ccap_quality_rating"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mn_msa_has_guardian"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mn_msa_housing_assistance_eligible"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mn_msa_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mn_msa_uses_representative_payee"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mo_ccs_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mo_kansas_city_earnings_tax_taxable_earnings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mo_snc_facility_base_charge"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mo_ssp_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mo_st_louis_earnings_tax_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mo_st_louis_earnings_tax_taxable_earnings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"months_receiving_social_security_disability"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ms_ccpp_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mt_ccap_care_time"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mt_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nd_ccap_provider_qris_step"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nd_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ne_aabd_alternate_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ne_child_care_subsidy_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ne_child_care_subsidy_quality_tier"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ne_school_readiness_credit_child_care_worker_rating"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ne_school_readiness_credit_eligible_worker"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"never_eligible_for_social_security_benefits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nh_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_ccap_grow_nj_kids_rating"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_unemployment_insurance_base_period_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_unemployment_insurance_base_period_weeks"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_unemployment_insurance_qualifying_dependents"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_unemployment_insurance_spouse_employed_when_claim_established"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_unemployment_insurance_weekly_gross_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_unemployment_insurance_weeks_claimed"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_unemployment_insurance_working_less_than_full_time"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nm_ccap_focus_level"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nm_ccap_non_traditional_hours"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nm_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"non_public_school_tuition"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"non_qualified_dividend_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"non_sch_d_capital_gains"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nv_ccdp_provider_star_rating"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nv_ccdp_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_ui_base_period_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_ui_gross_weekly_earnings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_ui_high_quarter_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_ui_quarters_with_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_ui_second_high_quarter_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_ui_weekly_hours_worked"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_yonkers_nonresident_earnings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"offered_aca_disqualifying_esi"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_bonus_depreciation_add_back"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_ccap_has_special_accommodations"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_ccap_is_accredited"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_ccap_non_traditional_hours"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_ccap_owf_transitional"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_ccap_quality_tier"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_educator_expense_deduction_person"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_federal_conformity_deductions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_has_taken_oh_lump_sum_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_homestead_exemption_qualifying_surviving_spouse"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_other_add_backs"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_section_179_expense_add_back"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_uniformed_services_retirement_income_deduction"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ok_ccs_provider_setting"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ok_ccs_star_level"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ok_ui_base_period_taxable_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ok_ui_base_period_total_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ok_ui_gross_weekly_earnings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ok_ui_high_quarter_taxable_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ok_ui_high_quarter_total_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"or_erdc_provider_area"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"or_erdc_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"other_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"other_health_insurance_premiums"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"other_medical_expenses"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"outpatient_expense"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"over_the_counter_health_expenses"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"own_children_in_household"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"p08000"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pa_ccw_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pa_philadelphia_wage_tax_reduced_rate_eligible"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pa_philadelphia_wage_tax_resident"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pa_philadelphia_wage_tax_taxable_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pa_uc_base_year_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pa_uc_credit_weeks"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pa_uc_gross_weekly_earnings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pa_uc_highest_quarter_wages"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"partnership_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"partnership_s_corp_income_would_be_qualified"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"partnership_self_employment_net_earnings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"passive_partnership_s_corp_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pell_grant_countable_assets"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pell_grant_dependent_available_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pell_grant_dependent_other_allowances"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pell_grant_head_allowances"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pell_grant_months_in_school"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pension_survivors"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"person_count"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"frame_structural_engine_input","stage":"simulate","variable":"person_family_id"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"frame_structural_engine_input","stage":"simulate","variable":"person_household_id"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"frame_structural_engine_input","stage":"simulate","variable":"person_marital_unit_id"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"frame_structural_engine_input","stage":"simulate","variable":"person_spm_unit_id"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"frame_structural_engine_input","stage":"simulate","variable":"person_tax_unit_id"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"personal_property"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pfml_benefits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"physician_services_expense"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"pre_subsidy_care_expenses"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"pre_subsidy_rent"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pre_subsidy_transportation_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pre_tax_health_insurance_premiums"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"prescription_expense"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"previous_year_income_available"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"primary_residence_value"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"prior_year_minimum_tax_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"qualified_adoption_assistance_expense"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"qualified_bdc_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"qualified_dividend_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"qualified_reit_and_ptp_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"qualified_tuition_expenses"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"railroad_benefits"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"real_estate_taxes"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"receives_medicaid"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"receives_or_needs_protective_services"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"receives_ssi"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"receives_wic"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"rental_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"rental_income_would_be_qualified"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"retired_from_federal_government"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"retired_from_ky_government"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"retired_on_total_disability"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"retirement_benefits_from_ss_exempt_employment"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ri_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ri_ccap_star_rating"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ri_ccap_step_rating"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"roth_401k_contributions_desired"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"roth_403b_contributions_desired"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"roth_ira_contributions_desired"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"s_corp_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"salt_refund_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"sc_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"sc_ccap_quality_level"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"sc_ccap_registered_quality_level"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"sc_ccap_second_child_discount_rate"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"sc_tuition_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"sc_tuition_credit_eligible"},{"available_by":"derived","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"derived_schedule_d_input","stage":"simulate","variable":"schedule_d_capital_gain_distributions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"sd_cca_provider_type"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"self_employed_pension_contributions_desired"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"self_employment_income_before_lsr"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"self_employment_income_last_year"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"self_employment_income_would_be_qualified"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"short_term_capital_gains"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"social_security_dependents"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"social_security_disability"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"social_security_retirement"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"social_security_survivors"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ss_aime_input"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_lives_in_another_persons_household"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_lives_in_medical_treatment_facility"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_medicaid_pays_majority_of_care"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_others_pay_all_meals"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_qualifying_quarters_earnings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_receives_food_from_others"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_receives_outside_shelter_support"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_receives_shelter_from_others_in_household"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_for_null","provision":"preserved_stacked_engine_input","stage":"simulate","variable":"ssi_reported"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_shelter_support_value"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"ssn_card_type"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"sstb_self_employment_income_before_lsr"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"sstb_self_employment_income_would_be_qualified"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"sstb_unadjusted_basis_qualified_property"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"sstb_w2_wages_from_qualified_business"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"state_or_federal_salary"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default","provision":"declared_deferred_null_input","stage":"simulate","variable":"stock_assets"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"strike_benefits"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"student_loan_interest"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"survivor_benefits"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_basic_health_program_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_chip_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_early_head_start_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_head_start_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_medicaid_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_medicare_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_ssi_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_wic_if_eligible"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_exempt_401k_distributions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_exempt_403b_distributions"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"tax_exempt_interest_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"tax_exempt_ira_distributions"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"tax_exempt_private_pension_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_exempt_public_pension_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_exempt_sep_distributions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_preparation_fees"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_401k_distributions"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_403b_distributions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"taxable_estate_value"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"taxable_federal_pension_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_interest_income"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_ira_distributions"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_private_pension_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"taxable_public_pension_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"taxable_roth_conversions"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_sep_distributions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"technical_institution_student"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tip_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tn_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tn_ccap_qris_tier"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"total_disability_payments"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"traditional_401k_contributions_desired"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"traditional_403b_contributions_desired"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"traditional_ira_contributions_desired"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"treasury_tipped_occupation_code"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tx_ccs_care_schedule"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tx_ccs_provider_rating"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tx_ccs_provider_type"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"unadjusted_basis_qualified_property"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"under_12_months_postpartum"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"under_60_days_postpartum"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"unemployment_compensation"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"unreimbursed_business_employee_expenses"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"urgent_care_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"us_bonds_for_higher_ed"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"us_govt_interest_person"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"use_reported_ssi"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ut_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ut_ui_base_period_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ut_ui_gross_weekly_earnings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ut_ui_high_quarter_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ut_ui_quarters_with_wages"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ut_ui_weekly_hours_worked"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ut_ui_weeks_unemployed"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"va_ccsp_is_full_day"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"va_ccsp_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"va_educator_expenses"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"veterans_benefits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"vt_ccfap_provider_type"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"w2_wages_from_qualified_business"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wa_eceap_slot_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wa_pfml_average_weekly_wage_override"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wa_pfml_leave_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wa_pfml_qualifying_period_hours_worked"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wa_wccc_day_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wa_wccc_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"was_in_foster_care"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"was_recently_incarcerated_for_medicaid_ce"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"weekly_hours_worked_before_lsr"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"weekly_snap_work_program_hours"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"weeks_unemployed"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wi_shares_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wic_breastfeeding_infant_count"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wic_infant_feeding_category"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"worked_last_year"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"workers_compensation"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wv_ccap_non_traditional_hours"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wv_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wv_ccap_quality_tier"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wy_ccap_provider_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"year_deceased"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"year_of_retirement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"years_in_military"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"person","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"years_since_us_entry"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_ccsp_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ar_months_since_tea_exit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ar_was_tea_recipient"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"az_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"bottled_gas_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"broadband_cost"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_riv_share_eligible_for_emergency_payment"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_scc_general_assistance_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_sf_caap_clothing_provided_in_kind"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_sf_caap_food_provided_in_kind"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_sf_caap_housing_provided_in_kind"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_sf_caap_is_recipient"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_sf_caap_utilities_provided_in_kind"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ca_smc_general_assistance_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"co_ccap_is_in_entry_process"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"co_ccap_is_in_re_determination_process"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"coal_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"cooking_fuel_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"dc_ccsp_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"dc_liheap_housing_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"de_poc_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"enrolled_in_ebb"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"experienced_covid_income_loss"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"fdpir"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"fl_sr_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"fuel_oil_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ga_caps_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"gas_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"has_cooling_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"head_start_applies_housing_cost_adjustment"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"head_start_uses_discretionary_income_limit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"heat_expense_included_in_rent"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"heating_cooling_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"heating_expense_last_year"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"heating_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"homeowners_association_fees"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"homeowners_insurance"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"housing_designated_welfare"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ia_cca_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"id_iccp_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_aabd_institutional_status"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_aabd_vehicle_is_essential"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_ccap_non_parent_relative_child_only_tanf"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_ccap_protective_care_override"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_liheap_eligible_for_crisis_assistance"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_in_ccdf_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_nd_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_sd_cca_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_wi_shares_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"la_general_relief_disability_eligible"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"la_general_relief_housing_subsidy_program_eligible"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"la_general_relief_recipient"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ma_ccfa_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ma_eaedc_living_arrangement"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"md_ccs_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"meets_ccdf_activity_test"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"metered_gas_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mi_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mn_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mn_ccap_registration_fee"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mo_ccs_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"months_since_calworks_exit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mortgage_payments"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mt_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ne_child_care_subsidy_at_redetermination"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ne_child_care_subsidy_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nm_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nv_ccdp_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_ccap_owf_basic_assistance"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"other_heating_fuel_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pa_ccw_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pa_ccw_has_stepparent"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"phone_cost"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pre_subsidy_electricity_expense"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"receives_housing_assistance"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"receives_snap"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"receives_tanf"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ri_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"sd_tanf_is_shared_living"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"sewage_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"snap_self_employment_income_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"spm_unit_assets"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"spm_unit_count"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"spm_unit_energy_subsidy"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"frame_structural_engine_input","stage":"simulate","variable":"spm_unit_id"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"spm_unit_net_income_reported"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"spm_unit_pre_subsidy_childcare_expenses"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"spm_unit_school_lunch_subsidy"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"spm_unit_snap"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"assembled_native_engine_input","stage":"simulate","variable":"spm_unit_tenure_type"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"spm_unit_total_income_reported"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_housing_assistance_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_snap_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_tanf_if_eligible"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tn_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tn_ccap_protective_services_waiver"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"trash_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tx_ottanf_crisis_criteria"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"va_ccsp_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wa_show_all_cash_assistance_programs"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"was_calworks_recipient"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"water_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wood_expense"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wy_ccap_enrolled"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"spm_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wy_power_shelter_qualified"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"advanced_main_air_circulating_fan_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"air_sealing_ventilation_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_non_refundable_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"al_refundable_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"amt_form_completed"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"amt_non_agi_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"az_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"az_charitable_contributions_to_qualifying_charitable_organizations"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"az_charitable_contributions_to_qualifying_foster_care_organizations"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"biomass_stove_boiler_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"co_non_refundable_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"co_property_tax_exemption"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"cohabitating_spouses"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ct_amt"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ct_section_179_expense_add_back"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"domestic_production_ald"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"electric_heat_pump_clothes_dryer_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"electric_load_service_center_upgrade_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"electric_stove_cooktop_range_or_oven_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"electric_wiring_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"energy_efficient_central_air_conditioner_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"energy_efficient_door_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"energy_efficient_insulation_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"energy_efficient_roof_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"energy_efficient_window_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"excess_payroll_tax_withheld"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"first_home_mortgage_balance"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"first_home_mortgage_interest"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"first_home_mortgage_origination_year"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"foreign_earned_income_exclusion"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"foreign_tax_credit_potential"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"form_4972_lumpsum_distributions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"fuel_cell_property_capacity"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"fuel_cell_property_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ga_investment_in_529_plan_deduction"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ga_itemized_deductions_adjustment"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"geothermal_heat_pump_property_expenditures"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"health_savings_account_ald"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"heat_pump_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"heat_pump_water_heater_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"home_energy_audit_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"id_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_pass_through_entity_tax_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_pass_through_withholding"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_schedule_m_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"il_schedule_m_subtractions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_bonus_depreciation_add_back"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_healthcare_sharing_deduction"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_nol"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_nol_add_back"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_oos_municipal_obligation_interest_add_back"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_other_add_backs"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_other_deductions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_section_179_expense_add_back"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_tax_add_back"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"in_use_tax"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"investment_income_form_4952"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_barred_from_american_opportunity_credit_due_to_improper_claims"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_nonresident_alien_for_american_opportunity_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"is_nonresident_alien_for_lifetime_learning_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"k12_tuition_and_fees"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ks_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ky_refundable_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"md_total_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"me_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"me_affordability_payment_subtraction_reported"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"me_property_tax_fairness_credit_utilities_in_rent_amount"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"me_step_4_share_of_child_care_expenses"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mi_non_refundable_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mn_renters_credit_property_tax_exempt"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"mn_renters_credit_qualifying_crp"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ms_charitable_contributions_to_qualifying_foster_care_organizations"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ms_refundable_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nc_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nd_refundable_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nd_renters_refund_property_tax_exempt"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ne_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"new_clean_vehicle_battery_capacity"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"new_clean_vehicle_battery_components_made_in_north_america"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"new_clean_vehicle_battery_critical_minerals_extracted_in_trading_partner_country"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"new_clean_vehicle_classification"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"new_clean_vehicle_msrp"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nh_refundable_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_non_refundable_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nj_senior_freeze"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nm_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nm_non_refundable_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_qualified_geothermal_energy_system_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ny_qualified_solar_energy_systems_equipment_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"nyc_unincorporated_business_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"oh_refundable_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ok_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ok_adjustments"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"or_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"or_federal_pension_subtraction"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"or_tax_before_credits_in_prior_year"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"other_net_gain"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"pell_grant_primary_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"prior_energy_efficient_home_improvement_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"prior_energy_efficient_window_credits"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"property_sales_net_capital_gain"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"puerto_rico_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"purchased_qualifying_new_clean_vehicle"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"purchased_qualifying_used_clean_vehicle"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"qualified_battery_storage_technology_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"qualified_furnace_or_hot_water_boiler_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"qualified_retirement_penalty"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"recapture_of_investment_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"refundable_payroll_tax_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"rent_is_shared_with_another_tax_unit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"residential_efficiency_electrification_retrofit_energy_savings"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"residential_efficiency_electrification_retrofit_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ri_section_179_expense_add_back"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"salt_refund_last_year"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"second_home_mortgage_balance"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"second_home_mortgage_interest"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"second_home_mortgage_origination_year"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"selected_marketplace_plan_benchmark_ratio"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"selected_marketplace_plan_category"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"separate_filer_itemizes"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"small_wind_energy_property_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"solar_electric_property_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"solar_water_heating_property_expenditures"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"specified_possession_income"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_aca_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_ca_premium_subsidy_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_co_premium_assistance_if_eligible"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_dc_ptc"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_eitc"},{"available_by":"seeded","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_nm_premium_assistance_if_eligible"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_unit_count"},{"available_by":"assembled","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"frame_structural_engine_input","stage":"simulate","variable":"tax_unit_id"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_unit_income_ami_ratio"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_unit_stillborn_children"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"taxsim_pprofinc"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"taxsim_sprofinc"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"tuition_and_fees"},{"available_by":"transferred","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"ephemeral_simulation_projection_engine_default_if_present_null","provision":"materialized_pool_input_surface","stage":"simulate","variable":"unrecaptured_section_1250_gain"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"unreported_payroll_tax"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"used_clean_vehicle_sale_price"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"ut_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"utilities_included_in_rent"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"va_additions"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wa_pte_cotenant_disposable_income"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"would_file_if_eligible_for_refundable_credit"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"would_file_taxes_voluntarily"},{"available_by":"simulate","consumer":"_simulation_projection","entity":"tax_unit","execution_scope":"disposable_simulation_copy","fallback":"policyengine_default_if_absent","provision":"declared_absent_engine_input","stage":"simulate","variable":"wv_additions"},{"available_by":"assembled","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"assembled_native_person_input","stage":"simulate","variable":"age"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"alimony_income"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"ephemeral_simulation_projection_engine_default","provision":"declared_deferred_null_input","stage":"simulate","variable":"bank_account_assets"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"ephemeral_simulation_projection_engine_default","provision":"declared_deferred_null_input","stage":"simulate","variable":"bond_assets"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"child_support_received"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"disability_benefits"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"employment_income_before_lsr"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"financial_assistance"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"gi_cash_assistance"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"immigration_status_str"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_blind"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_full_time_college_student"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"is_separated"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"keogh_distributions"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"meets_ssi_disability_criteria"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"non_qualified_dividend_income"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"own_children_in_household"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"qualified_dividend_income"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"rental_income"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"self_employment_income_before_lsr"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"social_security_dependents"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"social_security_disability"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"social_security_retirement"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"social_security_survivors"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_lives_in_another_persons_household"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_lives_in_medical_treatment_facility"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_medicaid_pays_majority_of_care"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_others_pay_all_meals"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_qualifying_quarters_earnings"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_receives_food_from_others"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_receives_outside_shelter_support"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_receives_shelter_from_others_in_household"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"ssi_shelter_support_value"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"sstb_self_employment_income_before_lsr"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"ephemeral_simulation_projection_engine_default","provision":"declared_deferred_null_input","stage":"simulate","variable":"stock_assets"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"survivor_benefits"},{"available_by":"seeded","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"seed_receipted_value_or_disclosed_engine_default","provision":"seed_stage_program_contract","stage":"simulate","variable":"takes_up_ssi_if_eligible"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_exempt_401k_distributions"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_exempt_403b_distributions"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"tax_exempt_interest_income"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"tax_exempt_ira_distributions"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"tax_exempt_private_pension_income"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_exempt_public_pension_income"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"tax_exempt_sep_distributions"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_401k_distributions"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_403b_distributions"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_interest_income"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_ira_distributions"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_private_pension_income"},{"available_by":"simulate","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":"policyengine_default_for_absent_input","provision":"declared_absent_engine_input","stage":"simulate","variable":"taxable_public_pension_income"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"taxable_sep_distributions"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"unemployment_compensation"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"veterans_benefits"},{"available_by":"transferred","consumer":"ssi_static_dependency_closure","entity":"person","execution_scope":"whole_pool","fallback":null,"provision":"materialized_pool_input_surface","stage":"simulate","variable":"workers_compensation"}]}} diff --git a/packages/microcosm-build/src/microcosm/build/us/spec/battery.yaml b/packages/microcosm-build/src/microcosm/build/us/spec/battery.yaml index ecfe34a68a..91106aa915 100644 --- a/packages/microcosm-build/src/microcosm/build/us/spec/battery.yaml +++ b/packages/microcosm-build/src/microcosm/build/us/spec/battery.yaml @@ -556,6 +556,11 @@ metric_registry: column: is_pursuing_credential_for_american_opportunity_credit clone_index: 0 metric: boolean_incidence +- entity: person + family: source_operator_esi_premiums + column: employer_sponsored_insurance_premiums + clone_index: 0 + metric: monetary_sign_separated - entity: person family: source_operator_hours_worked column: weekly_hours_worked_before_lsr diff --git a/packages/microcosm-build/src/microcosm/build/us/spec/catalogs.yaml b/packages/microcosm-build/src/microcosm/build/us/spec/catalogs.yaml index 9d7b293817..e4d3422e6c 100644 --- a/packages/microcosm-build/src/microcosm/build/us/spec/catalogs.yaml +++ b/packages/microcosm-build/src/microcosm/build/us/spec/catalogs.yaml @@ -320,6 +320,17 @@ columns: domain: puf_tax_itemization public_stability: internal unit_waiver: policyengine_us_unit_unavailable +- key: person.employer_sponsored_insurance_premiums + contract: + entity: person + dtype: float64 + unit: unit_not_declared_by_engine_metadata + definition_period: year + vintage: vintage:target_2024 + nullable: false + domain: source_operator_esi_premiums + public_stability: internal + unit_waiver: policyengine_us_unit_unavailable - key: person.employment_income_before_lsr contract: entity: person diff --git a/packages/microcosm-build/src/microcosm/build/us/spec/imputation.yaml b/packages/microcosm-build/src/microcosm/build/us/spec/imputation.yaml index 7676bdc8fe..4b505e7816 100644 --- a/packages/microcosm-build/src/microcosm/build/us/spec/imputation.yaml +++ b/packages/microcosm-build/src/microcosm/build/us/spec/imputation.yaml @@ -1162,6 +1162,39 @@ families: order_index: 3 execution_scope: cps_source stage: prepare_multispine_source_inputs_for_clone +- id: early/asec_survey_to_acs/person/source_operator_esi_premiums + stage: gap_fill_stacked_spine + entities: + - person + direction: asec_survey_to_acs + donor: + channel: asec + donor_contract: + spine: asec_puf + selection: all_rows_in_declared_donor_channel + recipient: + channel: acs + recipient_contract: + selection: all_rows_in_declared_recipient_channel + model: regime_gated_qrf + predictors: + - acs_person_required + - acs_person_optional_income + - acs_person_optional_structure + max_targets_per_fit: 8 + execution_contract: acs_transfer_early + targets: + - name: employer_sponsored_insurance_premiums + entity: person + value_kind: amount + dtype: float + period: year + requires_concepts: [] + producer_binding: + operator: with_us_esi_premium_inputs + order_index: 6 + execution_scope: cps_source + stage: prepare_multispine_source_inputs_for_clone - id: early/asec_survey_to_acs/spm_unit/benefit_participation stage: gap_fill_stacked_spine entities: diff --git a/packages/microcosm-build/src/microcosm/build/us/spec/spine.yaml b/packages/microcosm-build/src/microcosm/build/us/spec/spine.yaml index 1ffcd46431..3169092735 100644 --- a/packages/microcosm-build/src/microcosm/build/us/spec/spine.yaml +++ b/packages/microcosm-build/src/microcosm/build/us/spec/spine.yaml @@ -24,6 +24,7 @@ pipeline_contract: - with_us_relationship_inputs - with_us_housing_inputs - with_us_eligibility_inputs + - with_us_esi_premium_inputs post_clone_source_operator_order: - with_us_prior_year_income_inputs - with_us_medicare_take_up_input @@ -43,6 +44,7 @@ pipeline_contract: - with_us_education_inputs derive_operator_order: - _complete_schedule_d_input + - with_us_esi_premium_pool_anchor - with_us_qbi_input_reconciliation auxiliary_operations: - calibrate diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/acs_local_esi_premiums.py b/packages/microcosm-build/src/microcosm/build/us_runtime/acs_local_esi_premiums.py new file mode 100644 index 0000000000..7782fb5481 --- /dev/null +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/acs_local_esi_premiums.py @@ -0,0 +1,468 @@ +"""Employer premiums on the ACS spine of the retained ACS local lane (#454). + +The lane's staging frame pools a dense ASEC-by-PUF donor release with the ACS +spine (:func:`~.base_pool.with_optional_acs_spine`). The donor carries +``employer_sponsored_insurance_premiums`` from the ``meps_esi_premiums`` stage. +ACS has no policyholder flag, payment status, coverage tier or firm size, so +the stage cannot run on its rows, and the declared ACS transfer plan does not +name the column. Three steps put it on every row, on the stage's scale: + +1. **Qualify the donor** (:func:`prepare_acs_local_esi_premium_donor`). The + donor must carry the column and the raw ASEC fields the stage read, and + pass the stage's own signal gate. The transfer then fits on its ASEC + observation role only (support clone 0), whose wages are the measured CPS + wages. The lane's other transfers fit on the PUF-detail role, whose wages + are PUF-imputed while its premium is a copy of the source person's: on + those rows the premium no longer follows the wage predictor. +2. **Transfer** the column onto the ACS rows with the lane's own one-family + plan (:func:`acs_local_esi_premium_transfer_target_families`). The declared + ACS plan and the stacked pool's plan are untouched. +3. **Anchor** the pooled frame (:func:`with_acs_local_esi_premium_anchor`) + with the stacked pool's kernel, + :func:`~.esi_premiums.with_us_esi_premium_pool_anchor`: it clears the + premium where the ACS person reports zero wages and scales the rest so both + spines carry the same weighted premium per unit of household mass. The + donor rows are never rewritten. + +The kernel tells the two kinds of row apart by the CPS record id +(``PERIDNUM``) and the raw ASEC fields, which the donor rows carry and the ACS +rows do not. It refuses a transferred row whose wage is missing. ACS PUMS +leaves ``WAGP`` blank below age 15, outside its earnings universe, and the +lane keeps that blank in the staging frame. The anchor therefore reads those +people's wages as zero under the named universe rule of +:mod:`.acs_income_universe`, in its view of the frame only. A blank wage at +age 15 or older stays missing and is refused. + +Invariant: the lane-wide weighted column equals the donor rows' weighted +column divided by their share of household mass. Pooling multiplies every +donor household weight by that share, so the lane-wide column is the donor +release's own. + +The kernel and both gates read a handful of columns, but the kernel copies +every table it is given and each gate copies the person table. This module +hands them a narrow view of the pooled frame: the staging frame holds two full +spines, and the lane's memory budget has no room for further copies of them. +""" + +from __future__ import annotations + +import math +from collections.abc import Mapping +from typing import Any + +import numpy as np +import pandas as pd + +from microcosm.build.gates import GateResult +from microcosm.build.source_runtime import SourceRuntimeError +from microcosm.build.us_runtime.acs_income_universe import ( + ACS_PUMS_EARNINGS_MINIMUM_AGE, + ACS_PUMS_EARNINGS_SOURCE_COLUMNS, +) +from microcosm.build.us_runtime.acs_transfer import ( + TargetFamilies, + resolve_acs_donor_channel, +) +from microcosm.build.us_runtime.esi_premiums import ( + US_ESI_EMPLOYER_PREMIUM_COLUMN, + US_ESI_PREMIUMS_OUTPUT_COLUMNS, + US_ESI_PREMIUMS_POOL_ANCHOR_PERSON_INPUTS, + US_ESI_PREMIUMS_REQUIRED_SOURCE_COLUMNS, + US_ESI_PREMIUMS_WAGE_COLUMN, + us_esi_premiums_anchor_gate, + us_esi_premiums_signal_gate, + with_us_esi_premium_pool_anchor, +) +from microcosm.build.us_runtime.support_provenance import ( + BASE_ASEC_SUPPORT_CHANNEL, + has_assembled_support_metadata, + has_support_role_metadata, + support_clone_index_column, + support_source_id_column, +) +from microcosm.frame import Frame +from microcosm.frame.units import US_SCHEMA + +__all__ = [ + "ACS_LOCAL_ESI_PREMIUM_FAMILY", + "acs_local_esi_premium_gate_payload", + "acs_local_esi_premium_gates", + "acs_local_esi_premium_transfer_target_families", + "prepare_acs_local_esi_premium_donor", + "with_acs_local_esi_premium_anchor", +] + +#: The stacked pool files the same column under the same family name +#: (``multispine_pool.pool_transfer_target_families``). +ACS_LOCAL_ESI_PREMIUM_FAMILY = "source_operator_esi_premiums" + +_PERSON = US_SCHEMA.person_entity +_STATE_COLUMN = "state_fips" +#: Raw ASEC person fields whose presence marks a row the stage derived itself. +_RAW_EVIDENCE_COLUMNS: tuple[str, ...] = tuple( + column + for column in US_ESI_PREMIUMS_REQUIRED_SOURCE_COLUMNS + if column != _STATE_COLUMN +) +#: The CPS record id. The kernel requires it beside the raw fields on every +#: row the stage derived, and blank on every transferred row. +_CPS_RECORD_ID_COLUMN = "PERIDNUM" +_CLONE_INDEX_COLUMN = support_clone_index_column(_PERSON) +_SOURCE_ID_COLUMN = support_source_id_column(_PERSON) +_AGE_COLUMN = "age" +#: The raw PUMS field the ACS wage is mapped from, and the named rule that +#: makes its blank a zero: the field applies to people aged 15 and older. +_ACS_WAGE_SOURCE_COLUMN = ACS_PUMS_EARNINGS_SOURCE_COLUMNS[US_ESI_PREMIUMS_WAGE_COLUMN] +_ACS_WAGE_UNIVERSE_RULE = ( + f"acs_2024_pums_{_ACS_WAGE_SOURCE_COLUMN.lower()}" + f"_age_{ACS_PUMS_EARNINGS_MINIMUM_AGE}_plus" +) +#: Person columns the pool anchor kernel reads, without the two support +#: provenance columns. The kernel looks a clone's wages up by +#: ``person_source_id`` across the whole frame. A stacked pool makes that id +#: unique at assembly; this lane does not: ACS rows keep their pre-remap ids +#: as source ids, which can repeat a donor's. Every ACS row here is its own +#: source record, so the view omits the lookup's columns and the kernel reads +#: each row's own wages. +_ANCHOR_PERSON_COLUMNS: tuple[str, ...] = ( + *US_ESI_PREMIUMS_OUTPUT_COLUMNS, + *( + column + for column in US_ESI_PREMIUMS_POOL_ANCHOR_PERSON_INPUTS + if column not in (_CLONE_INDEX_COLUMN, _SOURCE_ID_COLUMN) + ), +) +#: Person columns the two ESI gates read: the output, the raw fields and +#: State the cells are recomputed from, the record id that settles each +#: row's kind, wages and support provenance for the transferred-row summary, +#: and the stable source identity the donor's clones are compared by. +_GATE_PERSON_COLUMNS: tuple[str, ...] = tuple( + dict.fromkeys( + ( + *US_ESI_PREMIUMS_OUTPUT_COLUMNS, + *US_ESI_PREMIUMS_REQUIRED_SOURCE_COLUMNS, + *US_ESI_PREMIUMS_POOL_ANCHOR_PERSON_INPUTS, + "source_year", + "source_household_id", + "source_person_id", + ) + ) +) +_GATE_HOUSEHOLD_COLUMNS: tuple[str, ...] = (_STATE_COLUMN,) + + +def acs_local_esi_premium_transfer_target_families() -> TargetFamilies: + """The lane's separate ASEC-only pass for the employer premium.""" + + return {_PERSON: {ACS_LOCAL_ESI_PREMIUM_FAMILY: US_ESI_PREMIUMS_OUTPUT_COLUMNS}} + + +def _narrow_view( + frame: Frame, + *, + person_columns: tuple[str, ...], + household_columns: tuple[str, ...] = (), + person_values: Mapping[str, np.ndarray] | None = None, +) -> Frame: + """The frame's structure and weights with only the named value columns. + + ``person_values`` replaces a person column in the view; the frame's own + column is not touched. + """ + + schema = frame.schema + tables: dict[str, pd.DataFrame] = {} + for entity in frame.entities: + table = frame.table(entity) + if entity == schema.person_entity: + keep = [ + schema.entity_id_column(entity), + *(schema.membership_column(group) for group in schema.group_entities), + *person_columns, + ] + else: + keep = [schema.entity_id_column(entity)] + if entity == "household": + keep.extend(household_columns) + present = list(dict.fromkeys(column for column in keep if column in table)) + tables[entity] = table.loc[:, present] + if person_values: + person = tables[schema.person_entity].copy(deep=False) + for column, values in person_values.items(): + person[column] = values + tables[schema.person_entity] = person + return Frame( + tables, + schema, + {entity: frame.weights_for(entity) for entity in frame.weighted_entities}, + frame.strata, + mass_log=frame.mass_log, + metadata=frame.metadata, + ) + + +def prepare_acs_local_esi_premium_donor( + frame: Frame, +) -> tuple[Frame, dict[str, object]]: + """Qualify the dense donor and select the rows the lane's transfer fits on. + + Refuses a donor that lacks the stage's output or the raw ASEC fields it + read, that fails the stage's signal gate, or whose support roles cannot be + told apart. Returns the ASEC observation role (support clone 0) and a + receipt. The donor frame itself is not changed. + """ + + if frame.schema != US_SCHEMA: + raise ValueError("Local ESI premium donor requires the US schema.") + person = frame.table(_PERSON) + missing = [ + column + for column in (*US_ESI_PREMIUMS_OUTPUT_COLUMNS, *_RAW_EVIDENCE_COLUMNS) + if column not in person + ] + if missing: + raise ValueError( + f"Local ESI premium donor lacks {missing}: the donor release was " + "built without the meps_esi_premiums stage (microcosm#454). The " + "lane transfers the employer premium from a donor that carries it " + "and never defaults it." + ) + if _CPS_RECORD_ID_COLUMN not in person: + raise ValueError( + f"Local ESI premium donor lacks {_CPS_RECORD_ID_COLUMN!r}, the CPS " + "record id that marks its rows as the ones the stage derived. " + "Without it the pooled frame cannot tell them from the ACS rows." + ) + if US_ESI_PREMIUMS_WAGE_COLUMN not in person: + raise ValueError( + f"Local ESI premium donor lacks {US_ESI_PREMIUMS_WAGE_COLUMN!r}, the " + "wage the transfer conditions the premium on." + ) + if not has_support_role_metadata( + person, entity=_PERSON + ) or has_assembled_support_metadata(person, entity=_PERSON): + raise ValueError( + "Local ESI premium donor requires explicit legacy ASEC observation " + "roles; unclassified or multispine records need their own source " + "lineage." + ) + gate = us_esi_premiums_signal_gate( + _narrow_view( + frame, + person_columns=_GATE_PERSON_COLUMNS, + household_columns=_GATE_HOUSEHOLD_COLUMNS, + ) + ) + if not gate.passed: + raise ValueError( + "Local ESI premium donor fails the meps_esi_premiums signal gate: " + + "; ".join(gate.failures) + ) + donor, role = resolve_acs_donor_channel(frame, BASE_ASEC_SUPPORT_CHANNEL) + donor_person = donor.table(_PERSON) + employer = donor_person[US_ESI_EMPLOYER_PREMIUM_COLUMN].to_numpy(dtype=np.float64) + wages = pd.to_numeric( + donor_person[US_ESI_PREMIUMS_WAGE_COLUMN], errors="coerce" + ).to_numpy(dtype=np.float64, na_value=np.nan) + if not np.isfinite(wages).all(): + raise ValueError( + "Local ESI premium donor has ASEC observations with no " + f"{US_ESI_PREMIUMS_WAGE_COLUMN!r}; the transfer never treats a " + "missing wage as zero." + ) + weights = np.asarray(frame.resolve_weights(_PERSON).values, dtype=np.float64) + donor_weights = np.asarray(donor.resolve_weights(_PERSON).values, dtype=np.float64) + positive = employer > 0 + return donor, { + "producer": "meps_esi_premiums", + "donor_channel": role, + "donor_wage_column": US_ESI_PREMIUMS_WAGE_COLUMN, + "donor_wage_basis": "measured CPS ASEC wages of the observation role", + "donor_rows": int(frame.n(_PERSON)), + "asec_observation_rows": int(donor.n(_PERSON)), + "donor_employer_premium_total": float( + weights @ person[US_ESI_EMPLOYER_PREMIUM_COLUMN].to_numpy(dtype=np.float64) + ), + "asec_observation_positive_share": ( + float(donor_weights[positive].sum() / donor_weights.sum()) + if donor_weights.sum() + else 0.0 + ), + # The structural zero the transfer has to learn: how much of the + # observation role's premium mass sits on people with no measured + # wages (employed at interview, no wages in the income year). + "asec_observation_premium_share_without_wages": ( + float( + donor_weights[positive & ~(wages > 0)] + @ employer[positive & ~(wages > 0)] + ) + / float(donor_weights @ employer) + if float(donor_weights @ employer) + else 0.0 + ), + "donor_signal_gate": {"passed": True, "failures": []}, + } + + +def _wages_under_the_acs_universe( + person: pd.DataFrame, +) -> tuple[np.ndarray, dict[str, object]]: + """Wages for the anchor's view, with ACS universe blanks read as zero. + + ACS PUMS leaves ``WAGP`` blank for people below age 15: the field does + not apply to them. The lane keeps that blank in the staging frame, and the + anchor refuses a missing wage. Only a transferred row below the age floor + whose mapped wage is null, and whose raw field is blank where the frame + carries it, takes a zero here. Any other missing wage stays missing. + """ + + wages = pd.to_numeric( + person[US_ESI_PREMIUMS_WAGE_COLUMN], errors="coerce" + ).to_numpy(dtype=np.float64, na_value=np.nan) + transferred = person[list(_RAW_EVIDENCE_COLUMNS)].isna().all(axis=1).to_numpy() + blank = transferred & np.isnan(wages) + outside = np.zeros(len(person), dtype=bool) + if blank.any() and _AGE_COLUMN in person: + age = pd.to_numeric(person[_AGE_COLUMN], errors="coerce").to_numpy( + dtype=np.float64, na_value=np.nan + ) + outside = blank & (age < ACS_PUMS_EARNINGS_MINIMUM_AGE) + if _ACS_WAGE_SOURCE_COLUMN in person: + outside &= person[_ACS_WAGE_SOURCE_COLUMN].isna().to_numpy() + wages = np.where(outside, 0.0, wages) + return wages, { + "rule_id": _ACS_WAGE_UNIVERSE_RULE, + "minimum_age": ACS_PUMS_EARNINGS_MINIMUM_AGE, + "raw_source_column": _ACS_WAGE_SOURCE_COLUMN, + "transferred_rows_with_blank_wage": int(blank.sum()), + "transferred_rows_outside_universe_read_as_zero": int(outside.sum()), + # The staging frame keeps the source's blanks; the zeros exist in the + # anchor's view only. + "frame_cells_written": 0, + } + + +def with_acs_local_esi_premium_anchor(frame: Frame) -> tuple[Frame, dict[str, object]]: + """Hold the pooled lane frame's transferred premiums to the donor's scale. + + Runs :func:`~.esi_premiums.with_us_esi_premium_pool_anchor` on a narrow + view of ``frame`` and writes the anchored column back. Rows with the raw + ASEC fields (the donor spine) are never rewritten. On the other rows the + premium is cleared where the person reports zero wages and the rest is + scaled by one factor, so both spines carry the same weighted premium per + unit of household mass. A blank ACS wage below age 15 is a zero wage + (:func:`_wages_under_the_acs_universe`); any other missing wage is + refused. A frame already on that scale, or with no transferred row, is + returned unchanged. Returns the frame and the kernel's receipt. + """ + + if frame.schema != US_SCHEMA: + raise ValueError("Local ESI premium anchor requires the US schema.") + person = frame.table(_PERSON) + absent = [column for column in _ANCHOR_PERSON_COLUMNS if column not in person] + if absent: + raise SourceRuntimeError( + f"Local ESI premium anchor: the person table lacks {absent}; it " + "needs the transferred premium on every row, the raw ASEC fields " + "that mark the donor rows and the wages that place the structural " + "zeros." + ) + if _CLONE_INDEX_COLUMN in person: + transferred = person[list(_RAW_EVIDENCE_COLUMNS)].isna().all(axis=1) + clone_index = pd.to_numeric(person[_CLONE_INDEX_COLUMN], errors="coerce") + clones = transferred & ~clone_index.eq(0) + if clones.any(): + raise SourceRuntimeError( + f"Local ESI premium anchor: {int(clones.sum())} row(s) without " + "raw ASEC fields are not clone-0 source records. The lane reads " + "each transferred person's own wages; support clones of " + "transferred rows need the stacked pool's source-record lookup." + ) + wages, wage_universe = _wages_under_the_acs_universe(person) + view = _narrow_view( + frame, + person_columns=_ANCHOR_PERSON_COLUMNS, + person_values={US_ESI_PREMIUMS_WAGE_COLUMN: wages}, + ) + anchored, receipt = with_us_esi_premium_pool_anchor(view) + receipt = dict(receipt) | { + "kernel": "with_us_esi_premium_pool_anchor", + "transferred_source_record": "each transferred row is its own source record", + "wage_universe": wage_universe, + } + if anchored is view: + return frame, receipt + id_column = US_SCHEMA.entity_id_column(_PERSON) + anchored_person = anchored.table(_PERSON) + if not np.array_equal( + anchored_person[id_column].to_numpy(), person[id_column].to_numpy() + ): + raise SourceRuntimeError( + "Local ESI premium anchor: the kernel reordered the person table." + ) + tables = { + entity: (person.copy(deep=False) if entity == _PERSON else frame.table(entity)) + for entity in frame.entities + } + tables.update({name: frame.link(name) for name in frame.links}) + for column in US_ESI_PREMIUMS_OUTPUT_COLUMNS: + tables[_PERSON][column] = anchored_person[column].to_numpy(dtype=np.float64) + result = Frame( + tables, + frame.schema, + {entity: frame.weights_for(entity) for entity in frame.weighted_entities}, + frame.strata, + mass_log=frame.mass_log, + metadata=frame.metadata, + ) + return result, receipt + + +def acs_local_esi_premium_gates( + frame: Frame, *, time_period: int +) -> tuple[GateResult, GateResult]: + """Both ESI premium gates on a lane frame: ``(signal, anchor)``. + + The gates grade a pooled frame by row kind: the donor rows, which carry + the raw ASEC fields, get the full MEPS-IC recomputation, and the ACS rows + are compared with them. They run on a narrow view; the verdicts are those + of the full frame. + """ + + view = _narrow_view( + frame, + person_columns=_GATE_PERSON_COLUMNS, + household_columns=_GATE_HOUSEHOLD_COLUMNS, + ) + return ( + us_esi_premiums_signal_gate(view), + us_esi_premiums_anchor_gate(view, time_period=time_period), + ) + + +def _strict_json(value: Any) -> Any: + if isinstance(value, Mapping): + return {str(key): _strict_json(item) for key, item in value.items()} + if isinstance(value, (list, tuple)): + return [_strict_json(item) for item in value] + if isinstance(value, np.generic): + return _strict_json(value.item()) + if isinstance(value, float) and not math.isfinite(value): + return None + return value + + +def acs_local_esi_premium_gate_payload(gate: GateResult) -> dict[str, object]: + """One gate verdict for a lane summary or gate report. + + Failures are kept verbatim, so a diagnostic build that waived them still + records what was red. Non-finite detail values become ``null``: the + staging summary is written as strict JSON. + """ + + return { + "name": gate.name, + "passed": bool(gate.passed), + "failures": list(gate.failures), + "details": _strict_json(dict(gate.details)), + } diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/acs_multispine.py b/packages/microcosm-build/src/microcosm/build/us_runtime/acs_multispine.py index c6fe766d3f..af482d4547 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/acs_multispine.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/acs_multispine.py @@ -23,6 +23,10 @@ from microcosm.build.gates import FitWeightRecord from microcosm.build.us_runtime.acs_inputs import map_acs_native_inputs +from microcosm.build.us_runtime.acs_local_esi_premiums import ( + acs_local_esi_premium_transfer_target_families, + with_acs_local_esi_premium_anchor, +) from microcosm.build.us_runtime.acs_local_hours import ( acs_local_hours_transfer_target_families, complete_acs_local_under15_hours, @@ -83,6 +87,8 @@ def build_optional_acs_multispine( hours_donor_factory: Callable[[Frame], tuple[Frame, Frame, dict[str, object]]] | None = None, hours_under15_policy: str | None = None, + esi_premium_donor_factory: Callable[[Frame], tuple[Frame, dict[str, object]]] + | None = None, donor_spine: str = ASEC_PUF_DONOR_SPINE, donor_channel: str | None = ACS_DONOR_CHANNEL_AUTO, seed: int = 0, @@ -103,6 +109,12 @@ def build_optional_acs_multispine( Alternatively, ``hours_donor_factory`` qualifies that donor lazily: a source-complete ACS spine never needs its raw ASEC fields opened. + ``esi_premium_donor_factory`` qualifies the base as the donor of the + employer premium (microcosm#454) and returns its ASEC observation role. + The premium then reaches the ACS rows through its own ASEC-only pass, and + the pooled frame is held to the donor rows' premium per unit of household + mass (:func:`~.acs_local_esi_premiums.with_acs_local_esi_premium_anchor`). + Large intermediate frames are released as soon as the next stage has materialized its own frame. This cannot make the final dense pool small, but it avoids retaining the raw, mapped, transferred, and pooled versions @@ -177,6 +189,30 @@ def build_optional_acs_multispine( hours_imputed_inputs = tuple(hours_transfer.imputed_inputs) hours_donor_channel = hours_transfer.resolved_donor_channel del hours_transfer + esi_fit_records = () + esi_imputed_inputs = () + esi_donor_channel = None + esi_source = None + if esi_premium_donor_factory is not None: + # The premium follows measured wages, so it fits on the ASEC + # observation role like usual hours, not on the PUF-detail role the + # tax details use: that role's wages are PUF-imputed. + esi_donor, esi_source = esi_premium_donor_factory(base) + esi_transfer = transfer_acs_inputs( + mapped_frame, + esi_donor, + target_families=acs_local_esi_premium_transfer_target_families(), + donor_spine=donor_spine, + donor_channel=BASE_ASEC_SUPPORT_CHANNEL, + seed=seed, + n_estimators=n_estimators, + max_targets_per_fit=max_targets_per_fit, + ) + mapped_frame = esi_transfer.frame + esi_fit_records = tuple(esi_transfer.fit_records) + esi_imputed_inputs = tuple(esi_transfer.imputed_inputs) + esi_donor_channel = esi_transfer.resolved_donor_channel + del esi_transfer, esi_donor transferred = transfer_acs_inputs( mapped_frame, base, @@ -189,9 +225,9 @@ def build_optional_acs_multispine( ) del mapped_frame adult_care_gate = _require_recipient_adult_care_structure(transferred.frame) - fit_records = hours_fit_records + tuple(transferred.fit_records) + fit_records = hours_fit_records + esi_fit_records + tuple(transferred.fit_records) imputed_provenance = _json_ready_sequence( - hours_imputed_inputs + tuple(transferred.imputed_inputs) + hours_imputed_inputs + esi_imputed_inputs + tuple(transferred.imputed_inputs) ) deferred_inputs = tuple(transferred.deferred_inputs) if puma_ladder is not None: @@ -219,6 +255,11 @@ def build_optional_acs_multispine( ) pooled = with_optional_acs_spine(base, transferred_frame, **pool_options) del transferred_frame + esi_anchor = None + if esi_premium_donor_factory is not None: + # Pooling has set each spine's share of household mass; the anchor + # reads it from the live frame. + pooled, esi_anchor = with_acs_local_esi_premium_anchor(pooled) provenance = { "enabled": True, @@ -245,6 +286,11 @@ def build_optional_acs_multispine( provenance["local_hours_source"] = hours_source if modeled_hours is not None: provenance["hours_modeled_completion"] = modeled_hours + if esi_premium_donor_factory is not None: + provenance["fit_configuration"]["esi_premium_donor_channel"] = esi_donor_channel + provenance["local_esi_premiums"] = _json_ready_mapping( + {"source": esi_source, "anchor": esi_anchor} + ) if puma_ladder is not None: geography = us_puma_ladder_assignment_summary( pooled.table("household"), diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/esi_premiums.py b/packages/microcosm-build/src/microcosm/build/us_runtime/esi_premiums.py index 10b17df110..64d6ef2585 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/esi_premiums.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/esi_premiums.py @@ -70,6 +70,32 @@ covers "active and retired federal civilian employees". It is recorded as a cross-check, not gated. +Stacked pools +------------- +A stacked pool gives each household source a share of one population's +household mass, and only its CPS-source rows carry the raw ASEC columns. Two +rules keep the pool on the stage's scale: + +* the stage sets the factor on the CPS-source rows against ``anchor x + share``, where ``share`` is the fraction of the pool's household mass those + rows carry (:func:`us_esi_premiums_household_mass_share`), so each person + carries the dollars a single-source build gives them; and +* once the cross-source transfer has filled every other row, + :func:`with_us_esi_premium_pool_anchor` gives each support clone its + source record's draw, clears the premium where that record reports zero + wages, and scales the transferred premiums to the same weighted total per + unit of household mass. A missing wage is refused, not read as zero. + +The pool-wide weighted column then equals the CPS-source total divided by +``share``: what the stage assigns the whole population. The other rows have +no policyholder flag, so the anchor-universe total a gate derives for a pool +assumes employed policyholders carry the same share of it there as on the +CPS-source rows. + +A row is transferred only if it has none of the raw fields and no CPS record +id (``PERIDNUM``). A CPS record without its fields is refused by the anchor +and fails both gates, so lost coverage codes cannot pass as a transfer. + Not produced here ----------------- ``pre_tax_health_insurance_premiums``, the employee share paid by pre-tax @@ -110,19 +136,24 @@ __all__ = [ "US_ESI_EMPLOYER_PREMIUM_COLUMN", + "US_ESI_PREMIUMS_ANCHOR_SHARE_KEY", "US_ESI_PREMIUMS_NONCONSTANT_PERSON_COLUMNS", "US_ESI_PREMIUMS_OUTPUT_COLUMNS", + "US_ESI_PREMIUMS_POOL_ANCHOR_PERSON_INPUTS", "US_ESI_PREMIUMS_REQUIRED_SOURCE_COLUMNS", "US_ESI_PREMIUMS_STAGE_NAME", + "US_ESI_PREMIUMS_WAGE_COLUMN", "derive_us_employer_esi_premiums_from_manifest", "load_meps_ic_esi_premium_cells", "meps_ic_private_active_employer_totals", "refuse_unassigned_us_esi_premiums", "us_esi_premiums_anchor_gate", + "us_esi_premiums_household_mass_share", "us_esi_premiums_signal_gate", "us_esi_premiums_stage_spec", "us_esi_premiums_summary", "with_us_esi_premium_inputs", + "with_us_esi_premium_pool_anchor", ] US_ESI_PREMIUMS_STAGE_NAME = "meps_esi_premiums" @@ -188,6 +219,55 @@ _PRIVATE_EMPLOYER_CODES = (4, 5, 6) _EMPLOYER_SECTOR_CODES = (_FEDERAL, _STATE_GOVERNMENT, _LOCAL_GOVERNMENT, 4, 5, 6) +#: ``SourceRuntimeConfig.extra`` key for the share of the national anchor the +#: frame's rows carry: 1 for a single-source frame, the CPS-source rows' share +#: of household mass in a stacked pool. +US_ESI_PREMIUMS_ANCHOR_SHARE_KEY = "esi_premiums_anchor_share" +#: Wages of a person without raw ASEC columns: the canonical input ACS maps +#: natively from ``WAGP`` (:mod:`.acs_inputs`). +US_ESI_PREMIUMS_WAGE_COLUMN = "employment_income_before_lsr" +#: The raw ASEC person columns whose presence marks a row the stage derived +#: itself. ``state_fips`` is on the household of every source. +_RAW_EVIDENCE_COLUMNS: tuple[str, ...] = tuple( + column + for column in US_ESI_PREMIUMS_REQUIRED_SOURCE_COLUMNS + if column != "state_fips" +) +#: The raw ASEC record id. A pool marks its CPS-source rows by it, so it +#: corroborates the row kind the raw coverage fields imply: a CPS record +#: always carries those fields, and a row without the id never had them. +_CPS_EVIDENCE_COLUMN = "PERIDNUM" +_PERSON_SOURCE_ID_COLUMN = "person_source_id" +_PERSON_CLONE_INDEX_COLUMN = "person_support_clone_index" +#: Every assembled person column :func:`with_us_esi_premium_pool_anchor` reads +#: besides the stage output, with the provision that supplies it, for the +#: pool's remaining-stage input manifest. +US_ESI_PREMIUMS_POOL_ANCHOR_PERSON_INPUTS: Mapping[str, str] = MappingProxyType( + { + **dict.fromkeys( + (*_RAW_EVIDENCE_COLUMNS, _CPS_EVIDENCE_COLUMN), + "assembled_raw_asec_source_evidence", + ), + US_ESI_PREMIUMS_WAGE_COLUMN: "assembled_native_person_input", + _PERSON_SOURCE_ID_COLUMN: "assembly_support_source_identity", + _PERSON_CLONE_INDEX_COLUMN: "assembly_support_provenance", + } +) +#: Relative tolerance of a pool's weighted employer total around the +#: CPS-source total divided by its mass share, straight after +#: :func:`with_us_esi_premium_pool_anchor`. +_POOL_ANCHOR_RTOL = 1e-9 +#: Transferred rows against source-derived rows, for the weighted share with a +#: positive employer premium and its mean. The pool anchor holds the totals, +#: so these ratios are what show a transfer that put the premiums on the wrong +#: people. The pool's by-origin battery holds the tighter production bounds. +_TRANSFERRED_TO_SOURCE_BAND = (0.5, 2.0) +#: Transferred rows' weighted employer premium per unit of household mass over +#: the source-derived rows'. The pool anchor sets it to 1; calibration and +#: sparse selection move it. Outside this band the pool's anchor-universe +#: total no longer rests on comparable halves. +_TRANSFERRED_PER_MASS_BAND = (0.8, 1.25) + _CELLS_RESOURCE = "meps_ic_esi_premium_cells.json" _CELLS_SHA256 = "29a5502abbd921e70007d6bcec8ed1ae065b309cacfa80f49f9bc4dd9a28ec93" _PERSON_WEIGHT_COLUMN = "person_weight" @@ -663,6 +743,19 @@ def _anchor(year: int) -> float: return float(values[str(year)]) +def _validated_anchor_share(value: object) -> float: + if isinstance(value, bool) or not isinstance(value, (int, float, np.floating)): + raise SourceRuntimeError( + f"US ESI premium anchor share must be a number in (0, 1], got {value!r}." + ) + share = float(value) + if not (np.isfinite(share) and 0.0 < share <= 1.0): + raise SourceRuntimeError( + f"US ESI premium anchor share must be in (0, 1], got {share!r}." + ) + return share + + def _check_parameters( operation: SourceOperationSpec, expected: Mapping[str, Any] ) -> None: @@ -692,7 +785,10 @@ def derive_us_employer_esi_premiums_from_manifest( """Assign MEPS-IC employer shares and scale them to the NHE anchor. The factor is set over every policyholder, the anchor's universe; the - column carries the employed policyholders' part. + column carries the employed policyholders' part. The policyholders' scaled + total equals the anchor times + ``config.extra[US_ESI_PREMIUMS_ANCHOR_SHARE_KEY]`` (default 1): the share + of the national anchor the frame's rows carry. """ if operation.kind != "derive_employer_sponsored_insurance_premiums": @@ -710,7 +806,10 @@ def derive_us_employer_esi_premiums_from_manifest( "US ESI premium stage found no weighted employer-paid premium mass to " "scale: no employed policyholder with an employer share." ) - scale = _anchor(context.config.target_year) / float(weights @ raw) + share = _validated_anchor_share( + context.config.extra.get(US_ESI_PREMIUMS_ANCHOR_SHARE_KEY, 1.0) + ) + scale = _anchor(context.config.target_year) * share / float(weights @ raw) result = frame.copy(deep=True) result[US_ESI_EMPLOYER_PREMIUM_COLUMN] = np.where(universe, raw * scale, 0.0) return result @@ -757,7 +856,13 @@ def _outputs_carry_signal(person: pd.DataFrame) -> bool: ) -def with_us_esi_premium_inputs(frame: Frame, *, seed: int, time_period: int) -> Frame: +def with_us_esi_premium_inputs( + frame: Frame, + *, + seed: int, + time_period: int, + anchor_share: float = 1.0, +) -> Frame: """Run the ``meps_esi_premiums`` stage over a US frame. A frame that already carries the output with signal and passes the signal @@ -765,6 +870,12 @@ def with_us_esi_premium_inputs(frame: Frame, *, seed: int, time_period: int) -> still carry the raw ASEC columns; the stage never defaults them. The assignment is deterministic: ``seed`` only fills the runtime config that every source stage takes. + + ``anchor_share`` is the share of the national anchor these rows carry, so + their policyholders' scaled total is ``anchor x anchor_share``. A + single-source frame holds the whole population (1). A stacked pool passes + the CPS-source rows' share of the pool's household mass + (:func:`us_esi_premiums_household_mass_share`). """ if frame.schema != US_SCHEMA: @@ -788,7 +899,13 @@ def with_us_esi_premium_inputs(frame: Frame, *, seed: int, time_period: int) -> derive_us_employer_esi_premiums_from_manifest ), }, - config=SourceRuntimeConfig(seed=int(seed), target_year=int(time_period)), + config=SourceRuntimeConfig( + seed=int(seed), + target_year=int(time_period), + extra={ + US_ESI_PREMIUMS_ANCHOR_SHARE_KEY: _validated_anchor_share(anchor_share) + }, + ), ) aligned = output.set_index("person_id").reindex(person["person_id"]) tables = {entity: frame.table(entity).copy() for entity in frame.entities} @@ -832,6 +949,330 @@ def refuse_unassigned_us_esi_premiums(frame: Frame, *, consumer: str) -> None: ) +def _cps_record_evidence(person: pd.DataFrame) -> np.ndarray | None: + """Rows that carry a CPS record id; ``None`` if the frame has no such column.""" + + if _CPS_EVIDENCE_COLUMN not in person.columns: + return None + evidence = person[_CPS_EVIDENCE_COLUMN] + available = evidence.notna() + if pd.api.types.is_string_dtype(evidence.dtype) or evidence.dtype == object: + available &= evidence.astype("string").str.strip().ne("").fillna(False) + return available.to_numpy(dtype=bool) + + +def _raw_evidence_mask(person: pd.DataFrame) -> np.ndarray: + """Rows whose premiums the stage derived from measured ASEC fields. + + A single-source frame carries the raw fields on every row. A stacked pool + carries them on its CPS-source rows only; every other row holds + transferred premiums and nulls in all of the fields. A row with some of + the fields is neither, and is refused. + + Nulls alone do not make a row transferred: a CPS record that lost its + fields would look the same. The CPS record id decides. A row with the id + must carry every field, a row with the fields must carry the id, and a + frame without the id column cannot hold transferred rows at all. + """ + + present = person[list(_RAW_EVIDENCE_COLUMNS)].notna().to_numpy(dtype=bool) + complete = present.all(axis=1) + partial = present.any(axis=1) & ~complete + if partial.any(): + raise SourceRuntimeError( + f"US ESI premium stage: {int(partial.sum())} row(s) carry only some " + f"of the raw ASEC fields {list(_RAW_EVIDENCE_COLUMNS)}; a row is " + "either source-derived (all present) or transferred (all null)." + ) + evidenced = _cps_record_evidence(person) + if evidenced is None: + if not complete.all(): + raise SourceRuntimeError( + f"US ESI premium stage: {int((~complete).sum())} row(s) carry " + "none of the raw ASEC fields and the frame has no " + f"{_CPS_EVIDENCE_COLUMN!r} column to show they are not CPS " + "records that lost them. Only a frame that marks its CPS " + "records can hold transferred rows." + ) + return complete + lost = evidenced & ~complete + if lost.any(): + raise SourceRuntimeError( + f"US ESI premium stage: {int(lost.sum())} CPS record(s) " + f"({_CPS_EVIDENCE_COLUMN!r} present) lack the raw ASEC fields. A CPS " + "record's premium is recomputed from those fields; it is never " + "graded as transferred." + ) + stray = complete & ~evidenced + if stray.any(): + raise SourceRuntimeError( + f"US ESI premium stage: {int(stray.sum())} row(s) carry the raw ASEC " + f"fields without a CPS record id ({_CPS_EVIDENCE_COLUMN!r})." + ) + return complete + + +def us_esi_premiums_household_mass_share( + frame: Frame, person_rows: np.ndarray | pd.Series +) -> float: + """Share of the frame's household mass in the households of ``person_rows``. + + This is the share of the national anchor those rows carry: a stacked pool + represents one population, split across its household sources in + proportion to household weight. A household whose members fall on both + sides of the selection is refused. + """ + + rows = np.asarray(person_rows, dtype=bool) + person = frame.table("person") + if rows.shape != (len(person),): + raise SourceRuntimeError( + "US ESI premium household mass share needs one flag per person." + ) + membership = person[frame.schema.membership_column("household")] + household_ids = frame.table("household")[frame.schema.entity_id_column("household")] + selected = household_ids.isin(membership[rows]).to_numpy(dtype=bool) + unselected = household_ids.isin(membership[~rows]).to_numpy(dtype=bool) + if (selected & unselected).any(): + raise SourceRuntimeError( + f"US ESI premium stage: {int((selected & unselected).sum())} " + "household(s) mix source-derived and transferred people." + ) + weights = np.asarray(frame.resolve_weights("household").values, dtype=np.float64) + if not (np.isfinite(weights).all() and (weights >= 0).all()): + raise SourceRuntimeError( + "US ESI premium stage requires finite nonnegative household weights." + ) + # Each side is summed on its own, so a side without mass contributes an + # exact zero and the share is exactly one or zero, at any weight scale. + selected_mass = float(weights[selected].sum()) + total = selected_mass + float(weights[unselected].sum()) + if not total > 0: + raise SourceRuntimeError( + "US ESI premium stage requires household weights with positive mass." + ) + return selected_mass / total + + +def _source_record_values(person: pd.DataFrame, values: np.ndarray) -> np.ndarray: + """Each row's value on its clone-0 source record, for every support clone. + + A support clone is the same surveyed person with another tax-detail + vector. Frames without clone provenance hold source records only, and + ``values`` is returned as it is. + """ + + if not {_PERSON_SOURCE_ID_COLUMN, _PERSON_CLONE_INDEX_COLUMN} <= set( + person.columns + ): + return values + native = ( + pd.to_numeric(person[_PERSON_CLONE_INDEX_COLUMN], errors="coerce") + .eq(0) + .to_numpy(dtype=bool) + ) + source_id = person[_PERSON_SOURCE_ID_COLUMN] + by_source = pd.Series(values[native], index=source_id[native].to_numpy()) + if not by_source.index.is_unique: + raise SourceRuntimeError( + "US ESI premium stage: source records repeat a " + f"{_PERSON_SOURCE_ID_COLUMN!r}." + ) + orphan = ~source_id.isin(by_source.index).to_numpy(dtype=bool) + if orphan.any(): + raise SourceRuntimeError( + f"US ESI premium stage: {int(orphan.sum())} support clone(s) have no " + "clone-0 source record." + ) + return source_id.map(by_source).to_numpy(dtype=np.float64, na_value=np.nan) + + +def _source_record_wages(person: pd.DataFrame) -> np.ndarray: + """Wages each person's source record reports, for every support clone. + + A clone takes the survey-side wages of its clone-0 record, as the + source-derived rows take one premium per source person. A wage that is + missing or not a number comes back as NaN; the caller decides what a + missing wage means, and it never means zero. + """ + + if US_ESI_PREMIUMS_WAGE_COLUMN not in person.columns: + raise SourceRuntimeError( + "US ESI premium stage: transferred rows need " + f"{US_ESI_PREMIUMS_WAGE_COLUMN!r} to place the premiums' structural " + "zeros." + ) + wages = pd.to_numeric( + person[US_ESI_PREMIUMS_WAGE_COLUMN], errors="coerce" + ).to_numpy(dtype=np.float64, na_value=np.nan) + return _source_record_values(person, wages) + + +def with_us_esi_premium_pool_anchor(frame: Frame) -> tuple[Frame, dict[str, object]]: + """Hold a stacked pool's transferred employer premiums to the stage's scale. + + Runs once every row carries the stage's outputs: the stage derived them on + the rows with raw ASEC fields, scaled to their share of the pool's + household mass, and a cross-source transfer filled the rest. The + source-derived rows are never rewritten. On the transferred rows it + + 1. gives every support clone its clone-0 source record's draw, so a + person carries one premium however the pool ordered its transfer and + its clone; + 2. clears the outputs where that source record reports zero wages (the + stage's universe is people employed by an employer); and + 3. scales the employer premiums by one factor so those rows carry the same + weighted total per unit of household mass as the source-derived rows: + ``source total x (1 - share) / share``. + + A transferred person's source record must report a wage. A missing wage + is refused: it is not evidence of no wages. + + The pool-wide weighted employer premium then equals ``source total / + share``, what the stage assigns the whole population, and each side + carries it in proportion to household mass, so reweighting across sources + downstream does not move the total. Transferred rows that hold no + household mass have nothing to scale to and keep the factor at one. A + frame with no transferred row is returned unchanged. Returns the frame + and a receipt. + """ + + if frame.schema != US_SCHEMA: + raise ValueError("US ESI premium pool anchor requires the US schema.") + person = frame.table("person") + missing = [ + column + for column in (*US_ESI_PREMIUMS_OUTPUT_COLUMNS, *_RAW_EVIDENCE_COLUMNS) + if column not in person.columns + ] + if missing: + raise SourceRuntimeError( + f"US ESI premium pool anchor: the person table lacks {missing}; it " + "needs the stage outputs on every row and the raw ASEC fields that " + "mark the source-derived rows." + ) + outputs = { + column: person[column].to_numpy(dtype=np.float64) + for column in US_ESI_PREMIUMS_OUTPUT_COLUMNS + } + for column, values in outputs.items(): + if not np.isfinite(values).all() or (values < 0).any(): + raise SourceRuntimeError( + f"US ESI premium pool anchor: {column} must be finite and " + "nonnegative on every row; the transfer left a gap." + ) + weights = np.asarray(frame.resolve_weights("person").values, dtype=np.float64) + if not np.isfinite(weights).all() or (weights < 0).any(): + raise SourceRuntimeError( + "US ESI premium pool anchor requires finite nonnegative weights." + ) + source = _raw_evidence_mask(person) + transferred = ~source + if not source.any(): + raise SourceRuntimeError( + "US ESI premium pool anchor: no row carries the raw ASEC fields." + ) + employer = outputs[US_ESI_EMPLOYER_PREMIUM_COLUMN] + share = us_esi_premiums_household_mass_share(frame, source) + source_total = _weighted(weights, employer, source) + if not source_total > 0: + raise SourceRuntimeError( + "US ESI premium pool anchor: the source-derived rows hold no " + "employer premium mass." + ) + receipt: dict[str, object] = { + "source_household_mass_share": share, + "source_rows": int(source.sum()), + "transferred_rows": int(transferred.sum()), + "source_employer_premium_total": source_total, + "pool_employer_premium_target": source_total / share, + "wage_column": US_ESI_PREMIUMS_WAGE_COLUMN, + } + if not transferred.any(): + return frame, receipt | { + "status": "no_transferred_rows", + "employer_premium_total": source_total, + } + + wages = _source_record_wages(person) + unknown = transferred & ~np.isfinite(wages) + if unknown.any(): + raise SourceRuntimeError( + f"US ESI premium pool anchor: {int(unknown.sum())} transferred row(s) " + f"have no finite {US_ESI_PREMIUMS_WAGE_COLUMN!r} on their source " + "record. A missing wage is not a zero wage; map it, or zero it " + "under a named universe rule, before the anchor." + ) + # One premium per source person on the transferred side too. + drawn = { + column: np.where(transferred, _source_record_values(person, values), values) + for column, values in outputs.items() + } + reset = {column: drawn[column] != outputs[column] for column in outputs} + no_wages = transferred & ~(wages > 0) + cleared = {column: no_wages & (values > 0) for column, values in drawn.items()} + target = source_total * (1.0 - share) / share + before = _weighted( + weights, drawn[US_ESI_EMPLOYER_PREMIUM_COLUMN], transferred & ~no_wages + ) + if target > 0 and not before > 0: + raise SourceRuntimeError( + "US ESI premium pool anchor: the transferred rows hold no employer " + "premium mass on people with wages, so there is nothing to scale." + ) + # Transferred rows without household mass have no total to be held to. + factor = target / before if before > 0 else 1.0 + receipt |= { + "transferred_household_mass_share": 1.0 - share, + "transferred_rows_reset_to_source_record": { + column: int(rows.sum()) for column, rows in reset.items() + }, + "transferred_rows_without_source_wages": int(no_wages.sum()), + "cleared_rows": {column: int(rows.sum()) for column, rows in cleared.items()}, + "cleared_weighted_total": { + column: _weighted(weights, drawn[column], rows) + for column, rows in cleared.items() + }, + "transferred_employer_premium_total_before": before, + "transferred_employer_premium_target": target, + "scale_factor": factor, + } + settled = ( + not any(rows.any() for rows in reset.values()) + and not any(rows.any() for rows in cleared.values()) + and np.isclose(factor, 1.0, rtol=1e-12, atol=0.0) + ) + if settled: + # Already on the stage's scale: rerunning must not move a byte. + return frame, receipt | { + "status": "already_on_anchor" if target > 0 else "no_transferred_mass", + "employer_premium_total": _weighted(weights, employer), + } + outputs = {column: values.copy() for column, values in drawn.items()} + for values in outputs.values(): + values[no_wages] = 0.0 + outputs[US_ESI_EMPLOYER_PREMIUM_COLUMN][transferred] *= factor + total = _weighted(weights, outputs[US_ESI_EMPLOYER_PREMIUM_COLUMN]) + if not np.isclose(total, source_total / share, rtol=_POOL_ANCHOR_RTOL, atol=0.0): + raise SourceRuntimeError( + f"US ESI premium pool anchor: the pool totals ${total / 1e9:,.6f}B " + f"after scaling, not ${source_total / share / 1e9:,.6f}B." + ) + tables = {entity: frame.table(entity).copy() for entity in frame.entities} + tables.update({name: frame.link(name) for name in frame.links}) + for column, values in outputs.items(): + tables["person"][column] = values + result = Frame( + tables, + frame.schema, + {entity: frame.weights_for(entity) for entity in frame.weighted_entities}, + frame.strata, + mass_log=frame.mass_log, + metadata=frame.metadata, + ) + return result, receipt | {"status": "scaled", "employer_premium_total": total} + + def _weighted( weights: np.ndarray, values: np.ndarray, mask: np.ndarray | None = None ) -> float: @@ -840,11 +1281,14 @@ def _weighted( return float(weights[mask] @ values[mask]) -def _clone_disagreements(person: pd.DataFrame) -> int: +def _clone_disagreements(person: pd.DataFrame, rows: np.ndarray) -> int: + """Source persons among ``rows`` whose support clones disagree.""" + if not {"source_year", "source_household_id", "source_person_id"} <= set( person.columns ): return 0 + person = person.loc[rows] keys = _stable_person_keys(person) work = person[list(US_ESI_PREMIUMS_OUTPUT_COLUMNS)].copy() work["_key"] = keys.to_numpy() @@ -857,6 +1301,92 @@ def _clone_disagreements(person: pd.DataFrame) -> int: ) +def _positive_share_and_mean( + weights: np.ndarray, values: np.ndarray, rows: np.ndarray +) -> tuple[float, float]: + """Weighted share of ``rows`` with a positive value, and its mean.""" + + mass = float(weights[rows].sum()) + positive = rows & (values > 0) + positive_mass = float(weights[positive].sum()) + return ( + positive_mass / mass if mass else 0.0, + _weighted(weights, values, positive) / positive_mass if positive_mass else 0.0, + ) + + +def _transferred_row_summary( + frame: Frame, + person: pd.DataFrame, + weights: np.ndarray, + employer: np.ndarray, + source: np.ndarray, +) -> dict[str, object]: + """How the rows without raw ASEC columns compare with the rows that have them.""" + + transferred = ~source + share = us_esi_premiums_household_mass_share(frame, source) + source_total = _weighted(weights, employer, source) + transferred_total = _weighted(weights, employer, transferred) + source_positive, source_mean = _positive_share_and_mean(weights, employer, source) + positive, mean = _positive_share_and_mean(weights, employer, transferred) + without_wages: int | None = None + missing_wages: int | None = None + if US_ESI_PREMIUMS_WAGE_COLUMN in person.columns: + records = transferred + if _PERSON_CLONE_INDEX_COLUMN in person.columns: + records = transferred & pd.to_numeric( + person[_PERSON_CLONE_INDEX_COLUMN], errors="coerce" + ).eq(0).to_numpy(dtype=bool) + wages = pd.to_numeric( + person[US_ESI_PREMIUMS_WAGE_COLUMN], errors="coerce" + ).to_numpy(dtype=np.float64, na_value=np.nan) + held = records & (employer > 0) + without_wages = int((held & np.isfinite(wages) & ~(wages > 0)).sum()) + missing_wages = int((held & ~np.isfinite(wages)).sum()) + clone_disagreements = 0 + if {_PERSON_SOURCE_ID_COLUMN, _PERSON_CLONE_INDEX_COLUMN} <= set(person.columns): + clone_disagreements = int( + pd.Series(employer[transferred]) + .groupby(person.loc[transferred, _PERSON_SOURCE_ID_COLUMN].to_numpy()) + .nunique() + .gt(1) + .sum() + ) + # Transferred rows that hold no household mass cannot be compared. + weighed = share < 1.0 + return { + "source_rows": int(source.sum()), + "transferred_rows": int(transferred.sum()), + "source_household_mass_share": share, + "transferred_household_mass_share": 1.0 - share, + "transferred_clone_disagreement_source_records": clone_disagreements, + "source_employer_premium_total": source_total, + "transferred_employer_premium_total": transferred_total, + "source_employer_premium_positive_share": source_positive, + "transferred_employer_premium_positive_share": positive, + "source_employer_premium_mean_per_positive_person": source_mean, + "transferred_employer_premium_mean_per_positive_person": mean, + "transferred_to_source_positive_share_ratio": ( + positive / source_positive if weighed and source_positive else float("nan") + ), + "transferred_to_source_mean_ratio": ( + mean / source_mean if weighed and source_mean else float("nan") + ), + "transferred_to_source_band": list(_TRANSFERRED_TO_SOURCE_BAND), + "transferred_to_source_per_household_mass_ratio": ( + (transferred_total / (1.0 - share)) / (source_total / share) + if source_total and 0.0 < share < 1.0 + else float("nan") + ), + "transferred_per_household_mass_band": list(_TRANSFERRED_PER_MASS_BAND), + # Recorded, not gated: later stages may rewrite wages. The pool anchor + # enforces both when the pool is built. + "transferred_source_records_with_premium_and_no_wages": without_wages, + "transferred_source_records_with_premium_and_missing_wages": missing_wages, + } + + def us_esi_premiums_summary(frame: Frame) -> dict[str, object]: """Weighted ESI premium lineage and structure, for gates and manifests. @@ -865,6 +1395,12 @@ def us_esi_premiums_summary(frame: Frame) -> dict[str, object]: checked against the cells rather than trusted. A frame that lacks those columns gets the column totals only, with ``source_columns_missing`` naming what is absent; both gates fail on it. + + In a stacked pool only the CPS-source rows carry the raw columns. The + recomputation covers them, the rows a transfer filled are summarized + against them, and ``anchor_universe_employer_total`` adds the transferred + column at the source rows' employed share of the anchor universe: those + rows have no policyholder flag to price the other policyholders from. """ person = frame.table("person") @@ -874,6 +1410,16 @@ def us_esi_premiums_summary(frame: Frame) -> dict[str, object]: total_weight = float(weights.sum()) holders = float(weights[positive].sum()) person = _person_with_state(frame) + source_columns_missing = [ + column + for column in US_ESI_PREMIUMS_REQUIRED_SOURCE_COLUMNS + if column not in person.columns + ] + source = ( + np.ones(len(person), dtype=bool) + if source_columns_missing + else _raw_evidence_mask(person) + ) summary: dict[str, object] = { "employer_premium_total": _weighted(weights, employer), "employer_premium_positive_persons": holders, @@ -885,18 +1431,22 @@ def us_esi_premiums_summary(frame: Frame) -> dict[str, object]: else 0.0, "nonfinite_rows": int((~np.isfinite(employer)).sum()), "negative_rows": int((employer < 0).sum()), - "clone_disagreement_source_persons": _clone_disagreements(person), + "clone_disagreement_source_persons": _clone_disagreements(person, source), "anchor": dict(EMPLOYER_PREMIUM_ANCHOR), "cross_check": dict(EMPLOYER_PREMIUM_CROSS_CHECK), "cells_sha256": _CELLS_SHA256, - "source_columns_missing": [ - column - for column in US_ESI_PREMIUMS_REQUIRED_SOURCE_COLUMNS - if column not in person.columns - ], + "source_columns_missing": source_columns_missing, } - if summary["source_columns_missing"]: + if source_columns_missing: return summary + transferred_total = 0.0 + if not source.all(): + summary |= _transferred_row_summary(frame, person, weights, employer, source) + transferred_total = float(summary["transferred_employer_premium_total"]) + # Everything below is over the source-derived rows. + person = person.loc[source].reset_index(drop=True) + weights, employer = weights[source], employer[source] + positive = employer > 0 codes, raw, premium, contribution = _person_raw_shares(person) universe = codes.universe holder = codes.policyholder @@ -905,10 +1455,16 @@ def us_esi_premiums_summary(frame: Frame) -> dict[str, object]: raw_universe_total = _weighted(weights, raw, universe) raw_anchor_total = _weighted(weights, raw) scale = ( - summary["employer_premium_total"] / raw_universe_total + _weighted(weights, employer) / raw_universe_total if raw_universe_total else float("nan") ) + employed_share = ( + raw_universe_total / raw_anchor_total if raw_anchor_total else float("nan") + ) + anchor_universe_total = scale * raw_anchor_total + ( + transferred_total / employed_share if transferred_total else 0.0 + ) by_tier = { tier: _weighted(weights, employer, universe & (codes.tier == code)) for code, tier in _TIER_BY_CODE.items() @@ -964,12 +1520,10 @@ def us_esi_premiums_summary(frame: Frame) -> dict[str, object]: "scale_factor_spread": ( float(np.nanmax(ratio) - np.nanmin(ratio)) if raw_positive.any() else 0.0 ), - "anchor_universe_employer_total": scale * raw_anchor_total, - "other_policyholder_employer_total": scale - * (raw_anchor_total - raw_universe_total), - "employed_share_of_anchor_universe": ( - raw_universe_total / raw_anchor_total if raw_anchor_total else float("nan") - ), + "anchor_universe_employer_total": anchor_universe_total, + "other_policyholder_employer_total": anchor_universe_total + - float(summary["employer_premium_total"]), + "employed_share_of_anchor_universe": employed_share, "employer_premium_by_tier": by_tier, "employer_premium_by_sector": by_sector, "employer_premium_outside_universe_rows": int((positive & ~universe).sum()), @@ -1001,6 +1555,10 @@ def us_esi_premiums_signal_gate(frame: Frame) -> GateResult: value sits in the employed-policyholder universe and equals one common multiple of its MEPS-IC cell. Those proofs read the raw ASEC columns, so a frame without them fails: it cannot be certified. + + In a stacked pool the proofs cover the CPS-source rows. The rows a + transfer filled must carry the premium too, with a weighted positive share + and mean within ``_TRANSFERRED_TO_SOURCE_BAND`` of the CPS-source rows'. """ person = frame.table("person") @@ -1040,6 +1598,10 @@ def us_esi_premiums_signal_gate(frame: Frame) -> GateResult: ("nonfinite_rows", "non-finite value(s)"), ("negative_rows", "negative value(s)"), ("clone_disagreement_source_persons", "support-clone disagreement(s)"), + ( + "transferred_clone_disagreement_source_records", + "support-clone disagreement(s) on the rows without raw ASEC columns", + ), ( "employer_premium_outside_universe_rows", "employer premium(s) outside employed policyholders", @@ -1062,6 +1624,19 @@ def us_esi_premiums_signal_gate(frame: Frame) -> GateResult: failures.append( f"employer premium positive share {share:.4f} outside [{low}, {high}]." ) + if float(summary.get("transferred_household_mass_share", 0.0)) > 0: + low, high = _TRANSFERRED_TO_SOURCE_BAND + for key, label in ( + ("transferred_to_source_positive_share_ratio", "positive share"), + ("transferred_to_source_mean_ratio", "mean per positive person"), + ): + ratio = float(summary[key]) + if not low <= ratio <= high: + failures.append( + f"employer premium {label} on the rows without raw ASEC " + f"columns is {ratio:.3f} times the source-derived rows', " + f"outside [{low}, {high}]." + ) if "raw_employer_share_mean_per_positive_person" in summary: mean = float(summary["raw_employer_share_mean_per_positive_person"]) low, high = _RAW_MEAN_BAND @@ -1099,6 +1674,13 @@ def us_esi_premiums_anchor_gate(frame: Frame, *, time_period: int) -> GateResult the employed share of it leaves its band. BEA NIPA 7.8 line 17 and MEPS-IC's own private-sector enrollment total are recorded beside the verdict, not gated. + + A stacked pool carries the raw columns on its CPS-source rows only. Its + anchor-universe total is theirs plus the transferred rows' column at the + CPS-source rows' employed share, and the gate also fails when the + transferred rows' column per unit of household mass leaves + ``_TRANSFERRED_PER_MASS_BAND`` of the CPS-source rows', because the total + then rests on halves that no longer compare. """ person = frame.table("person") @@ -1189,12 +1771,47 @@ def us_esi_premiums_anchor_gate(frame: Frame, *, time_period: int) -> GateResult f"employed policyholders carry {employed_share:.4f} of the " f"anchor-universe employer total, outside [{low}, {high}]." ) + population_share = 1.0 + if "transferred_rows" in summary: + population_share = float(summary["source_household_mass_share"]) + details |= { + key: summary[key] + for key in ( + "source_rows", + "transferred_rows", + "source_household_mass_share", + "transferred_household_mass_share", + "source_employer_premium_total", + "transferred_employer_premium_total", + "transferred_to_source_per_household_mass_ratio", + "transferred_per_household_mass_band", + ) + } + details["anchor_universe_assumption"] = ( + "rows without raw ASEC columns carry the source-derived rows' " + "employed share of the anchor universe" + ) + ratio = float(summary["transferred_to_source_per_household_mass_ratio"]) + low, high = _TRANSFERRED_PER_MASS_BAND + weighed = float(summary["transferred_household_mass_share"]) > 0 + if weighed and not low <= ratio <= high: + failures.append( + "rows without raw ASEC columns carry " + f"{ratio:.3f} times the source-derived rows' employer " + f"premium per unit of household mass, outside [{low}, {high}]." + ) bea = EMPLOYER_PREMIUM_CROSS_CHECK["values"].get(year) if bea is not None and np.isfinite(universe_total): details["cross_check_ratio"] = universe_total / float(bea) active = dict(summary["meps_ic_private_active_employer_total"]) if year in active: - private = float(dict(summary["employer_premium_by_sector"])["private"]) + # The sector split reads the raw columns, so in a pool it covers + # the source-derived rows; their share of household mass scales it + # to the population. + private = ( + float(dict(summary["employer_premium_by_sector"])["private"]) + / population_share + ) details["private_active_cross_check"] = { "meps_ic_private_active_employer_total": active[year], "employer_premium_private_sector": private, diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/graph.py b/packages/microcosm-build/src/microcosm/build/us_runtime/graph.py index 95940ae5b2..2a23fc06f8 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/graph.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/graph.py @@ -18,6 +18,10 @@ from .capital_gain_distributions import ( capital_gain_distribution_shares_asset_identity, ) +from .esi_premiums import ( + US_ESI_EMPLOYER_PREMIUM_COLUMN, + US_ESI_PREMIUMS_POOL_ANCHOR_PERSON_INPUTS, +) from .multispine_pool import ( POOL_ENGINE_INPUT_PROJECTION_CONTRACT, POOL_RANDOM_SEED, @@ -119,6 +123,20 @@ def _take_up_cells( "float64", ), *_QBI_ROOT_CELLS, + # The ESI premium pool anchor reads the premium, the raw ASEC coverage + # fields (null on transferred rows) and wages; the provenance columns it + # also reads are declared above. + _Cell("person", US_ESI_EMPLOYER_PREMIUM_COLUMN, "float64"), + *_cells( + "person", + ( + column + for column, provision in US_ESI_PREMIUMS_POOL_ANCHOR_PERSON_INPUTS.items() + if provision + in ("assembled_raw_asec_source_evidence", "assembled_native_person_input") + ), + "float64", + ), *_take_up_cells("person", include_eitc=False), *_cells( "person", @@ -195,6 +213,7 @@ def _take_up_cells( ) _DERIVE_OUTPUTS = ( *_PREPARE_OUTPUTS, + _Cell("person", US_ESI_EMPLOYER_PREMIUM_COLUMN, "float64"), *( _Cell( "person", diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/graph_kernels.py b/packages/microcosm-build/src/microcosm/build/us_runtime/graph_kernels.py index a50bb5164e..1a9c34e4c4 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/graph_kernels.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/graph_kernels.py @@ -12,6 +12,7 @@ import pandas as pd import microcosm.build.us_runtime.capital_gain_distributions as distributions_module +import microcosm.build.us_runtime.esi_premiums as esi_premiums_module import microcosm.build.us_runtime.multispine_pool as multispine_pool_module import microcosm.build.us_runtime.qbi_inputs as qbi_inputs_module import microcosm.build.us_runtime.stacked_spine as stacked_spine_module @@ -345,6 +346,7 @@ def implementation_hash(self) -> str: multispine_pool_module, qbi_inputs_module, distributions_module, + esi_premiums_module, dependencies=self.capabilities.dependencies, ) diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/multispine_pool.py b/packages/microcosm-build/src/microcosm/build/us_runtime/multispine_pool.py index 9bfdd254ea..5425ea6d16 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/multispine_pool.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/multispine_pool.py @@ -50,6 +50,13 @@ from microcosm.build.us_runtime.energy_subsidy import ( with_us_energy_subsidy_input, ) +from microcosm.build.us_runtime.esi_premiums import ( + US_ESI_EMPLOYER_PREMIUM_COLUMN, + US_ESI_PREMIUMS_POOL_ANCHOR_PERSON_INPUTS, + us_esi_premiums_household_mass_share, + with_us_esi_premium_inputs, + with_us_esi_premium_pool_anchor, +) from microcosm.build.us_runtime.hours_worked import ( US_HOURS_WORKED_POOL_EXCLUDED_COLUMNS, us_hours_worked_signal_gate, @@ -214,6 +221,7 @@ "with_us_medicare_take_up_input", "with_us_housing_inputs", "with_us_eligibility_inputs", + "with_us_esi_premium_inputs", "with_us_pregnancy_inputs", "with_us_wic_claim_input", "impute_us_housing_assistance_to_puf_support", @@ -237,6 +245,7 @@ POOL_DERIVE_OPERATOR_ORDER = ( "_complete_schedule_d_input", + "with_us_esi_premium_pool_anchor", "with_us_qbi_input_reconciliation", ) """Whole-pool deterministic operators owned by the derive stage.""" @@ -367,11 +376,11 @@ class PoolEngineInputProjectionContract: POOL_PROJECTION_INPUT_PROVISION_COUNTS: tuple[tuple[str, int], ...] = ( ("assembled_native_engine_input", 5), - ("declared_absent_engine_input", 763), + ("declared_absent_engine_input", 762), ("declared_deferred_null_input", 3), ("derived_schedule_d_input", 1), ("frame_structural_engine_input", 10), - ("materialized_pool_input_surface", 122), + ("materialized_pool_input_surface", 123), ("preserved_stacked_engine_input", 4), ("seed_stage_program_contract", 17), ("unprovisioned_source_input", 1), @@ -383,9 +392,9 @@ class PoolEngineInputProjectionContract: """ POOL_REMAINING_STAGE_INPUT_MANIFEST_SHA256 = ( - "0a84565a659a6404cb17715dda36f094a87431c713c7a37bf65a936b16937325" + "d32b748b4e240a7a93c6354925bd2e7af2c493587cc740cd822cda8d8480833c" ) -"""Pinned content digest of all 1,059 post-transfer consumer/input rows.""" +"""Pinned content digest of all 1,075 post-transfer consumer/input rows.""" @dataclass(frozen=True) @@ -562,6 +571,12 @@ class SourceOperatorContract: (_PRE_CLONE_PHASE,), "raw household parent pointers must be counted before rows duplicate", ), + "with_us_esi_premium_inputs": SourceOperatorContract( + "esi_premiums", + (_PRE_CLONE_PHASE,), + "one premium per source person, scaled at the CPS rows' share of pool " + "household mass, so the early fill sees measured wages on both sources", + ), "with_us_pregnancy_inputs": SourceOperatorContract( "pregnancy", (_POST_CLONE_PHASE,), @@ -638,6 +653,13 @@ class SourceOperatorContract: "transferred tax-unit parents exist only on the physically cloned pool", execution_scope=_WHOLE_POOL_EXECUTION_SCOPE, ), + "with_us_esi_premium_pool_anchor": SourceOperatorContract( + "esi_premiums", + (_POST_CLONE_PHASE,), + "transferred employer premiums take the source rows' total per unit of " + "household mass once the cross-source fill has completed every row", + execution_scope=_WHOLE_POOL_EXECUTION_SCOPE, + ), "with_us_qbi_input_reconciliation": SourceOperatorContract( "qbi_reconciliation", (_POST_CLONE_PHASE,), @@ -645,7 +667,7 @@ class SourceOperatorContract: execution_scope=_WHOLE_POOL_EXECUTION_SCOPE, ), } -"""Total clone-phase registry for all 23 pool-path operator kernels.""" +"""Total clone-phase registry for all 25 pool-path operator kernels.""" POOL_SOURCE_OPERATOR_CONTRACTS = POOL_OPERATOR_CONTRACTS """Backward-compatible name for the now-total pool operator registry.""" @@ -1280,6 +1302,44 @@ def surface_provision(variable: str) -> str: fallback="derive_from_finite_transferred_parents", ) + # The ESI premium anchor reads the transferred premium, the raw ASEC + # fields that mark the rows the stage derived itself, each person's + # source-record wages, and household mass. + register( + "derive", + "with_us_esi_premium_pool_anchor", + "person", + US_ESI_EMPLOYER_PREMIUM_COLUMN, + execution_scope="whole_pool", + provision=surface_provision(US_ESI_EMPLOYER_PREMIUM_COLUMN), + available_by="transferred", + ) + for variable, provision in US_ESI_PREMIUMS_POOL_ANCHOR_PERSON_INPUTS.items(): + register( + "derive", + "with_us_esi_premium_pool_anchor", + "person", + variable, + execution_scope="whole_pool", + provision=provision, + available_by="assembled", + ) + for entity, variable, provision in ( + ("person", "person_household_id", "frame_membership"), + ("household", "household_id", "frame_entity_id"), + ("household", "", "frame_household_weight"), + ("person", "", "frame_resolve_weights_from_household_weight"), + ): + register( + "derive", + "with_us_esi_premium_pool_anchor", + entity, + variable, + execution_scope="whole_pool", + provision=provision, + available_by="assembled", + ) + for variable in US_QBI_RECONCILED_PERSON_COLUMNS: register( "derive", @@ -1794,6 +1854,9 @@ def prepare_multispine_source_inputs_for_clone( including the transient prior-year wage target needed by the later PUF QRF. """ + def esi_premiums_at_pool_share(available: Frame) -> PoolStageOutput: + return _with_pool_us_esi_premium_inputs(available, pool=frame) + operators: Mapping[str, SourceFrameOperator] = { "derive_us_cps_carried_inputs": derive_us_cps_carried_inputs, "with_us_hours_worked_inputs": _with_gated_us_hours_worked_inputs, @@ -1820,6 +1883,7 @@ def prepare_multispine_source_inputs_for_clone( seed=POOL_RANDOM_SEED, time_period=POOL_TIME_PERIOD, ), + "with_us_esi_premium_inputs": esi_premiums_at_pool_share, } return _run_source_operator_chain( frame, @@ -1829,6 +1893,31 @@ def prepare_multispine_source_inputs_for_clone( ) +def _with_pool_us_esi_premium_inputs( + available: Frame, + *, + pool: Frame, +) -> PoolStageOutput: + """Run the ESI premium stage on the CPS-source rows of a pool. + + The kernel sees those rows only, at pool weights. They carry ``share`` of + the pool's household mass, so they take that share of the national anchor + and each person keeps the dollars a single-source build assigns. + """ + + share = us_esi_premiums_household_mass_share( + pool, + _cps_source_evidence_mask(pool, phase=_PRE_CLONE_PHASE), + ) + produced = with_us_esi_premium_inputs( + available, + seed=POOL_RANDOM_SEED, + time_period=POOL_TIME_PERIOD, + anchor_share=share, + ) + return PoolStageOutput(produced, {"anchor_share": share}) + + def _with_gated_us_hours_worked_inputs(frame: Frame) -> PoolStageOutput: """Run the shared hours kernel, then keep only pool-owned input leaves.""" @@ -2894,8 +2983,10 @@ def derive_multispine_pool_inputs(frame: Frame) -> PoolStageOutput: Schedule D capital-gain distributions are derived once per tax unit from the transferred parent inputs, then carried by the first person only when the unit has no pre-existing values. Existing non-null values are never - rewritten. The shared QBI reconciliation then restores its documented - all-or-nothing identities on the imputed PUF-detail surface. + rewritten. The ESI premium anchor then holds the transferred employer + premiums to the source rows' total per unit of household mass. The shared + QBI reconciliation finally restores its documented all-or-nothing + identities on the imputed PUF-detail surface. """ remaining_stage_manifest_receipt = pool_remaining_stage_input_manifest_receipt() @@ -2914,17 +3005,27 @@ def reconcile_qbi_with_receipt(input_frame: Frame) -> PoolStageOutput: receipt, ) + def anchor_esi_premiums_with_receipt(input_frame: Frame) -> PoolStageOutput: + anchored, receipt = with_us_esi_premium_pool_anchor(input_frame) + return PoolStageOutput(anchored, receipt) + completed = _run_source_operator_chain( frame, phase=_POST_CLONE_PHASE, operator_names=POOL_DERIVE_OPERATOR_ORDER, operators={ "_complete_schedule_d_input": _complete_schedule_d_input, + "with_us_esi_premium_pool_anchor": anchor_esi_premiums_with_receipt, "with_us_qbi_input_reconciliation": reconcile_qbi_with_receipt, }, ) - schedule_d_receipt = completed.receipt["suboperators"][0]["kernel_receipt"] - qbi_receipt = completed.receipt["suboperators"][1]["kernel_receipt"] + kernel_receipts = { + suboperator["operator"]: suboperator["kernel_receipt"] + for suboperator in completed.receipt["suboperators"] + } + schedule_d_receipt = kernel_receipts["_complete_schedule_d_input"] + esi_premium_receipt = kernel_receipts["with_us_esi_premium_pool_anchor"] + qbi_receipt = kernel_receipts["with_us_qbi_input_reconciliation"] authorized = bind_us_qbi_reconciliation_transition_authority( completed.frame, qbi_receipt, @@ -2942,6 +3043,7 @@ def reconcile_qbi_with_receipt(input_frame: Frame) -> PoolStageOutput: "operator_order": list(POOL_DERIVE_OPERATOR_ORDER), "remaining_stage_input_manifest": remaining_stage_manifest_receipt, "schedule_d_capital_gain_distributions": schedule_d_receipt, + "esi_premium_pool_anchor": dict(esi_premium_receipt), "qbi_input_reconciliation": dict(qbi_receipt), }, qbi_transition_authority_sha256=qbi_receipt["sha256"], diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/operator_boundary.py b/packages/microcosm-build/src/microcosm/build/us_runtime/operator_boundary.py index 646b04d968..136910c1a3 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/operator_boundary.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/operator_boundary.py @@ -321,8 +321,9 @@ "retirement_distributions": { "person": frozenset(US_RETIREMENT_DISTRIBUTION_OUTPUT_COLUMNS), }, - # Base-build only (microcosm#454): no pool operator produces these yet, so - # a raw source frame that already carries them was staged elsewhere. + # The base build and the pool's pre-clone operator produce this from the + # raw ASEC coverage columns (microcosm#454), so a raw source frame that + # already carries it was staged elsewhere. "esi_premiums": { "person": frozenset(US_ESI_PREMIUMS_OUTPUT_COLUMNS), }, diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/stacked_spine.py b/packages/microcosm-build/src/microcosm/build/us_runtime/stacked_spine.py index d71320311f..4e880f8e78 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/stacked_spine.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/stacked_spine.py @@ -2728,6 +2728,11 @@ def _terminal_surface_from_pool_registry() -> TargetFamilies: "source_operator_education_inputs", "educational_assistance", ), + ( + "person", + "source_operator_esi_premiums", + "employer_sponsored_insurance_premiums", + ), ( "person", "source_operator_hours_worked", @@ -3539,22 +3544,59 @@ def _authority_receipt( } +#: Target families the pool gained after the canonical v11 authority. The +#: attested schema-9 pools were sealed before them, so the v11 reconstruction +#: those pools are scored against leaves them out. +_POST_V11_AUTHORITY_TARGET_FAMILIES: frozenset[tuple[str, str]] = frozenset( + {("person", "source_operator_esi_premiums")} +) + + +def _without_post_v11_target_families(surface: TargetFamilies) -> TargetFamilies: + """Drop the families a v11 authority could not have declared.""" + + return { + entity: { + family: tuple(targets) + for family, targets in families.items() + if (entity, family) not in _POST_V11_AUTHORITY_TARGET_FAMILIES + } + for entity, families in surface.items() + } + + def _legacy_stacked_authority_receipt() -> dict[str, object]: """Reconstruct the canonical v11 authority for attested schema-9 scoring.""" authority = _make_stacked_authority( authority_id=_STACKED_AUTHORITY_ID, version=11, - gap_fill_plan=_CANONICAL_STACKED_GAP_FILL_PLAN_ANCHOR, - post_puf_transfer_surface=(_CANONICAL_STACKED_POST_PUF_TRANSFER_SURFACE_ANCHOR), - post_puf_puf_producer_surface=( + gap_fill_plan=tuple( + replace( + direction, + target_families=_without_post_v11_target_families( + direction.target_families + ), + ) + for direction in _CANONICAL_STACKED_GAP_FILL_PLAN_ANCHOR + ), + post_puf_transfer_surface=_without_post_v11_target_families( + _CANONICAL_STACKED_POST_PUF_TRANSFER_SURFACE_ANCHOR + ), + post_puf_puf_producer_surface=_without_post_v11_target_families( _CANONICAL_STACKED_POST_PUF_PUF_PRODUCER_SURFACE_ANCHOR ), - post_puf_source_producer_surface=( + post_puf_source_producer_surface=_without_post_v11_target_families( _CANONICAL_STACKED_POST_PUF_SOURCE_PRODUCER_SURFACE_ANCHOR ), - declared_surface=_CANONICAL_STACKED_DECLARED_SURFACE_ANCHOR, - metric_registry=_CANONICAL_ORIGIN_BATTERY_METRIC_REGISTRY_ANCHOR, + declared_surface=_without_post_v11_target_families( + _CANONICAL_STACKED_DECLARED_SURFACE_ANCHOR + ), + metric_registry={ + key: metric + for key, metric in _CANONICAL_ORIGIN_BATTERY_METRIC_REGISTRY_ANCHOR.items() + if key[:2] not in _POST_V11_AUTHORITY_TARGET_FAMILIES + }, joint_metric_registry=_CANONICAL_ORIGIN_BATTERY_JOINT_METRIC_REGISTRY_ANCHOR, support_profile=_CANONICAL_ORIGIN_BATTERY_SUPPORT_PROFILE_ANCHOR, late_producer_schedule=legacy_us_late_producer_schedule_receipt(), @@ -8979,9 +9021,9 @@ def validate_structural_absence_receipt( _surface_target_keys(_freeze_target_families(pool_transfer_target_families())) ) if ( - len(_canonical_surface_keys) != 134 - or len(set(_canonical_surface_keys)) != 134 - or len(_canonical_early_transfer_keys) != 48 + len(_canonical_surface_keys) != 135 + or len(set(_canonical_surface_keys)) != 135 + or len(_canonical_early_transfer_keys) != 49 or len(_canonical_late_transfer_keys) != 70 or len(_canonical_late_puf_producer_keys) != 43 or len(_canonical_late_source_producer_keys) != 29 @@ -8992,7 +9034,7 @@ def validate_structural_absence_receipt( or _canonical_early_transfer_keys & _canonical_late_transfer_keys or _canonical_early_transfer_keys | _canonical_late_transfer_keys != _canonical_full_transfer_keys - or len(_canonical_full_transfer_keys) != 118 + or len(_canonical_full_transfer_keys) != 119 or set(_plan_target_keys(_CANONICAL_STACKED_GAP_FILL_PLAN_ANCHOR)) != _canonical_early_transfer_keys or not _canonical_full_transfer_keys.issubset(_canonical_surface_keys) @@ -9012,9 +9054,9 @@ def validate_structural_absence_receipt( ) ): raise RuntimeError( - "Canonical stacked authority must partition the exact 118-target " - "transfer surface into 48 early gap-fill and 70 post-PUF targets " - "inside an exact 134-target terminal surface and metric registry; " + "Canonical stacked authority must partition the exact 119-target " + "transfer surface into 49 early gap-fill and 70 post-PUF targets " + "inside an exact 135-target terminal surface and metric registry; " "the late surface must be exactly covered by 43 PUF-clone and 29 " "ASEC-source producer targets with their declared two-target overlap." ) @@ -13406,7 +13448,7 @@ class OriginBatterySpec: """Test-seam grouping for per-column battery metrics. Production never accepts these specs from a caller: it consumes the - immutable 134-column canonical registry. The explicit test-authority seam + immutable 135-column canonical registry. The explicit test-authority seam groups its digested registry into specs so the comparison engine can reuse the same loop. ``clone_index`` scopes a fixture comparison to one clone role: 0 compares native rows and 1 compares a PUF arm. @@ -13460,7 +13502,7 @@ def by_origin_battery( *, tail_manifest: Mapping[str, object] | None = None, ) -> GateResult: - """Run the canonical 134-target plus joint by-origin battery.""" + """Run the canonical 135-target plus joint by-origin battery.""" return _by_origin_battery_evaluate( frame, diff --git a/packages/microcosm-build/tests/engine_contract/us/test_imputation_lineage_spec.py b/packages/microcosm-build/tests/engine_contract/us/test_imputation_lineage_spec.py index 84ff79dc76..f37a73c7d4 100644 --- a/packages/microcosm-build/tests/engine_contract/us/test_imputation_lineage_spec.py +++ b/packages/microcosm-build/tests/engine_contract/us/test_imputation_lineage_spec.py @@ -127,12 +127,12 @@ def test_complete_bundle_family_inventory(spec: dict[str, object]) -> None: family["stage"] for family in spec["families"] for _target in family["targets"] ) assert counts == { - "gap_fill_stacked_spine": 13, + "gap_fill_stacked_spine": 14, "primary_puf_qrf": 1, "late_producer_dag": 19, } assert targets == { - "gap_fill_stacked_spine": 48, + "gap_fill_stacked_spine": 49, "primary_puf_qrf": 65, "late_producer_dag": 70, } @@ -145,12 +145,12 @@ def test_dashboard_compiles_the_packaged_bundle_without_a_mirror_spec() -> None: payload = emit() assert payload["spec_binding"]["spec_sha256"] == payload["spec_sha256"] assert payload["counts"] == { - "imputed_variables": 183, - "families": 33, + "imputed_variables": 184, + "families": 34, "computed_producers": 38, "boolean": 45, - "amount": 132, + "amount": 133, "categorical": 5, - "value_kinds": {"amount": 132, "category": 5, "count": 1, "flag": 45}, + "value_kinds": {"amount": 133, "category": 5, "count": 1, "flag": 45}, } assert len(payload["known_gaps"]) == 1 diff --git a/packages/microcosm-build/tests/engine_contract/us/test_spec_engine_coverage_tool.py b/packages/microcosm-build/tests/engine_contract/us/test_spec_engine_coverage_tool.py index 5dd6be077c..9a1c7978e3 100644 --- a/packages/microcosm-build/tests/engine_contract/us/test_spec_engine_coverage_tool.py +++ b/packages/microcosm-build/tests/engine_contract/us/test_spec_engine_coverage_tool.py @@ -82,22 +82,22 @@ def test_us_coverage_is_exact_complete_and_honest( assert_coverage_complete(coverage_report) assert coverage_report["status"] == "pass" fields = coverage_report["field_usage"] - assert fields["configuration_field_count"] == 42_216 - assert fields["authored_normative_field_count"] == 32_436 - assert fields["resolved_binding_field_count"] == 9_780 - assert fields["consumed_field_count"] == 42_216 + assert fields["configuration_field_count"] == 42_386 + assert fields["authored_normative_field_count"] == 32_477 + assert fields["resolved_binding_field_count"] == 9_909 + assert fields["consumed_field_count"] == 42_386 assert fields["unused_field_count"] == 0 assert fields["multiple_primary_use_field_count"] == 0 assert fields["claim_count"] == 49 assert fields["mode_counts"] == { - "legacy_behavior": 14_042, - "compiler_semantic": 27_717, + "legacy_behavior": 14_202, + "compiler_semantic": 27_727, "front_end_validation": 354, "identity_only": 103, } assert fields["generation0_effect_counts"] == { - "legacy_behavior": 38_530, - "no_generation0_effect": 3_686, + "legacy_behavior": 38_690, + "no_generation0_effect": 3_696, } inventory = coverage_report["inventory_coverage"] diff --git a/packages/microcosm-build/tests/engine_contract/us/test_spec_engine_engine_abi.py b/packages/microcosm-build/tests/engine_contract/us/test_spec_engine_engine_abi.py index 75f1c44062..2f51e698a4 100644 --- a/packages/microcosm-build/tests/engine_contract/us/test_spec_engine_engine_abi.py +++ b/packages/microcosm-build/tests/engine_contract/us/test_spec_engine_engine_abi.py @@ -38,15 +38,15 @@ def test_checked_in_us_lock_is_fresh_schema_valid_and_not_authored() -> None: for row in payload["programs"].values() ) remaining = payload["remaining_stage_input_manifest"] - assert len(remaining["rows"]) == 1059 - assert remaining["receipt"]["entry_count"] == 1059 + assert len(remaining["rows"]) == 1075 + assert remaining["receipt"]["entry_count"] == 1075 assert remaining["receipt"]["stage_counts"] == { - "derive": 34, + "derive": 50, "seed": 33, "simulate": 992, } assert remaining["receipt"]["manifest_sha256"] == ( - "0a84565a659a6404cb17715dda36f094a87431c713c7a37bf65a936b16937325" + "d32b748b4e240a7a93c6354925bd2e7af2c493587cc740cd822cda8d8480833c" ) assert ( remaining["receipt"]["ssi_dependency_contract"]["engine_version_ref"] diff --git a/packages/microcosm-build/tests/engine_contract/us/test_spec_engine_stacked_authority_semantics.py b/packages/microcosm-build/tests/engine_contract/us/test_spec_engine_stacked_authority_semantics.py index 95258db5a7..6899dd8509 100644 --- a/packages/microcosm-build/tests/engine_contract/us/test_spec_engine_stacked_authority_semantics.py +++ b/packages/microcosm-build/tests/engine_contract/us/test_spec_engine_stacked_authority_semantics.py @@ -70,16 +70,16 @@ def test_authority_projection_is_field_and_byte_identical_to_live_generation_zer assert projected == live assert stacked_identity_bytes(projected) == _canonical_bytes(live) assert projected["sha256"] == ( - "9d4a9672a0f03039b1fe874b9fe21ed575be0d29f14afc396d03cdf5c809bdd2" + "5d0c9e0c8626e7d5e8ab3f65f9a6b4ce0a15d64aceac4da02ca67b2b879c623c" ) assert { name: component["sha256"] for name, component in projected["components"].items() } == { "declared_surface": ( - "5b5a4470e2612365f253e933833bb08b8f9c857ea0bc175b958ead9a74abee01" + "50d702d3188cf0bfa7aa60b08a9bc9a060967be63838739d2bf42c79f8a4e4ef" ), "gap_fill_plan": ( - "f41319a95750a441676bc6599b1de6bb49a87b45d83b9263d627c402cfe8e750" + "dc8adc1325e253f589e282d45e38ad3544f84b72ce6c2839c4beda6aeac6bc75" ), "joint_metric_registry": ( "cacc6c11e114dbae3aaa2761cc6b3fcb1191cd9b689b1c2bd096614c51ebff8b" @@ -88,7 +88,7 @@ def test_authority_projection_is_field_and_byte_identical_to_live_generation_zer "777979b267e7307581b39d14b7232b6ee2712e3da0029fffc090396ebd849166" ), "metric_registry": ( - "d75cb9b29f8b0a9a085471a11f4c19c32ba04cbe5419053df94ea81cbe6125a9" + "e6ca5f0388a43811ed28c498349745fa1807fb7280167d4b4cae5a81bf9a87f9" ), "post_puf_transfer_surface": ( "a31e8a9512ec829c98745ed9ca2177e66d529bdc4b096ecfa2b4452f7bd41d73" diff --git a/packages/microcosm-build/tests/engine_contract/us/test_spec_engine_typed_closure.py b/packages/microcosm-build/tests/engine_contract/us/test_spec_engine_typed_closure.py index 05f349a724..d2a88f19d2 100644 --- a/packages/microcosm-build/tests/engine_contract/us/test_spec_engine_typed_closure.py +++ b/packages/microcosm-build/tests/engine_contract/us/test_spec_engine_typed_closure.py @@ -51,7 +51,7 @@ def test_us_typed_closure_has_exact_inventory_counts( typed_resources: dict[str, Any], typed_result: TypedClosureResult, ) -> None: - assert len(typed_result.columns) == 176 + assert len(typed_result.columns) == 177 assert len(typed_result.artifacts) == 84 assert len(typed_result.scopes) == 7 assert Counter(artifact.kind for artifact in typed_result.artifacts) == { diff --git a/packages/microcosm-build/tests/engine_contract/us/test_us_acs_local_release_tool.py b/packages/microcosm-build/tests/engine_contract/us/test_us_acs_local_release_tool.py new file mode 100644 index 0000000000..f9488bd362 --- /dev/null +++ b/packages/microcosm-build/tests/engine_contract/us/test_us_acs_local_release_tool.py @@ -0,0 +1,110 @@ +"""The ACS local release tool's engine pass on a lane frame (microcosm #454). + +``fill_reviewed_nulls`` applies the nullable-artifact contract with the +installed engine's input names and defaults. It refuses a frame whose ESI +employer premium is null on some rows, which is what an ACS spine pooled +beside a donor used to carry. The lane now transfers and anchors the column +at staging, so the engine pass must run on its frame. +""" + +from __future__ import annotations + +import json + +import numpy as np +import pytest + +from microcosm.build.source_runtime import SourceRuntimeError +from microcosm.frame import Frame +from test_support.microcosm_build.us_acs_local_esi_premiums import ( + EMPLOYER, + build_lane, + dense_donor, + donor_rows, + raw_acs, +) +from test_support.microcosm_build.us_acs_local_release_tool import ( + load_staging_builder_module, + load_tool_module, +) + +#: An input the donor release carries and no transfer in this fixture gives +#: the ACS rows: the kind of reviewed null the engine pass exists to fill. +_REVIEWED_NULL = "pre_subsidy_rent" + + +def _with_person(frame: Frame, person) -> Frame: + return Frame( + { + entity: person if entity == "person" else frame.table(entity) + for entity in frame.entities + }, + frame.schema, + {"household": frame.weights_for("household")}, + frame.strata, + ) + + +@pytest.fixture(scope="module") +def staged() -> Frame: + """A staged lane frame with one reviewed engine-input null on ACS rows.""" + + frame = build_lane(dense_donor(120), raw_acs(100), n_estimators=5).frame + person = frame.table("person").copy() + person[_REVIEWED_NULL] = np.where(donor_rows(frame), 9_600.0, np.nan) + return _with_person(frame, person) + + +def _summary(tmp_path, frame: Frame): + """The staging summary's null register, as the staging tool audits it.""" + + audit = load_staging_builder_module()._legacy._engine_input_null_audit(frame) + path = tmp_path / "acs_multispine_staging.summary.json" + path.write_text(json.dumps({"reviewed_engine_input_nulls": audit})) + return path, audit + + +def test_the_engine_pass_runs_on_the_lane_frame_and_leaves_the_premium( + tmp_path, staged +) -> None: + tool = load_tool_module() + summary_path, audit = _summary(tmp_path, staged) + # Every row carries the premium, so the staging audit registers no null + # for it: there is nothing for the engine pass to fill or to refuse. + assert EMPLOYER not in {entry["column"] for entry in audit} + assert {entry["column"] for entry in audit} == {_REVIEWED_NULL} + before = staged.table("person")[EMPLOYER].to_numpy(copy=True) + + projected, _dropped = tool.project_input_only(staged) + fills, drift = tool.fill_reviewed_nulls(projected, summary_path) + + person = projected.table("person") + assert [fill["column"] for fill in fills] == [_REVIEWED_NULL] + assert fills[0]["filled_rows"] == 100 + assert fills[0]["missing_rows_by_spine"] == {"acs_2024_1yr": 100} + assert drift == [] + assert person[_REVIEWED_NULL].notna().all() + # The engine knows the premium as an input and the pass did not touch it. + assert EMPLOYER in person.columns + np.testing.assert_array_equal(person[EMPLOYER].to_numpy(), before) + assert (person.loc[~donor_rows(staged), EMPLOYER] > 0).any() + + +def test_the_engine_pass_still_refuses_an_untransferred_acs_spine( + tmp_path, staged +) -> None: + # A staging H5 built before the lane transferred the column: null on ACS + # rows, and registered as a reviewed null by that build's audit. + tool = load_tool_module() + person = staged.table("person").copy() + person.loc[~donor_rows(staged), EMPLOYER] = np.nan + stale = _with_person(staged, person) + summary_path, audit = _summary(tmp_path, stale) + assert EMPLOYER in {entry["column"] for entry in audit} + + with pytest.raises(SourceRuntimeError, match="never filled") as error: + tool.fill_reviewed_nulls(stale, summary_path) + + assert f"'{EMPLOYER}': 100" in str(error.value) + # Refused before any fill: the registered null was not defaulted to zero. + assert stale.table("person")[EMPLOYER].isna().sum() == 100 diff --git a/packages/microcosm-build/tests/engine_contract/us/test_us_bundle_core_contracts.py b/packages/microcosm-build/tests/engine_contract/us/test_us_bundle_core_contracts.py index 64ede4c777..e7e22cf988 100644 --- a/packages/microcosm-build/tests/engine_contract/us/test_us_bundle_core_contracts.py +++ b/packages/microcosm-build/tests/engine_contract/us/test_us_bundle_core_contracts.py @@ -8,8 +8,8 @@ def test_us_catalog_has_complete_explicit_contracts() -> None: __import__("policyengine_us") catalog = build_catalogs() columns = catalog["columns"] - assert len(columns) == 176 - assert len({row["key"] for row in columns}) == 176 + assert len(columns) == 177 + assert len({row["key"] for row in columns}) == 177 assert catalog["metadata_waivers"] == [ { "id": "policyengine_us_unit_unavailable", @@ -34,7 +34,7 @@ def test_us_catalog_has_complete_explicit_contracts() -> None: else: assert "unit_waiver" not in contract assert Counter(row["contract"]["unit"] for row in columns) == { - "unit_not_declared_by_engine_metadata": 89, + "unit_not_declared_by_engine_metadata": 90, "boolean": 51, "count": 27, "categorical": 9, @@ -60,7 +60,7 @@ def test_us_catalog_has_complete_explicit_contracts() -> None: "catalogs": catalog, } ) - assert len(resolved.columns) == 176 + assert len(resolved.columns) == 177 by_key = {row["key"]: row["contract"] for row in columns} for column in resolved.columns: contract = by_key[column.key] diff --git a/packages/microcosm-build/tests/engine_contract/us/test_us_graph.py b/packages/microcosm-build/tests/engine_contract/us/test_us_graph.py index 48a15f7b9b..9d46fbb20c 100644 --- a/packages/microcosm-build/tests/engine_contract/us/test_us_graph.py +++ b/packages/microcosm-build/tests/engine_contract/us/test_us_graph.py @@ -78,7 +78,7 @@ def test_us_post_transfer_rewrites_are_opened_by_identity_filters() -> None: materialize = graph.node("materialize_multispine_agreement_outputs") assert create.structural is StructuralDelta.CREATE - assert len(create.outputs) == 76 + assert len(create.outputs) == 86 assert all(not owned.rewrite for owned in create.outputs) for stage in _STAGES[:3]: @@ -90,8 +90,10 @@ def test_us_post_transfer_rewrites_are_opened_by_identity_filters() -> None: schedule_d = ("person", "schedule_d_capital_gain_distributions") assert _coordinates(prepare) == {schedule_d} assert all(owned.rewrite for owned in prepare.outputs) - assert len(derive.outputs) == 17 + assert len(derive.outputs) == 18 assert all(owned.rewrite for owned in derive.outputs) + # The ESI premium pool anchor rescales transferred employer premiums. + assert ("person", "employer_sponsored_insurance_premiums") in _coordinates(derive) seed_by_coordinate = {(owned.entity, owned.column): owned for owned in seed.outputs} assert len(seed_by_coordinate) == 17 diff --git a/packages/microcosm-build/tests/engine_contract/us/test_us_multispine_pool.py b/packages/microcosm-build/tests/engine_contract/us/test_us_multispine_pool.py index 1fd8fde606..66b415162d 100644 --- a/packages/microcosm-build/tests/engine_contract/us/test_us_multispine_pool.py +++ b/packages/microcosm-build/tests/engine_contract/us/test_us_multispine_pool.py @@ -29,7 +29,7 @@ def test_production_operator_invocations_are_total_and_guarded( ( multispine_pool_module.prepare_multispine_source_inputs_for_clone, POOL_PRE_CLONE_SOURCE_OPERATOR_ORDER, - {"_run_source_operator_chain"}, + {"_run_source_operator_chain", "_with_pool_us_esi_premium_inputs"}, ), ( multispine_pool_module._post_clone_source_operators, @@ -49,6 +49,7 @@ def test_production_operator_invocations_are_total_and_guarded( "us_qbi_reconciliation_change_receipt", "validate_us_qbi_reconciliation_live_output", "validate_us_qbi_reconciliation_transition", + "with_us_esi_premium_pool_anchor", "with_us_qbi_input_reconciliation", }, ), @@ -147,8 +148,8 @@ def observe_guarded_chain( for phase in contract.phases } assert observed_placements == registered_placements - assert len({name for name, _phase in observed_placements}) == 23 - assert len(observed_placements) == 24 + assert len({name for name, _phase in observed_placements}) == 25 + assert len(observed_placements) == 26 def test_derive_stage_rejects_preclone_pool_before_kernels( @@ -196,15 +197,15 @@ def test_derive_stage_keeps_whole_pool_qbi_reconciliation() -> None: person["self_employment_income_before_lsr"] = 10.0 person["SEMP"] = 10.0 person["sstb_self_employment_income_before_lsr"] = 5.0 - frame = _replace_person(frame, person) + frame = _with_esi_premium_pool_surface(_replace_person(frame, person)) result = multispine_pool_module.derive_multispine_pool_inputs(frame) derived = result.frame.table("person") assert result.receipt["operator_order"] == list(POOL_DERIVE_OPERATOR_ORDER) - assert result.receipt["remaining_stage_input_manifest"]["entry_count"] == 1059 + assert result.receipt["remaining_stage_input_manifest"]["entry_count"] == 1075 assert result.receipt["remaining_stage_input_manifest"]["stage_counts"] == { - "derive": 34, + "derive": 50, "seed": 33, "simulate": 992, } diff --git a/packages/microcosm-build/tests/engine_contract/us/test_us_stacked_spine.py b/packages/microcosm-build/tests/engine_contract/us/test_us_stacked_spine.py index 632aaf756a..da856748b5 100644 --- a/packages/microcosm-build/tests/engine_contract/us/test_us_stacked_spine.py +++ b/packages/microcosm-build/tests/engine_contract/us/test_us_stacked_spine.py @@ -1,6 +1,9 @@ """Tests split from packages/microcosm-build/tests/test_us_stacked_spine.py.""" # ruff: noqa: F403, F405 +from test_support.microcosm_build.us_multispine_pool import ( + _with_esi_premium_pool_surface, +) from test_support.microcosm_build.us_stacked_spine import * @@ -77,7 +80,7 @@ def test_puf_finalize_masks_earnings_allocation_to_age_15_plus() -> None: assert len(all_child) == 2 assert all_child[list(predictions)].eq(0.0).all().all() - derived = derive_multispine_pool_inputs(finalized) + derived = derive_multispine_pool_inputs(_with_esi_premium_pool_surface(finalized)) derived_person = derived.frame.table("person") qbi_receipt = derived.receipt["qbi_input_reconciliation"] diff --git a/packages/microcosm-build/tests/engine_free/shared/test_spec_engine_battery_semantics.py b/packages/microcosm-build/tests/engine_free/shared/test_spec_engine_battery_semantics.py index ca1b720aaf..d998a760e8 100644 --- a/packages/microcosm-build/tests/engine_free/shared/test_spec_engine_battery_semantics.py +++ b/packages/microcosm-build/tests/engine_free/shared/test_spec_engine_battery_semantics.py @@ -52,12 +52,12 @@ def test_battery_registry_views_match_live_registry( ) -> None: views = derive_battery_registry_views(battery) assert views["declared_surface"] == _json_ready(CANONICAL_STACKED_DECLARED_SURFACE) - assert views["required_scalar_targets"] == 134 + assert views["required_scalar_targets"] == 135 assert views["required_joint_targets"] == 1 assert views["metric_counts"] == { "boolean_incidence": 51, "categorical_tvd": 4, - "monetary_sign_separated": 79, + "monetary_sign_separated": 80, } @@ -129,7 +129,7 @@ def test_battery_legacy_projection_survives_resolved_normalization( assert projected["gates"][1]["metric"]["params"] == { **battery["gates"][1]["metric"]["params"], "required_joint_targets": 1, - "required_scalar_targets": 134, + "required_scalar_targets": 135, } diff --git a/packages/microcosm-build/tests/engine_free/shared/test_spec_engine_compiler_ir.py b/packages/microcosm-build/tests/engine_free/shared/test_spec_engine_compiler_ir.py index b025205ae5..f4873b3e41 100644 --- a/packages/microcosm-build/tests/engine_free/shared/test_spec_engine_compiler_ir.py +++ b/packages/microcosm-build/tests/engine_free/shared/test_spec_engine_compiler_ir.py @@ -140,10 +140,10 @@ def test_us_node_slices_are_transitive_and_content_attested( def test_ir_retains_all_typed_resolution_products(compiled_us: CompiledSpecIR) -> None: inventory = compiled_us.typed_inventory assert len(inventory["entities"]) == 8 - assert len(inventory["columns"]) == 176 + assert len(inventory["columns"]) == 177 assert len(inventory["artifacts"]) == 84 assert len(inventory["scopes"]) == 7 - assert len(inventory["references"]) == 334 + assert len(inventory["references"]) == 335 assert "engine_abi_lock" in compiled_us.generated_authorities assert "records" in compiled_us.vintage_authorities assert set(compiled_us.surfaces) == { diff --git a/packages/microcosm-build/tests/engine_free/shared/test_spec_engine_field_usage.py b/packages/microcosm-build/tests/engine_free/shared/test_spec_engine_field_usage.py index 4babaf7512..8766f27982 100644 --- a/packages/microcosm-build/tests/engine_free/shared/test_spec_engine_field_usage.py +++ b/packages/microcosm-build/tests/engine_free/shared/test_spec_engine_field_usage.py @@ -95,22 +95,22 @@ def _mutated_bundle( def test_exact_complete_ledger_has_one_primary_mode_per_pointer(field_ledger) -> None: - assert len(field_ledger.fields) == EXPECTED_CONFIGURATION_FIELD_COUNT == 42_216 + assert len(field_ledger.fields) == EXPECTED_CONFIGURATION_FIELD_COUNT == 42_386 assert field_ledger.source_counts == { - "authored": 32_436, - "resolved_bindings": 9_780, + "authored": 32_477, + "resolved_bindings": 9_909, } assert field_ledger.mode_counts == { - "legacy_behavior": 14_042, - "compiler_semantic": 27_717, + "legacy_behavior": 14_202, + "compiler_semantic": 27_727, "front_end_validation": 354, "identity_only": 103, } assert field_ledger.generation0_effect_counts == { - "legacy_behavior": 38_530, - "no_generation0_effect": 3_686, + "legacy_behavior": 38_690, + "no_generation0_effect": 3_696, } - assert len({field.pointer for field in field_ledger.fields}) == 42_216 + assert len({field.pointer for field in field_ledger.fields}) == 42_386 def test_eligibility_concepts_are_validation_not_generation0_behavior( diff --git a/packages/microcosm-build/tests/engine_free/shared/test_spec_engine_legacy_adapter.py b/packages/microcosm-build/tests/engine_free/shared/test_spec_engine_legacy_adapter.py index ab44443757..6e91ec4f6c 100644 --- a/packages/microcosm-build/tests/engine_free/shared/test_spec_engine_legacy_adapter.py +++ b/packages/microcosm-build/tests/engine_free/shared/test_spec_engine_legacy_adapter.py @@ -197,7 +197,7 @@ def test_adapter_preserves_generation_zero_identity_components( imputation = legacy_payload["imputation"] assert isinstance(imputation, dict) assert legacy_payload["stacked_authority_receipt"]["sha256"] == ( - "9d4a9672a0f03039b1fe874b9fe21ed575be0d29f14afc396d03cdf5c809bdd2" + "5d0c9e0c8626e7d5e8ab3f65f9a6b4ce0a15d64aceac4da02ca67b2b879c623c" ) assert imputation["late_producer_schedule_receipt"]["schedule_sha256"] == ( "e59c019d3d454eac99ac0ac209b6c5b6faaf9bdfcaeee18c36a25be19bf7da2f" diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_acs_local_esi_premiums.py b/packages/microcosm-build/tests/engine_free/us/test_us_acs_local_esi_premiums.py new file mode 100644 index 0000000000..c6cc014192 --- /dev/null +++ b/packages/microcosm-build/tests/engine_free/us/test_us_acs_local_esi_premiums.py @@ -0,0 +1,1042 @@ +"""ESI employer premiums on the ACS local lane's ACS spine (microcosm #454). + +The lane pools a dense ASEC-by-PUF donor release with the ACS spine +(``with_optional_acs_spine``): the donor keeps ``1 - acs_share`` of its +household mass and ACS takes the rest. The donor carries the premium from the +``meps_esi_premiums`` stage; the lane transfers it onto the ACS rows from the +donor's ASEC observation role and anchors the pooled frame. + +Invariants of :func:`with_acs_local_esi_premium_anchor`, for every lane frame: + +* **Conservation**: the lane-wide weighted employer premium equals the donor + rows' total divided by their share of household mass. Pooling multiplies + every donor household weight by that share, so this is the donor release's + own weighted column. +* **Equal intensity**: both spines carry the same weighted premium per unit of + household mass. +* **Donor rows are immutable**: no donor cell changes by a byte. +* **Structural zeros**: an ACS person who reports zero wages carries no + premium, and neither does one below age 15, whose wage ACS leaves blank. +* **No invented zeros**: a blank wage at age 15 or older is refused, and the + frame's own blanks are never overwritten. +* **Proportionality**: every other ACS premium is one common multiple of the + value the transfer drew. +* **Idempotence**: an anchored frame is returned unchanged. +* **Identity independence**: ACS ids that repeat the donor's change nothing. +""" + +from __future__ import annotations + +import importlib.util +import json +from functools import cache +from pathlib import Path + +import numpy as np +import pandas as pd +import pytest +from hypothesis import HealthCheck, assume, given, settings +from hypothesis import strategies as st + +from microcosm.build.source_runtime import SourceRuntimeError +from microcosm.build.us_runtime import acs_multispine +from microcosm.build.us_runtime import esi_premiums as esi +from microcosm.build.us_runtime.acs_inputs import map_acs_native_inputs +from microcosm.build.us_runtime.acs_local_esi_premiums import ( + ACS_LOCAL_ESI_PREMIUM_FAMILY, + acs_local_esi_premium_gate_payload, + acs_local_esi_premium_gates, + acs_local_esi_premium_transfer_target_families, + prepare_acs_local_esi_premium_donor, + with_acs_local_esi_premium_anchor, +) +from microcosm.build.us_runtime.acs_local_hours import ( + acs_local_transfer_target_families, +) +from microcosm.build.us_runtime.acs_pums import AcsPumsSource +from microcosm.build.us_runtime.acs_transfer import ( + declared_acs_transfer_target_families, + transfer_acs_inputs, +) +from microcosm.build.us_runtime.esi_premiums import ( + US_ESI_PREMIUMS_OUTPUT_COLUMNS, + refuse_unassigned_us_esi_premiums, + us_esi_premiums_anchor_gate, + us_esi_premiums_signal_gate, + with_us_esi_premium_pool_anchor, +) +from microcosm.build.us_runtime.h5_io import ( + LEGACY_NULLABLE_STAGING_ARTIFACT_KIND, + load_legacy_calibrated_us_h5, + write_nullable_us_h5, +) +from microcosm.build.us_runtime.multispine_pool import pool_transfer_target_families +from microcosm.frame import US_SCHEMA, Frame, WeightKind, Weights +from test_support.microcosm_build.us_acs_local_esi_premiums import ( + ACS, + ASEC_PUF, + EMPLOYER, + WAGES, + build_lane, + dense_donor, + donor_rows, + employer_total, + household_mass_share, + person_weights, + pooled, + raw_acs, + reweighted, + transferred_acs, +) + +#: The stage's scale anchor for CY2024, read from the stage, not restated. +ANCHOR = float(esi.EMPLOYER_PREMIUM_ANCHOR["values"]["2024"]) +RAW = tuple( + column + for column in esi.US_ESI_PREMIUMS_REQUIRED_SOURCE_COLUMNS + if column != "state_fips" +) +#: Above every donor id, so ACS ids do not repeat the donor's. +_DISJOINT_FIRST_ID = 5_000_000 + +requires_pytables = pytest.mark.skipif( + importlib.util.find_spec("tables") is None, + reason="requires pytables (the build environment)", +) + + +def _column(frame: Frame, column: str) -> np.ndarray: + return frame.table("person")[column].to_numpy(dtype=float) + + +def _replace_person(frame: Frame, person: pd.DataFrame) -> Frame: + return Frame( + { + entity: person if entity == "person" else frame.table(entity) + for entity in frame.entities + }, + frame.schema, + {"household": frame.weights_for("household")}, + frame.strata, + ) + + +# --- The lane's plan leaves the shared plans alone ---------------------------- + + +def test_the_lane_plan_names_the_premium_and_changes_no_shared_plan() -> None: + declared_before = declared_acs_transfer_target_families() + pool_before = pool_transfer_target_families() + + local = acs_local_esi_premium_transfer_target_families() + + assert local == {"person": {ACS_LOCAL_ESI_PREMIUM_FAMILY: (EMPLOYER,)}} + assert local["person"][ACS_LOCAL_ESI_PREMIUM_FAMILY] == ( + US_ESI_PREMIUMS_OUTPUT_COLUMNS + ) + assert declared_acs_transfer_target_families() == declared_before + assert pool_transfer_target_families() == pool_before + # The declared plan still does not own the column, so the stacked pool + # keeps it under its own pool-local family, where the early fill reads it. + declared_targets = { + target + for families in declared_before.values() + for targets in families.values() + for target in targets + } + assert EMPLOYER not in declared_targets + assert pool_before["person"][ACS_LOCAL_ESI_PREMIUM_FAMILY] == (EMPLOYER,) + # The hours plan the staging tool composes with is untouched too. + assert EMPLOYER not in { + target + for families in acs_local_transfer_target_families().values() + for targets in families.values() + for target in targets + } + + +# --- Donor qualification ------------------------------------------------------ + + +def test_the_donor_is_its_asec_observation_role_with_measured_wages() -> None: + donor = dense_donor() + before = {entity: donor.table(entity).copy() for entity in donor.entities} + + selected, receipt = prepare_acs_local_esi_premium_donor(donor) + + person = selected.table("person") + assert len(person) == 320 + assert set(person["person_support_channel"]) == {"asec"} + assert set(person["person_support_clone_index"]) == {0} + # Measured wages: a premium only where the person has wages. + assert not ((person[EMPLOYER] > 0) & ~(person[WAGES] > 0)).any() + assert receipt["donor_channel"] == "asec" + assert receipt["donor_rows"] == 640 + assert receipt["asec_observation_rows"] == 320 + assert receipt["asec_observation_premium_share_without_wages"] == 0.0 + assert receipt["donor_employer_premium_total"] == pytest.approx( + employer_total(donor), rel=1e-12 + ) + assert receipt["donor_signal_gate"] == {"passed": True, "failures": []} + for entity in donor.entities: + pd.testing.assert_frame_equal(donor.table(entity), before[entity]) + + +def _donor_without(*columns: str) -> Frame: + donor = dense_donor(80) + return _replace_person(donor, donor.table("person").drop(columns=list(columns))) + + +@pytest.mark.parametrize("column", [EMPLOYER, "NOW_OWNGRP", "PEIO1COW"]) +def test_a_donor_built_without_the_stage_is_refused(column: str) -> None: + with pytest.raises(ValueError, match="meps_esi_premiums stage") as error: + prepare_acs_local_esi_premium_donor(_donor_without(column)) + assert column in str(error.value) + assert "never defaults" in str(error.value) + + +def test_a_donor_without_the_cps_record_id_is_refused() -> None: + with pytest.raises(ValueError, match="lacks 'PERIDNUM'"): + prepare_acs_local_esi_premium_donor(_donor_without("PERIDNUM")) + + +def test_a_donor_row_with_raw_fields_and_no_record_id_is_refused() -> None: + # The record id and the raw fields must agree on every row. + donor = dense_donor(80) + person = donor.table("person").copy() + person["PERIDNUM"] = person["PERIDNUM"].astype(object) + person.loc[person.index[3], "PERIDNUM"] = None + with pytest.raises(ValueError, match="without a CPS record id"): + prepare_acs_local_esi_premium_donor(_replace_person(donor, person)) + + +def test_a_donor_without_wages_is_refused() -> None: + with pytest.raises(ValueError, match="conditions the premium on"): + prepare_acs_local_esi_premium_donor(_donor_without(WAGES)) + + +def test_a_donor_whose_observation_role_has_missing_wages_is_refused() -> None: + donor = dense_donor(80) + person = donor.table("person").copy() + person.loc[person["person_support_clone_index"].eq(0).idxmax(), WAGES] = np.nan + with pytest.raises(ValueError, match="never treats a missing wage as zero"): + prepare_acs_local_esi_premium_donor(_replace_person(donor, person)) + + +def test_a_donor_without_support_roles_is_refused() -> None: + donor = dense_donor(80) + tables = { + entity: donor.table(entity).drop( + columns=[ + f"{entity}_source_id", + f"{entity}_support_channel", + f"{entity}_support_clone_index", + ] + ) + for entity in donor.entities + } + unclassified = Frame( + tables, US_SCHEMA, {"household": donor.weights_for("household")} + ) + with pytest.raises(ValueError, match="explicit legacy ASEC observation roles"): + prepare_acs_local_esi_premium_donor(unclassified) + + +def test_an_assembled_multispine_donor_is_refused() -> None: + donor = dense_donor(80) + person = donor.table("person").copy() + person["person_spine_source_id"] = person["person_source_id"] + with pytest.raises(ValueError, match="multispine records need their own"): + prepare_acs_local_esi_premium_donor(_replace_person(donor, person)) + + +def test_a_donor_failing_the_stage_signal_gate_is_refused() -> None: + # A premium outside its MEPS-IC cell: no longer one common multiple. + donor = dense_donor(80) + person = donor.table("person").copy() + positive = person[EMPLOYER] > 0 + person.loc[positive.idxmax(), EMPLOYER] *= 3.0 + with pytest.raises(ValueError, match="fails the meps_esi_premiums signal gate"): + prepare_acs_local_esi_premium_donor(_replace_person(donor, person)) + + +# --- The anchor on every lane frame ------------------------------------------- + +_amount = st.one_of( + st.just(0.0), + st.floats(min_value=1.0, max_value=40_000.0, allow_nan=False), +) +_weight = st.floats(min_value=0.5, max_value=5_000.0, allow_nan=False) + + +@cache +def _small_donor() -> Frame: + return dense_donor(40) + + +@st.composite +def _lane_cases(draw) -> dict[str, object]: + """Any donor weights, any share, and any ACS households and draws. + + The donor's household weights are rescaled one by one, so the donor rows + do not share one weight profile; ACS households hold one to several + people. + """ + + people = draw(st.integers(min_value=2, max_value=10)) + premiums = np.asarray(draw(st.lists(_amount, min_size=people, max_size=people))) + wages = np.asarray(draw(st.lists(_amount, min_size=people, max_size=people))) + # Some ACS people are children: PUMS leaves their wage blank. + child = np.asarray(draw(st.lists(st.booleans(), min_size=people, max_size=people))) + wages = np.where(child, np.nan, wages) + ages = np.where(child, 9.0, 30.0 + np.arange(people)) + joins = draw(st.lists(st.booleans(), min_size=people - 1, max_size=people - 1)) + households = np.concatenate([[0], np.cumsum(~np.asarray(joins, dtype=bool))]) + count = int(households.max()) + 1 + weights = np.asarray(draw(st.lists(_weight, min_size=count, max_size=count))) + assume(((premiums > 0) & (wages > 0)).any()) + donor = _small_donor() + factors = np.asarray( + draw( + st.lists( + st.floats(min_value=0.05, max_value=20.0), + min_size=donor.n("household"), + max_size=donor.n("household"), + ) + ) + ) + scale = draw(st.floats(min_value=0.01, max_value=100.0)) + return { + "premiums": premiums, + "wages": wages, + "ages": ages, + "weights": weights, + "households": households, + "acs_share": draw(st.floats(min_value=0.05, max_value=0.95)), + "donor": reweighted(donor, factors * scale), + } + + +def _lane_frame(case: dict[str, object], *, first_id: int = 1) -> Frame: + acs = transferred_acs( + case["premiums"], + case["wages"], + case["weights"], + households=case["households"], + ages=case["ages"], + first_id=first_id, + ) + return pooled(case["donor"], acs, acs_share=case["acs_share"]) + + +_SETTINGS = settings( + max_examples=60, + deadline=None, + suppress_health_check=[HealthCheck.too_slow, HealthCheck.filter_too_much], +) + + +@given(_lane_cases()) +@_SETTINGS +def test_lane_total_is_the_donor_rows_total_over_their_mass_share(case) -> None: + frame = _lane_frame(case) + donor = donor_rows(frame) + share = household_mass_share(frame, donor) + + anchored, receipt = with_acs_local_esi_premium_anchor(frame) + + # Pooling leaves the donor spine 1 - acs_share of the household mass. + assert share == pytest.approx(1.0 - case["acs_share"], rel=1e-9) + assert receipt["source_household_mass_share"] == pytest.approx(share, rel=1e-12) + expected = employer_total(frame, donor) / share + assert employer_total(anchored) == pytest.approx(expected, rel=1e-9) + assert receipt["employer_premium_total"] == pytest.approx(expected, rel=1e-9) + # Differential: that is the donor release's column at its own weights. + assert employer_total(anchored) == pytest.approx( + employer_total(case["donor"]), rel=1e-9 + ) + + +@given(_lane_cases()) +@_SETTINGS +def test_both_spines_carry_the_same_premium_per_unit_of_household_mass(case) -> None: + frame = _lane_frame(case) + donor = donor_rows(frame) + share = household_mass_share(frame, donor) + + anchored, _receipt = with_acs_local_esi_premium_anchor(frame) + + assert employer_total(anchored, ~donor) / (1.0 - share) == pytest.approx( + employer_total(anchored, donor) / share, rel=1e-9 + ) + + +@given(_lane_cases()) +@_SETTINGS +def test_donor_rows_and_every_other_column_are_untouched(case) -> None: + frame = _lane_frame(case) + donor = donor_rows(frame) + + anchored, _receipt = with_acs_local_esi_premium_anchor(frame) + + before, after = frame.table("person"), anchored.table("person") + assert list(after.columns) == list(before.columns) + pd.testing.assert_frame_equal(after.loc[donor], before.loc[donor]) + untouched = [column for column in before.columns if column != EMPLOYER] + pd.testing.assert_frame_equal(after[untouched], before[untouched]) + for entity in frame.entities: + if entity != "person": + pd.testing.assert_frame_equal(anchored.table(entity), frame.table(entity)) + np.testing.assert_array_equal(person_weights(anchored), person_weights(frame)) + assert anchored.weights_for("household").kind is WeightKind.IMPORTANCE + assert list(anchored.strata) == list(frame.strata) + assert anchored.mass_log == frame.mass_log + + +@given(_lane_cases()) +@_SETTINGS +def test_acs_people_without_wages_carry_nothing_and_the_rest_one_multiple( + case, +) -> None: + frame = _lane_frame(case) + donor = donor_rows(frame) + workers = _column(frame, WAGES) > 0 + + anchored, receipt = with_acs_local_esi_premium_anchor(frame) + + cleared = ~donor & ~workers + assert not _column(anchored, EMPLOYER)[cleared].any() + assert receipt["cleared_rows"][EMPLOYER] == int( + (cleared & (_column(frame, EMPLOYER) > 0)).sum() + ) + scaled = ~donor & workers + np.testing.assert_allclose( + _column(anchored, EMPLOYER)[scaled], + _column(frame, EMPLOYER)[scaled] * receipt["scale_factor"], + rtol=1e-12, + ) + values = _column(anchored, EMPLOYER) + assert np.isfinite(values).all() and (values >= 0).all() + # Every row carries the premium: nothing for a null fill to refuse. + refuse_unassigned_us_esi_premiums(anchored, consumer="lane property") + + +@given(_lane_cases()) +@_SETTINGS +def test_an_anchored_lane_frame_is_returned_unchanged(case) -> None: + anchored, first = with_acs_local_esi_premium_anchor(_lane_frame(case)) + + again, second = with_acs_local_esi_premium_anchor(anchored) + + assert first["status"] in {"scaled", "already_on_anchor"} + assert again is anchored + assert second["status"] == "already_on_anchor" + assert second["employer_premium_total"] == pytest.approx( + first["employer_premium_total"], rel=1e-12 + ) + + +@given(_lane_cases()) +@_SETTINGS +def test_acs_ids_that_repeat_the_donors_change_nothing(case) -> None: + # The pool kernel finds a clone's wages by person_source_id across the + # whole frame, and refuses a frame where source records repeat one. In + # this lane ACS rows keep their pre-remap ids as source ids. + colliding = _lane_frame(case, first_id=1) + disjoint = _lane_frame(case, first_id=_DISJOINT_FIRST_ID) + acs = ~donor_rows(colliding) + assert set(colliding.table("person").loc[acs, "person_source_id"]) & set( + colliding.table("person").loc[~acs, "person_source_id"] + ) + with pytest.raises(SourceRuntimeError, match="repeat a 'person_source_id'"): + with_us_esi_premium_pool_anchor(colliding) + + anchored, receipt = with_acs_local_esi_premium_anchor(colliding) + reference, reference_receipt = with_acs_local_esi_premium_anchor(disjoint) + + np.testing.assert_array_equal( + _column(anchored, EMPLOYER), _column(reference, EMPLOYER) + ) + assert receipt["scale_factor"] == reference_receipt["scale_factor"] + if np.isnan(case["wages"]).any(): + # The kernel alone has no universe rule for a blank ACS wage. + with pytest.raises(SourceRuntimeError, match="missing wage is not a zero"): + with_us_esi_premium_pool_anchor(disjoint) + return + # Differential: where the ids are unique the kernel runs on the whole + # frame, and the lane's narrow view gives the same bytes. + whole, whole_receipt = with_us_esi_premium_pool_anchor(disjoint) + np.testing.assert_array_equal( + _column(reference, EMPLOYER), _column(whole, EMPLOYER) + ) + assert reference_receipt["scale_factor"] == whole_receipt["scale_factor"] + assert reference_receipt["cleared_rows"] == whole_receipt["cleared_rows"] + + +def test_the_worked_lane_frame() -> None: + # Donor release: 40 one-person households cloned once. ACS: three people, + # one without wages. acs_share 0.25 leaves the donor 0.75 of the mass. + donor = _small_donor() + release_total = employer_total(donor) + acs = transferred_acs( + np.asarray([10_000.0, 5_000.0, 8_000.0]), + np.asarray([50_000.0, 0.0, 20_000.0]), + np.asarray([1.0, 1.0, 2.0]), + ) + frame = pooled(donor, acs, acs_share=0.25) + rows = donor_rows(frame) + + anchored, receipt = with_acs_local_esi_premium_anchor(frame) + + assert receipt["source_household_mass_share"] == pytest.approx(0.75, rel=1e-12) + assert employer_total(frame, rows) == pytest.approx(0.75 * release_total, rel=1e-9) + assert receipt["transferred_employer_premium_target"] == pytest.approx( + 0.25 * release_total, rel=1e-9 + ) + assert receipt["cleared_rows"] == {EMPLOYER: 1} + assert employer_total(anchored) == pytest.approx(release_total, rel=1e-9) + premiums = _column(anchored, EMPLOYER)[~rows] + # One factor on the two workers: 10,000 and 8,000 keep their ratio. + assert premiums[1] == 0.0 + assert premiums[0] / premiums[2] == pytest.approx(10_000.0 / 8_000.0, rel=1e-12) + + +def test_a_transferred_support_clone_is_refused() -> None: + frame = pooled( + _small_donor(), + transferred_acs(np.asarray([9_000.0]), np.asarray([30_000.0]), np.ones(1)), + ) + person = frame.table("person").copy() + person.loc[~donor_rows(frame), "person_support_clone_index"] = 1 + with pytest.raises(SourceRuntimeError, match="not clone-0 source records"): + with_acs_local_esi_premium_anchor(_replace_person(frame, person)) + + +@pytest.mark.parametrize("column", [EMPLOYER, "NOW_HIPAID", "PERIDNUM", WAGES]) +def test_a_lane_frame_missing_an_anchor_input_is_refused(column: str) -> None: + frame = pooled( + _small_donor(), + transferred_acs(np.asarray([9_000.0]), np.asarray([30_000.0]), np.ones(1)), + ) + person = frame.table("person").drop(columns=[column]) + with pytest.raises(SourceRuntimeError, match="the person table lacks") as error: + with_acs_local_esi_premium_anchor(_replace_person(frame, person)) + assert column in str(error.value) + + +def test_acs_rows_with_no_premium_on_any_worker_are_refused() -> None: + # Nothing to scale: the anchor cannot put the ACS half on the donor's + # scale, so staging fails rather than shipping half the column. + frame = pooled( + _small_donor(), + transferred_acs( + np.asarray([0.0, 7_000.0]), np.asarray([30_000.0, 0.0]), np.ones(2) + ), + ) + with pytest.raises(SourceRuntimeError, match="nothing to scale"): + with_acs_local_esi_premium_anchor(frame) + + +def test_a_multi_person_household_scales_as_one_unit_of_mass() -> None: + # Three ACS people in one household and one alone: the household's mass + # counts once, and its non-worker is cleared. + donor = _small_donor() + acs = transferred_acs( + np.asarray([6_000.0, 4_000.0, 5_000.0, 3_000.0]), + np.asarray([40_000.0, 25_000.0, 0.0, 30_000.0]), + np.asarray([3.0, 1.0]), + households=np.asarray([0, 0, 0, 1]), + ) + frame = pooled(donor, acs, acs_share=0.4) + rows = donor_rows(frame) + + anchored, receipt = with_acs_local_esi_premium_anchor(frame) + + assert household_mass_share(frame, rows) == pytest.approx(0.6, rel=1e-12) + assert receipt["cleared_rows"] == {EMPLOYER: 1} + assert employer_total(anchored) == pytest.approx(employer_total(donor), rel=1e-9) + premiums = _column(anchored, EMPLOYER)[~rows] + assert premiums[2] == 0.0 + np.testing.assert_allclose( + premiums[[0, 1, 3]] / receipt["scale_factor"], [6_000.0, 4_000.0, 3_000.0] + ) + + +def _lane_with_a_child(**changes) -> Frame: + """Two ACS adults and one nine-year-old whose wage PUMS left blank.""" + + columns = { + "premiums": np.asarray([8_000.0, 5_000.0, 6_000.0]), + "wages": np.asarray([40_000.0, np.nan, 30_000.0]), + "ages": np.asarray([41.0, 9.0, 52.0]), + } | changes + acs = transferred_acs( + columns["premiums"], columns["wages"], np.ones(3), ages=columns["ages"] + ) + return pooled(_small_donor(), acs) + + +def test_a_blank_acs_wage_below_fifteen_is_a_zero_wage_in_the_anchor_only() -> None: + frame = _lane_with_a_child() + acs = ~donor_rows(frame) + + anchored, receipt = with_acs_local_esi_premium_anchor(frame) + + premiums = _column(anchored, EMPLOYER)[acs] + assert premiums[1] == 0.0 and (premiums[[0, 2]] > 0).all() + assert receipt["cleared_rows"] == {EMPLOYER: 1} + assert receipt["wage_universe"] == { + "rule_id": "acs_2024_pums_wagp_age_15_plus", + "minimum_age": 15, + "raw_source_column": "WAGP", + "transferred_rows_with_blank_wage": 1, + "transferred_rows_outside_universe_read_as_zero": 1, + "frame_cells_written": 0, + } + # The staging frame keeps the source's blank: no zero is written to it. + np.testing.assert_array_equal( + _column(anchored, WAGES)[acs], [40_000.0, np.nan, 30_000.0] + ) + assert employer_total(anchored) == pytest.approx( + employer_total(_small_donor()), rel=1e-9 + ) + + +@pytest.mark.parametrize("age", [15.0, 40.0, np.nan]) +def test_a_blank_wage_at_fifteen_or_older_is_refused(age: float) -> None: + # Fifteen is inside the PUMS earnings universe, and an unknown age is not + # evidence of being outside it. + frame = _lane_with_a_child(ages=np.asarray([41.0, age, 52.0])) + with pytest.raises(SourceRuntimeError, match="missing wage is not a zero wage"): + with_acs_local_esi_premium_anchor(frame) + + +def test_a_child_whose_raw_wage_is_not_blank_is_not_read_as_zero() -> None: + # The mapped wage is null but PUMS reported one: that is a mapping fault, + # not the universe rule. + frame = _lane_with_a_child() + person = frame.table("person").copy() + acs = ~donor_rows(frame) + person["WAGP"] = np.where(acs, 1_200.0, np.nan) + with pytest.raises(SourceRuntimeError, match="missing wage is not a zero wage"): + with_acs_local_esi_premium_anchor(_replace_person(frame, person)) + + +def test_a_blank_raw_wage_below_fifteen_corroborates_the_universe_rule() -> None: + frame = _lane_with_a_child() + person = frame.table("person").copy() + acs = ~donor_rows(frame) + person["WAGP"] = np.nan + person.loc[acs, "WAGP"] = [40_000.0, np.nan, 30_000.0] + + _anchored, receipt = with_acs_local_esi_premium_anchor( + _replace_person(frame, person) + ) + + assert ( + receipt["wage_universe"]["transferred_rows_outside_universe_read_as_zero"] == 1 + ) + + +def test_an_untransferred_acs_spine_is_refused_by_the_anchor() -> None: + # A lane frame whose ACS rows never got the premium: null, never zero. + frame = pooled( + _small_donor(), + transferred_acs(np.asarray([np.nan]), np.asarray([30_000.0]), np.ones(1)), + ) + with pytest.raises(SourceRuntimeError, match="the transfer left a gap"): + with_acs_local_esi_premium_anchor(frame) + with pytest.raises(SourceRuntimeError, match="never filled"): + refuse_unassigned_us_esi_premiums(frame, consumer="ACS local release") + + +# --- The staging orchestration, with the real transfer ------------------------ + + +@pytest.fixture(scope="module") +def lane() -> dict[str, object]: + donor = dense_donor() + result = build_lane(donor, raw_acs()) + return {"donor": donor, "result": result, "frame": result.frame} + + +def test_every_lane_row_carries_the_premium(lane) -> None: + frame = lane["frame"] + person = frame.table("person") + acs = person["person_spine"].eq(ACS).to_numpy() + + assert acs.sum() == 280 and (~acs).sum() == 640 + np.testing.assert_array_equal(acs, ~donor_rows(frame)) + assert set(person.loc[~acs, "person_spine"]) == {ASEC_PUF} + values = person[EMPLOYER].to_numpy(dtype=float) + assert np.isfinite(values).all() and (values >= 0).all() + assert (values[acs] > 0).any() and np.unique(values[acs]).size > 2 + # The raw ASEC fields stay null on the ACS rows: they mark the row kind. + assert person.loc[acs, list(RAW)].isna().all().all() + assert person.loc[~acs, list(RAW)].notna().all().all() + # fill_reviewed_nulls' refusal has nothing to refuse. + refuse_unassigned_us_esi_premiums( + frame, consumer="ACS local release (fill_reviewed_nulls)" + ) + + +def test_the_lane_total_is_the_donor_releases_total(lane) -> None: + frame, donor = lane["frame"], lane["donor"] + rows = donor_rows(frame) + anchor = lane["result"].provenance["local_esi_premiums"]["anchor"] + + assert household_mass_share(frame, rows) == pytest.approx(0.5, rel=1e-12) + assert employer_total(frame) == pytest.approx(employer_total(donor), rel=1e-9) + assert employer_total(frame, rows) == pytest.approx( + 0.5 * employer_total(donor), rel=1e-9 + ) + assert employer_total(frame, ~rows) == pytest.approx( + 0.5 * employer_total(donor), rel=1e-9 + ) + assert anchor["status"] == "scaled" + assert anchor["kernel"] == "with_us_esi_premium_pool_anchor" + assert anchor["source_household_mass_share"] == pytest.approx(0.5, rel=1e-12) + assert anchor["employer_premium_total"] == pytest.approx( + employer_total(donor), rel=1e-9 + ) + + +def test_the_donor_spine_is_the_release_byte_for_byte(lane) -> None: + frame, donor = lane["frame"], lane["donor"] + person = frame.table("person") + rows = donor_rows(frame) + + np.testing.assert_array_equal( + person.loc[rows, EMPLOYER].to_numpy(), _column(donor, EMPLOYER) + ) + np.testing.assert_array_equal( + person.loc[rows, WAGES].to_numpy(), _column(donor, WAGES) + ) + + +def test_acs_people_without_wages_carry_no_premium(lane) -> None: + person = lane["frame"].table("person") + acs = ~donor_rows(lane["frame"]) + workers = (person[WAGES] > 0).to_numpy() + anchor = lane["result"].provenance["local_esi_premiums"]["anchor"] + + assert (acs & ~workers).sum() == 112 + assert not person.loc[acs & ~workers, EMPLOYER].any() + assert (person.loc[acs & workers, EMPLOYER] > 0).any() + # The fit saw measured wages, so no draw needed clearing. + assert anchor["transferred_rows_without_source_wages"] == 112 + assert anchor["cleared_rows"] == {EMPLOYER: 0} + assert 0.5 <= anchor["scale_factor"] <= 2.0 + + +def test_the_premium_transfers_from_asec_observations_in_its_own_pass(lane) -> None: + provenance = lane["result"].provenance + entries = [ + item for item in provenance["imputed_inputs"] if item["column"] == EMPLOYER + ] + + assert provenance["fit_configuration"]["esi_premium_donor_channel"] == "asec" + assert provenance["local_esi_premiums"]["source"]["donor_channel"] == "asec" + assert len(entries) == 1 + assert entries[0]["family"] == ACS_LOCAL_ESI_PREMIUM_FAMILY + assert entries[0]["donor_channel"] == "asec" + assert entries[0]["imputed_recipient_rows"] == 280 + assert entries[0]["unmodeled_recipient_rows"] == 0 + assert "__acs_transfer_employment_income" in entries[0]["predictors"] + json.dumps(provenance, allow_nan=False) + + +def test_the_tax_detail_transfer_keeps_its_puf_donor() -> None: + # The lane's other families still fit on the PUF-detail role. + donor = dense_donor(120) + person = donor.table("person").copy() + puf = person["person_support_clone_index"].eq(1).to_numpy() + person["taxable_interest_income"] = np.where(puf, 500.0, 5.0) + np.arange( + len(person) + ) + result = build_lane( + _replace_person(donor, person), + raw_acs(60), + n_estimators=5, + target_families={"person": {"tax_detail": ("taxable_interest_income",)}}, + ) + + configuration = result.provenance["fit_configuration"] + assert configuration["resolved_donor_channel"] == "puf_tax_detail" + assert configuration["esi_premium_donor_channel"] == "asec" + channels = { + item["column"]: item["donor_channel"] + for item in result.provenance["imputed_inputs"] + } + assert channels == { + EMPLOYER: "asec", + "taxable_interest_income": "puf_tax_detail", + } + acs = ~donor_rows(result.frame) + assert ( + result.frame.table("person").loc[acs, "taxable_interest_income"] >= 500 + ).all() + + +def test_acs_children_get_no_premium_and_keep_their_blank_wage() -> None: + # The real orchestration on an ACS spine with children: PUMS leaves their + # WAGP blank, the native mapping keeps the blank, and the anchor reads it + # as zero wages without writing a zero into the staging frame. + donor = dense_donor(120) + result = build_lane(donor, raw_acs(100, children=20), n_estimators=5) + person = result.frame.table("person") + acs = ~donor_rows(result.frame) + child = acs & (person["age"] < 15).to_numpy() + anchor = result.provenance["local_esi_premiums"]["anchor"] + + assert child.sum() == 20 + assert person.loc[child, WAGES].isna().all() + assert person.loc[child, "WAGP"].isna().all() + assert not person.loc[child, EMPLOYER].any() + assert anchor["wage_universe"]["transferred_rows_with_blank_wage"] == 20 + assert ( + anchor["wage_universe"]["transferred_rows_outside_universe_read_as_zero"] == 20 + ) + assert employer_total(result.frame) == pytest.approx( + employer_total(donor), rel=1e-9 + ) + signal, anchor_gate = acs_local_esi_premium_gates(result.frame, time_period=2024) + assert signal.passed, signal.failures + assert anchor_gate.passed, anchor_gate.failures + refuse_unassigned_us_esi_premiums(result.frame, consumer="ACS local release") + + +def test_no_factory_leaves_the_orchestration_as_it_was() -> None: + # A caller that does not ask for the premium gets none: no pass, no anchor. + donor = dense_donor(80) + with pytest.MonkeyPatch.context() as patch: + patch.setattr( + acs_multispine, + "build_acs_pums_unit_frame", + lambda *a, **k: (raw_acs(40), {}), + ) + result = acs_multispine.build_optional_acs_multispine( + donor, + AcsPumsSource(Path("unused-hus.zip"), Path("unused-pus.zip")), + target_families={}, + ) + + assert "local_esi_premiums" not in result.provenance + assert "esi_premium_donor_channel" not in result.provenance["fit_configuration"] + acs = ~donor_rows(result.frame) + assert result.frame.table("person").loc[acs, EMPLOYER].isna().all() + + +# --- Which donor role, and what it does to the structural zero ---------------- + + +def _acs_draws(donor: Frame, channel: str) -> tuple[pd.Series, pd.Series]: + mapped = map_acs_native_inputs(raw_acs()).frame + person = transfer_acs_inputs( + mapped, + donor, + target_families=acs_local_esi_premium_transfer_target_families(), + donor_channel=channel, + seed=0, + n_estimators=20, + ).frame.table("person") + return person[EMPLOYER], person[WAGES] + + +def test_the_puf_detail_role_would_put_premiums_on_people_without_wages() -> None: + # On PUF-detail rows the premium is a copy of the source person's and the + # wages are PUF-imputed, so wages no longer say who holds a job. + donor = dense_donor() + donor_person = donor.table("person") + puf = donor_person["person_support_clone_index"].eq(1).to_numpy() + premium, wages = _column(donor, EMPLOYER), _column(donor, WAGES) + assert not ((premium > 0) & ~(wages > 0))[~puf].any() + assert ((premium > 0) & ~(wages > 0))[puf].any() + + asec_premium, asec_wages = _acs_draws(donor, "asec") + puf_premium, puf_wages = _acs_draws(donor, "puf_tax_detail") + + def share_without_wages_drawing_a_premium(drawn, measured) -> float: + idle = ~(measured > 0) + return float((drawn[idle] > 0).mean()) + + def share_of_workers_drawing_a_premium(drawn, measured) -> float: + return float((drawn[measured > 0] > 0).mean()) + + # ASEC observations: the fit learns the structural zero from measured wages. + assert share_without_wages_drawing_a_premium(asec_premium, asec_wages) == 0.0 + # PUF-detail role: people without wages draw premiums, and workers draw + # fewer, because the fit cannot tell the two apart. + assert share_without_wages_drawing_a_premium(puf_premium, puf_wages) > 0.1 + assert share_of_workers_drawing_a_premium( + puf_premium, puf_wages + ) < share_of_workers_drawing_a_premium(asec_premium, asec_wages) + + +# --- Both gates on the lane frame --------------------------------------------- + + +def test_both_gates_pass_on_the_lane_frame(lane) -> None: + frame, donor = lane["frame"], lane["donor"] + + signal, anchor = acs_local_esi_premium_gates(frame, time_period=2024) + + assert signal.passed, signal.failures + assert anchor.passed, anchor.failures + assert signal.details["source_rows"] == 640 + assert signal.details["transferred_rows"] == 280 + assert signal.details["employer_premium_outside_universe_rows"] == 0 + assert signal.details["clone_disagreement_source_persons"] == 0 + assert signal.details["transferred_source_records_with_premium_and_no_wages"] == 0 + # The donor ran the stage at the whole anchor, and the lane keeps its + # anchor-universe total and its scale factor. + alone = us_esi_premiums_anchor_gate(donor, time_period=2024) + assert alone.passed, alone.failures + assert anchor.details["anchor_universe_employer_total"] == pytest.approx( + ANCHOR, rel=1e-9 + ) + assert anchor.details["relative_error"] == pytest.approx( + alone.details["relative_error"], abs=1e-9 + ) + assert anchor.details["scale_factor"] == pytest.approx( + alone.details["scale_factor"], rel=1e-9 + ) + assert anchor.details["source_household_mass_share"] == pytest.approx( + 0.5, rel=1e-12 + ) + assert anchor.details[ + "transferred_to_source_per_household_mass_ratio" + ] == pytest.approx(1.0, rel=1e-9) + assert "employed share" in anchor.details["anchor_universe_assumption"] + + +def test_the_narrow_gate_view_gives_the_whole_frame_verdicts(lane) -> None: + # Differential: the gates read a few columns but copy every table, so the + # lane hands them a narrow view. It must not change a verdict or a detail. + frame = lane["frame"] + + signal, anchor = acs_local_esi_premium_gates(frame, time_period=2024) + whole_signal = us_esi_premiums_signal_gate(frame) + whole_anchor = us_esi_premiums_anchor_gate(frame, time_period=2024) + + for narrow, whole in ((signal, whole_signal), (anchor, whole_anchor)): + assert narrow.name == whole.name + assert narrow.passed is whole.passed + assert narrow.failures == whole.failures + assert json.dumps(dict(narrow.details), sort_keys=True, default=str) == ( + json.dumps(dict(whole.details), sort_keys=True, default=str) + ) + + +def _with_acs_premium(frame: Frame, transform) -> Frame: + person = frame.table("person").copy() + acs = ~donor_rows(frame) + person.loc[acs, EMPLOYER] = transform(person.loc[acs, EMPLOYER]) + return _replace_person(frame, person) + + +def test_an_acs_spine_without_the_premium_fails_the_signal_gate(lane) -> None: + zeroed = _with_acs_premium(lane["frame"], lambda values: values * 0.0) + + signal, _anchor = acs_local_esi_premium_gates(zeroed, time_period=2024) + + assert not signal.passed + assert any( + "rows without raw ASEC columns" in failure for failure in signal.failures + ) + + +@pytest.mark.parametrize("factor", [0.7, 1.4]) +def test_an_acs_spine_off_the_donor_rows_scale_fails_the_anchor_gate( + lane, factor: float +) -> None: + scaled = _with_acs_premium(lane["frame"], lambda values: values * factor) + + _signal, anchor = acs_local_esi_premium_gates(scaled, time_period=2024) + + assert not anchor.passed + assert any("per unit of household mass" in failure for failure in anchor.failures) + assert anchor.details[ + "transferred_to_source_per_household_mass_ratio" + ] == pytest.approx(factor, rel=1e-9) + + +def test_a_lane_frame_from_a_donor_without_the_stage_fails_both_gates() -> None: + # A waived diagnostic build: no row carries the column at all. + acs = transferred_acs(np.asarray([9_000.0]), np.asarray([30_000.0]), np.ones(1)) + frame = pooled( + _donor_without(EMPLOYER), + _replace_person(acs, acs.table("person").drop(columns=[EMPLOYER])), + ) + assert EMPLOYER not in frame.table("person") + + signal, anchor = acs_local_esi_premium_gates(frame, time_period=2024) + + assert not signal.passed and not anchor.passed + assert signal.failures == (f"person column missing: {EMPLOYER}.",) + assert anchor.failures == (f"person column missing: {EMPLOYER}.",) + + +def test_moving_mass_between_spines_moves_neither_the_total_nor_the_ratio( + lane, +) -> None: + # Calibration moves mass between spines. Both carry the same premium per + # unit of household mass, so a shift that conserves the frame's mass + # leaves the lane total where it was. + frame = lane["frame"] + household = frame.table("household") + acs_household = household["household_spine"].eq(ACS).to_numpy() + weights = np.asarray(frame.weights_for("household").values, dtype=float).copy() + weights[acs_household] *= 1.3 + weights *= frame.weights_for("household").total / weights.sum() + moved = Frame( + {entity: frame.table(entity) for entity in frame.entities}, + frame.schema, + {"household": Weights(weights, WeightKind.CALIBRATED)}, + frame.strata, + ) + + signal, anchor = acs_local_esi_premium_gates(moved, time_period=2024) + + assert signal.passed, signal.failures + assert anchor.passed, anchor.failures + assert anchor.details[ + "transferred_to_source_per_household_mass_ratio" + ] == pytest.approx(1.0, rel=1e-9) + assert employer_total(moved) == pytest.approx(employer_total(frame), rel=1e-9) + + +def test_a_gate_payload_is_strict_json_and_keeps_failures_verbatim(lane) -> None: + signal, anchor = acs_local_esi_premium_gates( + _with_acs_premium(lane["frame"], lambda values: values * 0.0), + time_period=2024, + ) + + payload = acs_local_esi_premium_gate_payload(signal) + + assert payload["name"] == "esi_premiums_signal" + assert payload["passed"] is False + assert payload["failures"] == list(signal.failures) + json.dumps(payload, allow_nan=False) + json.dumps(acs_local_esi_premium_gate_payload(anchor), allow_nan=False) + + +@requires_pytables +def test_the_staging_h5_round_trip_keeps_the_verdicts(lane, tmp_path) -> None: + # Finalize grades the calibrated H5 the lane wrote, not the frame in memory. + frame = lane["frame"] + path = tmp_path / "acs_multispine_staging.h5" + + write_nullable_us_h5( + frame, path, period=2024, artifact_kind=LEGACY_NULLABLE_STAGING_ARTIFACT_KIND + ) + loaded = load_legacy_calibrated_us_h5(path) + + signal, anchor = acs_local_esi_premium_gates(loaded, time_period=2024) + assert signal.passed, signal.failures + assert anchor.passed, anchor.failures + assert employer_total(loaded) == pytest.approx(employer_total(frame), rel=1e-12) + np.testing.assert_array_equal(donor_rows(loaded), donor_rows(frame)) + refuse_unassigned_us_esi_premiums(loaded, consumer="ACS local release") + again, receipt = with_acs_local_esi_premium_anchor(loaded) + assert again is loaded and receipt["status"] == "already_on_anchor" diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_acs_local_release_tool.py b/packages/microcosm-build/tests/engine_free/us/test_us_acs_local_release_tool.py index e7a20bff8a..4001c496f8 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_us_acs_local_release_tool.py +++ b/packages/microcosm-build/tests/engine_free/us/test_us_acs_local_release_tool.py @@ -15,6 +15,10 @@ import pytest from microcosm.data import stored_inputs +from test_support.microcosm_build.us_acs_local_release_tool import ( + load_staging_builder_module, + load_tool_module, +) from test_support.paths import paths_for _TEST_PATHS = paths_for("microcosm-build") @@ -77,30 +81,42 @@ def _stored_input_contract_passes(monkeypatch): ) -def _load_tool_module(): - root = _TEST_PATHS.repository - path = root / "tools" / "build_us_acs_local_release.py" - spec = importlib.util.spec_from_file_location( - "build_us_acs_local_release", - path, - ) - module = importlib.util.module_from_spec(spec) - assert spec.loader is not None - spec.loader.exec_module(module) - return module +_load_tool_module = load_tool_module +_load_staging_builder_module = load_staging_builder_module + + +def _passing_esi_premium_gates(artifact_sha: str) -> dict[str, dict]: + """The finalize report's ESI premium entries (microcosm#454), green and + bound to ``artifact_sha``: what the package stage requires before it + reaches the checks the other package tests are about.""" + + return { + name: { + "passed": True, + "failures": [], + "detail": {}, + "artifact_sha256": artifact_sha, + "enforced": True, + } + for name in ("esi_premiums_signal", "esi_premiums_anchor") + } + +def _stub_esi_premium_gates( + module, monkeypatch, *, signal: tuple = (), anchor: tuple = () +) -> None: + """Fix the lane's ESI premium verdict; its own tests cover the grading.""" + + from microcosm.build.gates import GateResult -def _load_staging_builder_module(): - root = _TEST_PATHS.repository - path = root / "tools" / "build_us_acs_multispine_base.py" - spec = importlib.util.spec_from_file_location( - "build_us_acs_multispine_base", - path, + monkeypatch.setattr( + module, + "acs_local_esi_premium_gates", + lambda frame, *, time_period: ( + GateResult(name="esi_premiums_signal", passed=not signal, failures=signal), + GateResult(name="esi_premiums_anchor", passed=not anchor, failures=anchor), + ), ) - module = importlib.util.module_from_spec(spec) - assert spec.loader is not None - spec.loader.exec_module(module) - return module def test_household_chunks_refuse_population_aggregates(monkeypatch, tmp_path) -> None: @@ -393,6 +409,7 @@ def _package_evidence_args(module, tmp_path: Path, monkeypatch, *, hours_report) "detail": {}, "artifact_sha256": artifact_sha, }, + **_passing_esi_premium_gates(artifact_sha), } if hours_report is not None: gates["acs_local_hours_signal"] = hours_report @@ -1070,8 +1087,13 @@ def _stub_local_hours_gate(module, monkeypatch) -> None: ) -def _patch_finalize_collaborators(module, monkeypatch, frame=None, *, identity=True): - """Stub the ladder gate and composition; ``frame=None`` loads real bytes.""" +def _patch_finalize_collaborators( + module, monkeypatch, frame=None, *, identity=True, esi_premiums=True +): + """Stub the ladder gate and composition; ``frame=None`` loads real bytes. + + ``esi_premiums=False`` leaves the real ESI premium gates in place. + """ import microcosm.build.us_runtime.puma_ladder as puma from microcosm.build.gates import GateResult @@ -1086,6 +1108,8 @@ def _patch_finalize_collaborators(module, monkeypatch, frame=None, *, identity=T ) monkeypatch.setattr(module, "spine_composition", lambda *a, **k: {}) _stub_local_hours_gate(module, monkeypatch) + if esi_premiums: + _stub_esi_premium_gates(module, monkeypatch) if frame is not None: monkeypatch.setattr(module, "_load_staging_frame", lambda *a, **k: frame) if identity: @@ -1096,8 +1120,8 @@ def _patch_finalize_collaborators(module, monkeypatch, frame=None, *, identity=T ) -def _run_finalize(module, monkeypatch, args, frame=None): - _patch_finalize_collaborators(module, monkeypatch, frame) +def _run_finalize(module, monkeypatch, args, frame=None, *, esi_premiums=True): + _patch_finalize_collaborators(module, monkeypatch, frame, esi_premiums=esi_premiums) with pytest.raises(SystemExit) as exc: module.do_finalize(args) report = ( @@ -1367,11 +1391,9 @@ def _package_args_with_hours(module, tmp_path, monkeypatch, *, gate_state): "detail": {}, "artifact_sha256": artifact_sha, } - gates = ( - {} - if gate_state == "missing" - else {"hours_worked_signal": gate, "acs_local_hours_signal": local_gate} - ) + gates = _passing_esi_premium_gates(artifact_sha) + if gate_state != "missing": + gates |= {"hours_worked_signal": gate, "acs_local_hours_signal": local_gate} args.gate_report.write_text(json.dumps({"gates": gates})) args.out_summary.write_text(json.dumps({"simulation_ready": True})) evidence = { @@ -2142,3 +2164,251 @@ def test_a_null_esi_premium_input_is_refused_before_any_default_fill(tmp_path) - module.fill_reviewed_nulls(frame, absent_register) assert "ACS local release" in str(error.value) assert "'employer_sponsored_insurance_premiums': 2" in str(error.value) + + +# --- microcosm#454: the lane's own verdict on the ESI employer premium -------- + + +@pytest.fixture(scope="module") +def esi_lane_frame(): + """A staged lane frame: the real ESI transfer, pooling and anchor.""" + + from test_support.microcosm_build.us_acs_local_esi_premiums import ( + build_lane, + dense_donor, + raw_acs, + ) + + return build_lane(dense_donor(), raw_acs()).frame + + +def _with_acs_premium_scaled(frame, factor: float): + """The lane frame with every ACS row's premium multiplied by ``factor``.""" + + from microcosm.frame import Frame + + person = frame.table("person").copy() + acs = person["person_spine"].eq("acs_2024_1yr") + person.loc[acs, "employer_sponsored_insurance_premiums"] *= factor + return Frame( + { + entity: person if entity == "person" else frame.table(entity) + for entity in frame.entities + }, + frame.schema, + {"household": frame.weights_for("household")}, + frame.strata, + ) + + +def test_finalize_grades_the_esi_premium_on_the_calibrated_artifact( + tmp_path, monkeypatch, esi_lane_frame +) -> None: + """Both gates run on the artifact and their verdict replaces the + hard-coded input-coverage pass.""" + + module = _load_tool_module() + args = _finalize_args(module, tmp_path) + artifact_sha = module._sha256(args.out_h5) + + message, report = _run_finalize( + module, monkeypatch, args, esi_lane_frame, esi_premiums=False + ) + + gates = report["gates"] + for name in module.ESI_PREMIUM_GATE_NAMES: + assert gates[name]["passed"] is True, gates[name]["failures"] + assert gates[name]["failures"] == [] + assert gates[name]["artifact_sha256"] == artifact_sha + assert gates[name]["enforced"] is True + assert name not in message + signal, anchor = (gates[name]["detail"] for name in module.ESI_PREMIUM_GATE_NAMES) + assert signal["source_rows"] == 640 and signal["transferred_rows"] == 280 + assert anchor["time_period"] == module.PERIOD + assert anchor["source_household_mass_share"] == pytest.approx(0.5, rel=1e-12) + assert anchor["transferred_to_source_per_household_mass_ratio"] == pytest.approx( + 1.0, rel=1e-9 + ) + assert abs(anchor["relative_error"]) < 1e-9 + assert gates["input_coverage"]["passed"] is True + assert gates["input_coverage"]["binds"] == "donor_certified_release" + assert gates["input_coverage"]["graded_on_artifact"] == list( + module.ESI_PREMIUM_GATE_NAMES + ) + # The report is strict JSON even where a detail is not finite. + json.loads(args.gate_report.read_text(), parse_constant=pytest.fail) + + +@pytest.mark.parametrize("factor", [0.0, 1.4]) +def test_finalize_hard_fails_on_a_red_esi_premium_gate( + tmp_path, monkeypatch, esi_lane_frame, factor +) -> None: + module = _load_tool_module() + args = _finalize_args(module, tmp_path) + frame = _with_acs_premium_scaled(esi_lane_frame, factor) + + message, report = _run_finalize( + module, monkeypatch, args, frame, esi_premiums=False + ) + + red = "esi_premiums_signal" if factor == 0.0 else "esi_premiums_anchor" + assert red in message + assert report["gates"][red]["passed"] is False + assert report["gates"][red]["failures"] + assert report["gates"][red]["enforced"] is True + # The input-coverage entry no longer reads green on its own authority. + assert report["gates"]["input_coverage"]["passed"] is False + + +def test_finalize_records_a_waived_esi_premium_gate_without_failing_on_it( + tmp_path, monkeypatch, esi_lane_frame +) -> None: + module = _load_tool_module() + args = _finalize_args(module, tmp_path) + args.allow_esi_premium_gaps = True + frame = _with_acs_premium_scaled(esi_lane_frame, 1.4) + + message, report = _run_finalize( + module, monkeypatch, args, frame, esi_premiums=False + ) + + # Finalize still fails here on the fixture's other evidence, not on this. + assert "esi_premiums" not in message + anchor = report["gates"]["esi_premiums_anchor"] + assert anchor["passed"] is False + assert anchor["enforced"] is False + assert any( + "per unit of household mass" in failure for failure in anchor["failures"] + ) + assert report["gates"]["input_coverage"]["passed"] is False + + +def test_finalize_on_an_artifact_without_the_premium_is_red_on_both_gates( + tmp_path, monkeypatch +) -> None: + """A staging H5 from a donor that predates the stage carries no column.""" + + module = _load_tool_module() + args = _finalize_args(module, tmp_path) + + message, report = _run_finalize( + module, monkeypatch, args, _plausible_hours_frame(), esi_premiums=False + ) + + for name in module.ESI_PREMIUM_GATE_NAMES: + assert name in message + assert report["gates"][name]["failures"] == [ + "person column missing: employer_sponsored_insurance_premiums." + ] + + +def _rewrite_package_gates(args, edit) -> None: + report = json.loads(args.gate_report.read_text()) + edit(report["gates"]) + args.gate_report.write_text(json.dumps(report)) + + +@pytest.mark.parametrize( + ("state", "match"), + [ + ("missing", "carries no esi_premiums_signal verdict"), + ("truthy", "carries no esi_premiums_anchor verdict"), + ("unbound", "esi_premiums_anchor gate is missing its artifact binding"), + ("stale", "esi_premiums_signal gate is missing its artifact binding"), + ("failed", "Packaging requires a passing esi_premiums_anchor gate"), + ], +) +def test_package_requires_the_esi_premium_verdict_bound_to_the_packaged_bytes( + tmp_path: Path, monkeypatch, state, match +) -> None: + module = _load_tool_module() + args = _package_evidence_args( + module, + tmp_path, + monkeypatch, + hours_report={"passed": True, "failures": [], "detail": {}}, + ) + + def edit(gates) -> None: + if state == "missing": + # A report finalized before the gates existed. + del gates["esi_premiums_signal"], gates["esi_premiums_anchor"] + elif state == "truthy": + gates["esi_premiums_anchor"]["passed"] = "true" + elif state == "unbound": + del gates["esi_premiums_anchor"]["artifact_sha256"] + elif state == "stale": + gates["esi_premiums_signal"]["artifact_sha256"] = "0" * 64 + else: + gates["esi_premiums_anchor"].update( + passed=False, failures=["invented: off the anchor"] + ) + + _rewrite_package_gates(args, edit) + + with pytest.raises(SystemExit, match=match) as error: + module.do_package(args) + + if state == "failed": + assert "invented: off the anchor" in str(error.value) + # Refused before any release directory exists. + assert not (args.out / "releases").exists() + assert not (args.out / "package_result.json").exists() + + +def test_package_ships_a_red_esi_premium_gate_only_as_a_recorded_waiver( + tmp_path: Path, monkeypatch +) -> None: + module = _load_tool_module() + args = _package_evidence_args( + module, + tmp_path, + monkeypatch, + hours_report={"passed": True, "failures": [], "detail": {}}, + ) + _rewrite_package_gates( + args, + lambda gates: gates["esi_premiums_signal"].update( + passed=False, + failures=["person column missing: employer_sponsored_insurance_premiums."], + enforced=False, + ), + ) + with pytest.raises(SystemExit, match="--allow-esi-premium-gaps"): + module.do_package(args) + + args.allow_esi_premium_gaps = True + result = module.do_package(args) + + shipped = json.loads( + (Path(result["release_dir"]) / "gate_summary.json").read_text() + )["gates"] + assert shipped["esi_premiums_signal"]["passed"] is False + assert shipped["esi_premiums_signal"]["enforced"] is False + assert shipped["esi_premiums_signal"]["failures"] == [ + "person column missing: employer_sponsored_insurance_premiums." + ] + assert shipped["esi_premiums_anchor"]["passed"] is True + + +def test_the_esi_premium_waiver_is_off_by_default(tmp_path: Path) -> None: + module = _load_tool_module() + + assert _finalize_args(module, tmp_path).allow_esi_premium_gaps is False + assert "--allow-esi-premium-gaps" not in module.LEGACY_STAGING_REFRESH_RECIPE + + +def test_the_staged_lane_frame_passes_the_null_refusal(esi_lane_frame) -> None: + """``fill_reviewed_nulls`` no longer refuses the lane: every row carries + the premium. The refusal runs before the engine is imported.""" + + from microcosm.build.us_runtime.esi_premiums import ( + refuse_unassigned_us_esi_premiums, + ) + + person = esi_lane_frame.table("person") + assert set(person["person_spine"]) == {"asec_puf", "acs_2024_1yr"} + assert person["employer_sponsored_insurance_premiums"].notna().all() + refuse_unassigned_us_esi_premiums( + esi_lane_frame, consumer="ACS local release (fill_reviewed_nulls)" + ) diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_acs_multispine_legacy_builder.py b/packages/microcosm-build/tests/engine_free/us/test_us_acs_multispine_legacy_builder.py index 72515fa8fd..119d38107e 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_us_acs_multispine_legacy_builder.py +++ b/packages/microcosm-build/tests/engine_free/us/test_us_acs_multispine_legacy_builder.py @@ -131,6 +131,7 @@ def test_parser_exposes_production_defaults_and_transfer_controls() -> None: assert args.seed == 0 assert args.geography_seed == 0 assert args.donor_channel == builder.ACS_DONOR_CHANNEL_AUTO + assert args.allow_esi_premium_gaps is False custom = builder._parse_args( [ @@ -180,6 +181,7 @@ def test_main_wires_verified_sources_transfer_audit_export_and_summary( combined.table("household")["congressional_district_geoid"] = [101, 200] combined.table("household")["county_fips"] = ["01001", "02020"] combined.table("household")["TYPEHUGQ"] = [1.0, 3.0] + combined.table("person")["employer_sponsored_insurance_premiums"] = [9_000.0, 0.0] base_h5 = tmp_path / "dense.h5" base_h5.write_bytes(b"dense-base") manifest_path = tmp_path / "acs_sources.json" @@ -260,7 +262,13 @@ def fake_build(actual_base, actual_source, **kwargs): "column": "takes_up_snap_if_eligible", "family": "benefit_participation", "unmodeled_recipient_rows": 0, - } + }, + # The lane owes the ACS spine the employer premium too. + { + "column": "employer_sponsored_insurance_premiums", + "family": "source_operator_esi_premiums", + "unmodeled_recipient_rows": 0, + }, ], }, ) @@ -340,6 +348,29 @@ def staging_hours_gate(frame, *, source_null_audit): monkeypatch.setattr(builder, "_write_dataset", fake_write) monkeypatch.setattr(builder, "acs_local_hours_signal_gate", staging_hours_gate) + def qualify_esi_premium_donor(frame): + captured.setdefault("esi_premium_donors", []).append(frame) + return frame, {"donor_channel": "asec"} + + def staging_esi_premium_gates(frame, *, time_period): + captured["staging_esi_premium_gates"] = (frame, time_period) + return ( + GateResult(name="esi_premiums_signal", passed=True, failures=()), + GateResult( + name="esi_premiums_anchor", + passed=True, + failures=(), + details={"relative_error": 0.0, "cross_check_ratio": float("nan")}, + ), + ) + + monkeypatch.setattr( + builder, "prepare_acs_local_esi_premium_donor", qualify_esi_premium_donor + ) + monkeypatch.setattr( + builder, "acs_local_esi_premium_gates", staging_esi_premium_gates + ) + arguments = [ "--base-h5", str(base_h5), @@ -385,6 +416,11 @@ def staging_hours_gate(frame, *, source_null_audit): assert actual_source.max_households == 7 assert build_options.pop("puma_ladder") is puma_ladder assert callable(build_options.pop("hours_donor_factory")) + # The donor is qualified before the ACS sources are fetched, and the same + # qualifier selects its rows when the transfer runs. + assert build_options.pop("esi_premium_donor_factory") is qualify_esi_premium_donor + assert captured["esi_premium_donors"] == [base] + assert captured["staging_esi_premium_gates"] == (combined, 2024) assert build_options == { "chunksize": 2000, "acs_share": 0.4, @@ -415,6 +451,26 @@ def staging_hours_gate(frame, *, source_null_audit): ] assert summary["reviewed_engine_input_nulls"] == [reviewed_null] assert summary["local_hours_gate"]["passed"] is True + assert summary["local_esi_premiums"] == { + "enforced": True, + "transferred": True, + "donor_qualification_waived": None, + "provenance": None, + "signal_gate": { + "name": "esi_premiums_signal", + "passed": True, + "failures": [], + "details": {}, + }, + "anchor_gate": { + "name": "esi_premiums_anchor", + "passed": True, + "failures": [], + # Strict JSON: a non-finite detail is written as null. + "details": {"relative_error": 0.0, "cross_check_ratio": None}, + }, + } + assert summary["orchestration"]["allow_esi_premium_gaps"] is False assert "pending_engine_input_nulls" not in summary assert summary["staging_export_peak_estimate_bytes"] == 123_456 assert summary["geography_ladder"] == { @@ -473,6 +529,128 @@ def staging_hours_gate(frame, *, source_null_audit): assert summary["output"]["sha256"] == hashlib.sha256(b"combined-output").hexdigest() +def test_esi_premium_donor_is_qualified_before_fetch( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """microcosm#454: a donor without the stage's premium stops the build early.""" + + builder = _load_builder_module() + monkeypatch.setattr( + builder.acs_sources, "load_acs_source_manifest", lambda path: _manifest() + ) + monkeypatch.setattr(builder, "_load_base_frame", lambda path: _frame()) + monkeypatch.setattr(builder, "_sha256", lambda path: "0" * 64) + monkeypatch.setattr( + builder, "_require_dense_donor_coverage", lambda frame, **kwargs: None + ) + + def must_not_fetch(*_args, **_kwargs): + raise AssertionError("source fetch must not run for an unqualified donor") + + monkeypatch.setattr(builder.acs_sources, "fetch_acs_pums_sources", must_not_fetch) + + with pytest.raises(SystemExit) as exc: + builder.main(["--base-h5", "prestage.h5", "--out-h5", "combined.h5"]) + + message = str(exc.value) + assert "failed the ESI employer premium qualification" in message + assert "employer_sponsored_insurance_premiums" in message + assert "meps_esi_premiums stage" in message + assert "--allow-esi-premium-gaps" in message + + +def test_esi_premium_donor_refusal_is_a_recorded_waiver_for_a_diagnostic_build() -> ( + None +): + builder = _load_builder_module() + + waiver = builder._qualify_esi_premium_donor(_frame(), allow_gaps=True) + + assert waiver is not None + assert "built without the meps_esi_premiums stage" in waiver + + +def test_local_coverage_plan_owes_the_premium_only_when_it_was_transferred() -> None: + builder = _load_builder_module() + hours_only = builder.acs_local_transfer_target_families() + + with_premium = builder._local_coverage_plan(esi_premiums=True) + without_premium = builder._local_coverage_plan(esi_premiums=False) + + assert with_premium["person"]["source_operator_esi_premiums"] == ( + "employer_sponsored_insurance_premiums", + ) + assert without_premium == hours_only + assert { + family: targets + for family, targets in with_premium["person"].items() + if family != "source_operator_esi_premiums" + } == dict(hours_only["person"]) + # The composition copies: the shared plans are not edited in place. + assert builder.acs_local_transfer_target_families() == hours_only + assert ( + "source_operator_esi_premiums" + not in (builder.declared_acs_transfer_target_families()["person"]) + ) + + +def _esi_premium_gates(*, signal: tuple[str, ...] = (), anchor: tuple[str, ...] = ()): + return lambda frame, *, time_period: ( + GateResult(name="esi_premiums_signal", passed=not signal, failures=signal), + GateResult(name="esi_premiums_anchor", passed=not anchor, failures=anchor), + ) + + +def test_red_staging_esi_premium_gates_abort_before_export( + monkeypatch: pytest.MonkeyPatch, +) -> None: + builder = _load_builder_module() + result = builder.AcsMultispineResult(frame=_frame(), provenance={}) + monkeypatch.setattr( + builder, + "acs_local_esi_premium_gates", + _esi_premium_gates(anchor=("off the anchor",)), + ) + + with pytest.raises(SystemExit) as exc: + builder._local_esi_premium_evidence( + result, period=2024, waiver=None, allow_gaps=False + ) + + assert "Local staging ESI employer premium gates failed" in str(exc.value) + assert "esi_premiums_anchor: off the anchor" in str(exc.value) + + +def test_waived_staging_esi_premium_gates_are_recorded_red( + monkeypatch: pytest.MonkeyPatch, +) -> None: + builder = _load_builder_module() + result = builder.AcsMultispineResult(frame=_frame(), provenance={}) + missing = ("person column missing: employer_sponsored_insurance_premiums.",) + monkeypatch.setattr( + builder, + "acs_local_esi_premium_gates", + _esi_premium_gates(signal=missing, anchor=missing), + ) + + evidence = builder._local_esi_premium_evidence( + result, + period=2024, + waiver="Local ESI premium donor lacks the column.", + allow_gaps=True, + ) + + assert evidence["enforced"] is False + assert evidence["transferred"] is False + assert evidence["donor_qualification_waived"] == ( + "Local ESI premium donor lacks the column." + ) + assert evidence["signal_gate"]["passed"] is False + assert evidence["signal_gate"]["failures"] == list(missing) + assert evidence["anchor_gate"]["failures"] == list(missing) + json.dumps(evidence, allow_nan=False) + + def test_weights_audit_failure_aborts_before_export() -> None: builder = _load_builder_module() result = builder.AcsMultispineResult( diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_esi_premiums_pool.py b/packages/microcosm-build/tests/engine_free/us/test_us_esi_premiums_pool.py new file mode 100644 index 0000000000..846a69e803 --- /dev/null +++ b/packages/microcosm-build/tests/engine_free/us/test_us_esi_premiums_pool.py @@ -0,0 +1,1362 @@ +"""ESI premiums in a stacked pool (microcosm #454). + +A stacked pool gives each household source a share of one population's +household mass. Only its CPS-source rows carry the raw ASEC fields the stage +reads; a cross-source transfer fills the employer premium on every other row. + +Invariants of :func:`with_us_esi_premium_pool_anchor`, for every valid pool: + +* **Conservation**: the pool-wide weighted employer premium equals the + source-derived rows' total divided by their share of household mass, which + is what the stage assigns the whole population. +* **Equal intensity**: source-derived and transferred rows carry the same + weighted employer premium per unit of household mass. +* **Source rows are immutable**: no source-derived cell changes by a byte. +* **One premium per person**: every support clone of a transferred person + carries its clone-0 source record's draw, whether the pool transferred + before or after it cloned. +* **Structural zeros**: a transferred person whose source record reports zero + wages carries no premium, on every support clone. A missing wage is + refused, never read as zero. +* **Proportionality**: every other transferred employer premium is one common + multiple of the value the transfer drew for the source record. +* **Idempotence**: a pool already on the stage's scale is returned unchanged. +* **Weight homogeneity**: rescaling every household weight leaves each value + where it was. +""" + +from __future__ import annotations + +import json + +import numpy as np +import pandas as pd +import pytest +from hypothesis import HealthCheck, assume, given, settings +from hypothesis import strategies as st + +from microcosm.build.source_runtime import SourceRuntimeError +from microcosm.build.us_runtime import esi_premiums as esi +from microcosm.build.us_runtime import multispine_pool as pool_module +from microcosm.build.us_runtime.acs_transfer import transfer_acs_inputs +from microcosm.build.us_runtime.esi_premiums import ( + US_ESI_EMPLOYER_PREMIUM_COLUMN, + US_ESI_PREMIUMS_OUTPUT_COLUMNS, + US_ESI_PREMIUMS_WAGE_COLUMN, + us_esi_premiums_anchor_gate, + us_esi_premiums_household_mass_share, + us_esi_premiums_signal_gate, + us_esi_premiums_summary, + with_us_esi_premium_inputs, + with_us_esi_premium_pool_anchor, +) +from microcosm.build.us_runtime.puf_support import clone_us_frame_for_puf_support +from microcosm.build.us_runtime.spine_assembly import assemble_spines +from microcosm.build.us_runtime.stacked_spine import ( + GapFillDirection, + assemble_stacked_spine, +) +from microcosm.frame import US_SCHEMA, Frame, WeightKind, Weights +from test_support.microcosm_build.us_stacked_spine import ( + _gap_fill_with_test_authority, +) +from test_support.microcosm_build.us_stacked_spine import ( + _source_frame as _stacked_source_frame, +) +from test_support.paths import paths_for + +EMPLOYER = US_ESI_EMPLOYER_PREMIUM_COLUMN +#: CMS NHE Table 24 employer contribution, CY2024: the stage's anchor. +ANCHOR = float(esi.EMPLOYER_PREMIUM_ANCHOR["values"]["2024"]) +WAGES = US_ESI_PREMIUMS_WAGE_COLUMN +RAW = esi._RAW_EVIDENCE_COLUMNS +CPS_ID = esi._CPS_EVIDENCE_COLUMN +_GROUPS = ("tax_unit", "spm_unit", "family", "marital_unit") +_REPOSITORY_ROOT = paths_for("microcosm-build").repository + + +def _pool( + households: list[dict], + *, + clone_of: dict[int, int] | None = None, + clone_index: dict[int, int] | None = None, +) -> Frame: + """A pool frame from household records. + + Each record has ``source`` (whether its people carry raw ASEC fields), + ``weight`` and ``people``: a list of ``(employer premium, wages)``. Every + other stage output takes half the employer premium. ``clone_of`` maps a + household position to the position of the household it is a support clone + of; clones then share ``person_source_id`` with their source person. + ``clone_index`` gives a clone's support index (1 by default; 2 is the + capital-gains tail descendant). + """ + + clone_of = clone_of or {} + clone_index = clone_index or {} + records = [] + for position, household in enumerate(households): + origin = clone_of.get(position, position) + for member, (premium, wages) in enumerate(household["people"]): + record = { + "person_household_id": position + 1, + "person_source_id": (origin + 1) * 100 + member, + "person_support_clone_index": ( + clone_index.get(position, 1) if position in clone_of else 0 + ), + WAGES: float(wages), + } + record |= { + column: float(premium) * (1.0 if column == EMPLOYER else 0.5) + for column in US_ESI_PREMIUMS_OUTPUT_COLUMNS + } + record |= {column: 1.0 if household["source"] else np.nan for column in RAW} + # The CPS record id corroborates the row kind the raw fields imply. + record[CPS_ID] = ( + f"cps-{origin + 1:04d}-{member}" if household["source"] else None + ) + records.append(record) + person = pd.DataFrame(records) + person.insert(0, "person_id", np.arange(1, len(person) + 1, dtype="int64")) + for offset, group in enumerate(_GROUPS, start=1): + person[f"person_{group}_id"] = person["person_id"] + offset * 1_000_000 + tables = { + "person": person, + "household": pd.DataFrame( + {"household_id": np.arange(1, len(households) + 1, dtype="int64")} + ), + } + for group in _GROUPS: + tables[group] = pd.DataFrame( + {f"{group}_id": person[f"person_{group}_id"].to_numpy()} + ) + weights = np.asarray([household["weight"] for household in households], float) + return Frame( + tables, + US_SCHEMA, + {"household": Weights(values=weights, kind=WeightKind.IMPORTANCE)}, + ) + + +def _column(frame: Frame, column: str) -> np.ndarray: + return frame.table("person")[column].to_numpy(dtype=float) + + +def _person_weights(frame: Frame) -> np.ndarray: + return np.asarray(frame.resolve_weights("person").values, dtype=float) + + +def _source_rows(frame: Frame) -> np.ndarray: + return frame.table("person")[RAW[0]].notna().to_numpy() + + +def _total(frame: Frame, rows: np.ndarray | None = None) -> float: + weights, values = _person_weights(frame), _column(frame, EMPLOYER) + rows = np.ones(len(values), dtype=bool) if rows is None else rows + return float(weights[rows] @ values[rows]) + + +_amount = st.one_of( + st.just(0.0), + st.floats(min_value=1.0, max_value=40_000.0, allow_nan=False), +) +_person = st.tuples(_amount, _amount) +_weight = st.one_of( + st.just(0.0), + st.floats(min_value=0.5, max_value=5_000.0, allow_nan=False), +) + + +def _households(source: bool) -> st.SearchStrategy[list[dict]]: + return st.lists( + st.fixed_dictionaries( + { + "source": st.just(source), + "weight": _weight, + "people": st.lists(_person, min_size=1, max_size=3), + } + ), + min_size=1, + max_size=6, + ) + + +def _record(frame: Frame, column: str) -> np.ndarray: + """Each row's value of ``column`` on its clone-0 source record.""" + + person = frame.table("person") + native = person["person_support_clone_index"].eq(0) + by_source = person.loc[native].set_index("person_source_id")[column] + return person["person_source_id"].map(by_source).to_numpy(dtype=float) + + +def _transferred_mass(frame: Frame) -> float: + return 1.0 - us_esi_premiums_household_mass_share(frame, _source_rows(frame)) + + +@st.composite +def _pools(draw) -> Frame: + """Valid pools: either household kind may hold zero-weight households and + support clones (index 1 and the tail's index 2). + + A source household's clone copies its people, as the pool's clone does. A + transferred household's clone gets its own draws and wages, as a transfer + that ran after the clone would leave it. + """ + + households = draw(_households(True)) + draw(_households(False)) + clone_of: dict[int, int] = {} + clone_index: dict[int, int] = {} + for position in range(len(households)): + origin = households[position] + for index in sorted(draw(st.sets(st.sampled_from([1, 2])))): + people = ( + origin["people"] + if origin["source"] + else draw( + st.lists( + _person, + min_size=len(origin["people"]), + max_size=len(origin["people"]), + ) + ) + ) + clone_of[len(households)] = position + clone_index[len(households)] = index + households.append( + {"source": origin["source"], "weight": draw(_weight), "people": people} + ) + # A frame needs weight somewhere, and the anchor needs it on a source row. + assume(any(household["weight"] > 0 for household in households)) + frame = _pool(households, clone_of=clone_of, clone_index=clone_index) + source = _source_rows(frame) + assume(_total(frame, source) > 0) + weights = _person_weights(frame) + workers = ~source & (_record(frame, WAGES) > 0) + drawn_on_workers = float(weights[workers] @ _record(frame, EMPLOYER)[workers]) + # Transferred mass needs premium on workers to scale; none needs nothing. + assume(drawn_on_workers > 0 or _transferred_mass(frame) == 0) + return frame + + +_SETTINGS = settings( + max_examples=200, + deadline=None, + suppress_health_check=[HealthCheck.too_slow, HealthCheck.filter_too_much], +) + + +@given(_pools()) +@_SETTINGS +def test_pool_total_is_the_source_total_over_its_mass_share(frame: Frame) -> None: + source = _source_rows(frame) + share = us_esi_premiums_household_mass_share(frame, source) + + anchored, receipt = with_us_esi_premium_pool_anchor(frame) + + expected = _total(frame, source) / share + assert _total(anchored) == pytest.approx(expected, rel=1e-9) + assert receipt["employer_premium_total"] == pytest.approx(expected, rel=1e-9) + assert receipt["pool_employer_premium_target"] == pytest.approx(expected, rel=1e-12) + assert receipt["source_household_mass_share"] == share + + +@given(_pools()) +@_SETTINGS +def test_both_sides_carry_the_same_premium_per_unit_of_household_mass( + frame: Frame, +) -> None: + source = _source_rows(frame) + share = us_esi_premiums_household_mass_share(frame, source) + assume(share < 1.0) + + anchored, _receipt = with_us_esi_premium_pool_anchor(frame) + + assert _total(anchored, ~source) / (1.0 - share) == pytest.approx( + _total(anchored, source) / share, rel=1e-9 + ) + + +@given(_pools()) +@_SETTINGS +def test_source_rows_and_every_other_column_are_untouched(frame: Frame) -> None: + source = _source_rows(frame) + + anchored, _receipt = with_us_esi_premium_pool_anchor(frame) + + before, after = frame.table("person"), anchored.table("person") + assert list(after.columns) == list(before.columns) + pd.testing.assert_frame_equal(after.loc[source], before.loc[source]) + untouched = [ + column + for column in before.columns + if column not in US_ESI_PREMIUMS_OUTPUT_COLUMNS + ] + pd.testing.assert_frame_equal(after[untouched], before[untouched]) + for entity in frame.entities: + if entity != "person": + pd.testing.assert_frame_equal(anchored.table(entity), frame.table(entity)) + np.testing.assert_array_equal(_person_weights(anchored), _person_weights(frame)) + + +@given(_pools()) +@_SETTINGS +def test_transferred_rows_without_wages_carry_nothing_and_the_rest_one_multiple( + frame: Frame, +) -> None: + source = _source_rows(frame) + workers = _record(frame, WAGES) > 0 + + anchored, receipt = with_us_esi_premium_pool_anchor(frame) + + cleared = ~source & ~workers + kept = ~source & workers + for column in US_ESI_PREMIUMS_OUTPUT_COLUMNS: + drawn = _record(frame, column) + assert not _column(anchored, column)[cleared].any() + assert receipt["cleared_rows"][column] == int((cleared & (drawn > 0)).sum()) + assert receipt["transferred_rows_reset_to_source_record"][column] == int( + (~source & (drawn != _column(frame, column))).sum() + ) + if column != EMPLOYER: + np.testing.assert_array_equal(_column(anchored, column)[kept], drawn[kept]) + np.testing.assert_allclose( + _column(anchored, EMPLOYER)[kept], + _record(frame, EMPLOYER)[kept] * receipt["scale_factor"], + rtol=1e-12, + ) + assert np.isfinite(_column(anchored, EMPLOYER)).all() + assert (_column(anchored, EMPLOYER) >= 0).all() + + +@given(_pools()) +@_SETTINGS +def test_every_support_clone_of_a_transferred_person_carries_one_premium( + frame: Frame, +) -> None: + anchored, _receipt = with_us_esi_premium_pool_anchor(frame) + + person = anchored.table("person") + transferred = ~_source_rows(anchored) + per_person = person.loc[transferred].groupby("person_source_id")[ + list(US_ESI_PREMIUMS_OUTPUT_COLUMNS) + ] + assert (per_person.nunique() == 1).all().all() + np.testing.assert_array_equal( + _column(anchored, EMPLOYER)[transferred], + _record(anchored, EMPLOYER)[transferred], + ) + + +@given(_pools()) +@_SETTINGS +def test_a_pool_on_the_stage_scale_is_returned_unchanged(frame: Frame) -> None: + anchored, _receipt = with_us_esi_premium_pool_anchor(frame) + + again, receipt = with_us_esi_premium_pool_anchor(anchored) + + assert again is anchored + assert receipt["status"] == ( + "already_on_anchor" if _transferred_mass(frame) > 0 else "no_transferred_mass" + ) + assert receipt["scale_factor"] == pytest.approx(1.0, rel=1e-12) + + +@given(_pools(), st.floats(min_value=1e-3, max_value=1e3, allow_nan=False)) +@_SETTINGS +def test_rescaling_every_household_weight_leaves_each_value_where_it_was( + frame: Frame, factor: float +) -> None: + rescaled = Frame( + {entity: frame.table(entity) for entity in frame.entities}, + frame.schema, + { + "household": Weights( + values=np.asarray(frame.weights_for("household").values) * factor, + kind=WeightKind.IMPORTANCE, + ) + }, + ) + + anchored, _receipt = with_us_esi_premium_pool_anchor(frame) + anchored_rescaled, _receipt = with_us_esi_premium_pool_anchor(rescaled) + + np.testing.assert_allclose( + _column(anchored_rescaled, EMPLOYER), _column(anchored, EMPLOYER), rtol=1e-9 + ) + + +def test_the_worked_two_source_pool() -> None: + # Source side: half the household mass, $600 of weighted premium. + # Transferred side: $300 drawn on a worker, $500 on a non-worker. + frame = _pool( + [ + {"source": True, "weight": 2.0, "people": [(300.0, 50_000.0)]}, + {"source": False, "weight": 1.0, "people": [(300.0, 40_000.0)]}, + {"source": False, "weight": 1.0, "people": [(500.0, 0.0)]}, + ] + ) + + anchored, receipt = with_us_esi_premium_pool_anchor(frame) + + assert receipt["source_household_mass_share"] == 0.5 + assert receipt["transferred_employer_premium_target"] == 600.0 + assert receipt["scale_factor"] == 2.0 + assert receipt["cleared_rows"][EMPLOYER] == 1 + assert receipt["cleared_weighted_total"][EMPLOYER] == 500.0 + np.testing.assert_array_equal(_column(anchored, EMPLOYER), [300.0, 600.0, 0.0]) + assert _total(anchored) == 1_200.0 + assert receipt["status"] == "scaled" + + +def test_support_clones_follow_their_source_record_wages() -> None: + # Households 3 and 4 are the support clones of 1 and 2. A clone's own + # wages are another tax-detail vector; the survey-side wages decide. + frame = _pool( + [ + {"source": True, "weight": 1.0, "people": [(400.0, 50_000.0)]}, + {"source": True, "weight": 1.0, "people": [(400.0, 0.0)]}, + {"source": False, "weight": 1.0, "people": [(200.0, 30_000.0)]}, + {"source": False, "weight": 1.0, "people": [(200.0, 0.0)]}, + {"source": False, "weight": 1.0, "people": [(200.0, 0.0)]}, + {"source": False, "weight": 1.0, "people": [(200.0, 9_000.0)]}, + ], + clone_of={4: 2, 5: 3}, + ) + + anchored, receipt = with_us_esi_premium_pool_anchor(frame) + + employer = _column(anchored, EMPLOYER) + # The worker's clone keeps the premium though its own wages are zero; the + # non-worker's clone loses it though its own wages are positive. + assert employer[2] == employer[4] > 0 + assert employer[3] == employer[5] == 0 + assert receipt["transferred_rows_without_source_wages"] == 2 + np.testing.assert_array_equal(employer[:2], [400.0, 400.0]) + + +def test_a_transfer_that_ran_after_the_clone_is_reset_to_one_premium_per_person() -> ( + None +): + # The legacy two-spine order clones first, so its transfer draws every + # support clone separately: $100 on the source record, $700 and nothing + # on its clones, whose own wages are another tax-detail vector. + frame = _pool( + [ + {"source": True, "weight": 3.0, "people": [(300.0, 50_000.0)]}, + {"source": False, "weight": 1.0, "people": [(100.0, 40_000.0)]}, + {"source": False, "weight": 1.0, "people": [(700.0, 0.0)]}, + {"source": False, "weight": 1.0, "people": [(0.0, 9.0)]}, + ], + clone_of={2: 1, 3: 1}, + clone_index={3: 2}, + ) + + anchored, receipt = with_us_esi_premium_pool_anchor(frame) + + # Every clone takes the source record's $100, then the one factor. + np.testing.assert_array_equal( + _column(anchored, EMPLOYER), [300.0, 300.0, 300.0, 300.0] + ) + assert receipt["transferred_rows_reset_to_source_record"][EMPLOYER] == 2 + assert receipt["cleared_rows"][EMPLOYER] == 0 + assert receipt["scale_factor"] == 3.0 + assert _total(anchored) == 1_800.0 + + +def test_transferred_rows_without_household_mass_are_not_scaled() -> None: + # Nothing to hold a zero-mass side to: structural zeros still apply, the + # factor stays at one and the pool total is the source total. + frame = _pool( + [ + {"source": True, "weight": 2.0, "people": [(300.0, 50_000.0)]}, + {"source": False, "weight": 0.0, "people": [(250.0, 40_000.0)]}, + {"source": False, "weight": 0.0, "people": [(500.0, 0.0)]}, + ] + ) + + anchored, receipt = with_us_esi_premium_pool_anchor(frame) + + assert receipt["source_household_mass_share"] == 1.0 + assert receipt["transferred_household_mass_share"] == 0.0 + assert receipt["transferred_employer_premium_target"] == 0.0 + assert receipt["scale_factor"] == 1.0 + np.testing.assert_array_equal(_column(anchored, EMPLOYER), [300.0, 250.0, 0.0]) + assert _total(anchored) == 600.0 == receipt["pool_employer_premium_target"] + + again, receipt = with_us_esi_premium_pool_anchor(anchored) + assert again is anchored + assert receipt["status"] == "no_transferred_mass" + + +def test_zero_mass_transferred_rows_need_no_premium_on_workers() -> None: + frame = _pool(_two_sided(h1={"weight": 0.0, "people": [(100.0, 0.0)]})) + + anchored, receipt = with_us_esi_premium_pool_anchor(frame) + + np.testing.assert_array_equal(_column(anchored, EMPLOYER), [100.0, 0.0]) + assert receipt["scale_factor"] == 1.0 + + +def test_a_frame_with_no_transferred_row_is_returned_unchanged() -> None: + frame = _pool([{"source": True, "weight": 3.0, "people": [(100.0, 1.0)]}]) + + anchored, receipt = with_us_esi_premium_pool_anchor(frame) + + assert anchored is frame + assert receipt["status"] == "no_transferred_rows" + assert receipt["source_household_mass_share"] == 1.0 + assert receipt["employer_premium_total"] == 300.0 + + +def _two_sided(**changes) -> list[dict]: + households = [ + {"source": True, "weight": 1.0, "people": [(100.0, 1.0)]}, + {"source": False, "weight": 1.0, "people": [(100.0, 1.0)]}, + ] + for position, change in changes.items(): + households[int(position.removeprefix("h"))] |= change + return households + + +def _with_person_cell( + frame: Frame, row: int, column: str | list[str], value: object +) -> Frame: + tables = {entity: frame.table(entity).copy() for entity in frame.entities} + tables["person"].loc[row, column] = value + return Frame( + tables, + frame.schema, + {"household": frame.weights_for("household")}, + ) + + +def test_a_row_with_only_some_raw_fields_is_refused() -> None: + frame = _with_person_cell(_pool(_two_sided()), 1, RAW[0], 1.0) + + with pytest.raises(SourceRuntimeError, match="only some of the raw ASEC fields"): + with_us_esi_premium_pool_anchor(frame) + + +def test_a_household_mixing_both_kinds_of_row_is_refused() -> None: + frame = _pool( + [{"source": True, "weight": 1.0, "people": [(100.0, 1.0), (50.0, 1.0)]}] + ) + mixed = _with_person_cell(frame, 1, [*RAW, CPS_ID], None) + + with pytest.raises(SourceRuntimeError, match="mix source-derived and transferred"): + with_us_esi_premium_pool_anchor(mixed) + + +def _two_cps_one_transferred() -> Frame: + return _pool( + [ + {"source": True, "weight": 1.0, "people": [(100.0, 1.0)]}, + {"source": True, "weight": 1.0, "people": [(100.0, 1.0)]}, + {"source": False, "weight": 2.0, "people": [(100.0, 1.0)]}, + ] + ) + + +def test_a_cps_record_that_lost_its_raw_fields_is_not_a_transferred_row() -> None: + # Nulls in every coverage field look like a transferred row. The CPS + # record id says otherwise, and the premium is not taken on trust. + frame = _with_person_cell(_two_cps_one_transferred(), 1, list(RAW), np.nan) + + with pytest.raises( + SourceRuntimeError, match=r"1 CPS record\(s\).*lack the raw ASEC fields" + ): + with_us_esi_premium_pool_anchor(frame) + + +@pytest.mark.parametrize("blank", [None, "", " "]) +def test_raw_fields_without_a_cps_record_id_are_refused(blank: object) -> None: + frame = _with_person_cell(_two_cps_one_transferred(), 1, CPS_ID, blank) + + with pytest.raises(SourceRuntimeError, match="without a CPS record id"): + with_us_esi_premium_pool_anchor(frame) + + +def test_a_frame_without_the_cps_record_id_cannot_hold_transferred_rows() -> None: + frame = _two_cps_one_transferred() + tables = {entity: frame.table(entity).copy() for entity in frame.entities} + tables["person"] = tables["person"].drop(columns=[CPS_ID]) + unmarked = Frame( + tables, frame.schema, {"household": frame.weights_for("household")} + ) + + with pytest.raises(SourceRuntimeError, match=f"no {CPS_ID!r} column"): + with_us_esi_premium_pool_anchor(unmarked) + + +@pytest.mark.parametrize("wage", [np.nan, None]) +def test_a_transferred_person_with_a_missing_wage_is_refused(wage: object) -> None: + # Missing evidence is not a zero: the premium is neither cleared nor kept. + frame = _with_person_cell(_pool(_two_sided()), 1, WAGES, wage) + + with pytest.raises(SourceRuntimeError, match="A missing wage is not a zero wage"): + with_us_esi_premium_pool_anchor(frame) + + +def test_a_missing_wage_on_a_source_record_blocks_its_clones_too() -> None: + frame = _pool(_two_sided() + [_two_sided()[1]], clone_of={2: 1}) + frame = _with_person_cell(frame, 1, WAGES, np.nan) + + with pytest.raises(SourceRuntimeError, match="2 transferred row"): + with_us_esi_premium_pool_anchor(frame) + + +def test_a_missing_wage_on_a_source_derived_row_is_not_read() -> None: + frame = _with_person_cell(_pool(_two_sided()), 0, WAGES, np.nan) + + anchored, receipt = with_us_esi_premium_pool_anchor(frame) + + assert anchored is frame + assert receipt["status"] == "already_on_anchor" + + +@pytest.mark.parametrize("value", [np.nan, np.inf, -1.0]) +def test_an_unfilled_or_negative_premium_is_refused(value: float) -> None: + frame = _with_person_cell(_pool(_two_sided()), 1, EMPLOYER, value) + + with pytest.raises(SourceRuntimeError, match="finite and nonnegative"): + with_us_esi_premium_pool_anchor(frame) + + +def test_transferred_rows_with_no_premium_on_workers_are_refused() -> None: + frame = _pool(_two_sided(h1={"people": [(100.0, 0.0)]})) + + with pytest.raises(SourceRuntimeError, match="nothing to scale"): + with_us_esi_premium_pool_anchor(frame) + + +def test_source_rows_with_no_premium_mass_are_refused() -> None: + frame = _pool(_two_sided(h0={"people": [(0.0, 1.0)]})) + + with pytest.raises(SourceRuntimeError, match="source-derived rows hold no"): + with_us_esi_premium_pool_anchor(frame) + + +def test_missing_wages_or_outputs_are_refused() -> None: + frame = _pool(_two_sided()) + for column in (WAGES, EMPLOYER, RAW[0]): + tables = {entity: frame.table(entity).copy() for entity in frame.entities} + tables["person"] = tables["person"].drop(columns=[column]) + stripped = Frame( + tables, frame.schema, {"household": frame.weights_for("household")} + ) + with pytest.raises(SourceRuntimeError, match=column): + with_us_esi_premium_pool_anchor(stripped) + + +def test_a_support_clone_without_its_source_record_is_refused() -> None: + frame = _pool(_two_sided(), clone_of={1: 0}) + orphaned = _with_person_cell(frame, 1, "person_source_id", 999_999) + + with pytest.raises(SourceRuntimeError, match="no clone-0 source record"): + with_us_esi_premium_pool_anchor(orphaned) + + +def test_household_mass_share_is_weight_not_headcount() -> None: + frame = _pool( + [ + {"source": True, "weight": 3.0, "people": [(1.0, 1.0)]}, + {"source": False, "weight": 1.0, "people": [(1.0, 1.0)] * 3}, + ] + ) + + assert us_esi_premiums_household_mass_share(frame, _source_rows(frame)) == 0.75 + assert us_esi_premiums_household_mass_share(frame, ~_source_rows(frame)) == 0.25 + with pytest.raises(SourceRuntimeError, match="one flag per person"): + us_esi_premiums_household_mass_share(frame, np.array([True])) + + +# --- The stage, the cross-source fill and the anchor on one stacked pool ------ + +_STATES = (6, 36, 48, 12, 17, 39, 53, 13) +_ESI_FAMILY = "source_operator_esi_premiums" + + +def _replace_tables(frame: Frame, **tables: pd.DataFrame) -> Frame: + return Frame( + {entity: tables.get(entity, frame.table(entity)) for entity in frame.entities}, + frame.schema, + {"household": frame.weights_for("household")}, + frame.strata, + ) + + +def _asec_arm(households: int = 320) -> Frame: + """One-person ASEC households: a mix inside the signal-gate bands. + + Of every 20 people, 7 are employed policyholders, 2 are policyholders + without a job (retirees), 5 are employed without a policy and 6 are + neither. + """ + + frame = _stacked_source_frame( + household_ids=list(range(1, households + 1)), + weights=[900.0 + 37.0 * (index % 11) for index in range(households)], + stratum="asec_2024", + ) + index = np.arange(households) + kind = index % 20 + holder = kind < 9 + employed = (kind < 7) | ((kind >= 9) & (kind < 14)) + tier = np.where(holder, np.asarray([1, 2, 3])[index % 3], 0) + wages = np.where(employed, 28_000.0 + 850.0 * (index % 97), 0.0) + person = frame.table("person").copy() + person["PERIDNUM"] = [f"asec-{position:05d}" for position in index] + person["source_year"] = 2024 + person["source_household_id"] = person["person_household_id"].to_numpy() + person["source_person_id"] = 1 + person["age"] = np.where(employed, 24.0 + index % 40, 66.0 + index % 20) + person["is_female"] = index % 2 == 0 + person[WAGES] = wages + person["NOW_OWNGRP"] = np.where(holder, 1, 2) + person["NOW_HIPAID"] = np.where(holder, np.asarray([1, 2, 2, 3])[index % 4], 0) + person["NOW_GRPFTYP2"] = tier + person["NOW_GRPFTYP"] = np.asarray([0, 1, 1, 2])[tier] + person["PEMLR"] = np.where(employed, 1, 5) + person["NOEMP"] = np.where(employed, np.asarray([1, 3, 6, 0])[index % 4], 0) + person["PEIO1COW"] = np.where( + employed, np.asarray([4, 4, 5, 2, 3, 1])[index % 6], 0 + ) + household = frame.table("household").copy() + household["state_fips"] = np.asarray(_STATES, dtype=np.int64)[index % len(_STATES)] + return _replace_tables(frame, person=person, household=household) + + +def _acs_arm(households: int = 280) -> Frame: + """One-person ACS households: native age, sex, State and wages only.""" + + frame = _stacked_source_frame( + household_ids=list(range(10_001, 10_001 + households)), + weights=[40.0 + 3.0 * (index % 13) for index in range(households)], + extra_household_columns={"TYPEHUGQ": 1}, + stratum="acs_2024_1yr", + ) + index = np.arange(households) + employed = index % 5 < 3 + person = frame.table("person").copy() + person["age"] = np.where(employed, 23.0 + index % 42, 67.0 + index % 18) + person["is_female"] = index % 2 == 1 + person[WAGES] = np.where(employed, 26_000.0 + 1_100.0 * (index % 83), 0.0) + household = frame.table("household").copy() + household["state_fips"] = np.asarray(_STATES, dtype=np.int64)[ + (index + 3) % len(_STATES) + ] + return _replace_tables(frame, person=person, household=household) + + +def _stage_on_cps_rows(pool: Frame) -> tuple[Frame, dict]: + """Run the pool's ESI operator alone through the guarded pre-clone runner.""" + + staged = pool_module._run_source_operator_chain( + pool, + phase="pre_clone", + operator_names=("with_us_esi_premium_inputs",), + operators={ + "with_us_esi_premium_inputs": lambda available: ( + pool_module._with_pool_us_esi_premium_inputs(available, pool=pool) + ) + }, + ) + return staged.frame, staged.receipt["suboperators"][0]["kernel_receipt"] + + +def _esi_gap_fill_plan() -> tuple[GapFillDirection, ...]: + return ( + GapFillDirection( + name="asec_survey_to_acs", + recipient_channel="acs", + donor_channel="asec", + target_families={ + "person": {_ESI_FAMILY: tuple(sorted(US_ESI_PREMIUMS_OUTPUT_COLUMNS))} + }, + ), + ) + + +@pytest.fixture(scope="module") +def stacked_pool() -> dict[str, object]: + asec, acs = _asec_arm(), _acs_arm() + assembled = assemble_stacked_spine( + asec, acs, acs_sample_fraction=1.0, acs_sample_seed=578 + ).frame + staged, stage_receipt = _stage_on_cps_rows(assembled) + filled = _gap_fill_with_test_authority( + staged, plan=_esi_gap_fill_plan(), seed=0, n_estimators=20 + ).frame + anchored, receipt = with_us_esi_premium_pool_anchor(filled) + return { + "asec": asec, + "assembled": assembled, + "staged": staged, + "stage_receipt": stage_receipt, + "filled": filled, + "anchored": anchored, + "receipt": receipt, + } + + +def test_the_pool_runs_the_stage_on_cps_rows_at_their_household_mass_share( + stacked_pool, +) -> None: + staged = stacked_pool["staged"].table("person") + cps = staged["PERIDNUM"].notna().to_numpy() + + assert stacked_pool["stage_receipt"] == {"anchor_share": 0.5} + for column in US_ESI_PREMIUMS_OUTPUT_COLUMNS: + assert staged.loc[cps, column].notna().all() + assert staged.loc[~cps, column].isna().all() + assert staged.loc[cps, column].nunique() > 1 + + +def test_pool_cps_rows_carry_the_dollars_of_a_single_source_build(stacked_pool) -> None: + # Differential: the same stage on the ASEC arm alone, at its own weights. + alone = with_us_esi_premium_inputs( + stacked_pool["asec"], seed=pool_module.POOL_RANDOM_SEED, time_period=2024 + ).table("person") + pooled = stacked_pool["anchored"].table("person") + pooled = pooled.loc[pooled["PERIDNUM"].notna()].set_index("PERIDNUM") + + for column in US_ESI_PREMIUMS_OUTPUT_COLUMNS: + np.testing.assert_allclose( + pooled.loc[alone["PERIDNUM"], column].to_numpy(), + alone[column].to_numpy(), + rtol=1e-12, + ) + + +def test_pool_wide_employer_total_is_the_single_source_total(stacked_pool) -> None: + alone = with_us_esi_premium_inputs( + stacked_pool["asec"], seed=pool_module.POOL_RANDOM_SEED, time_period=2024 + ) + anchored = stacked_pool["anchored"] + cps = _source_rows(anchored) + + assert _total(anchored) == pytest.approx(_total(alone), rel=1e-9) + assert _total(anchored, cps) == pytest.approx(0.5 * _total(alone), rel=1e-9) + assert _total(anchored, ~cps) == pytest.approx(0.5 * _total(alone), rel=1e-9) + assert stacked_pool["receipt"]["status"] == "scaled" + assert stacked_pool["receipt"]["source_household_mass_share"] == 0.5 + + +def test_acs_rows_carry_signal_and_no_premium_without_wages(stacked_pool) -> None: + person = stacked_pool["anchored"].table("person") + acs = person["PERIDNUM"].isna().to_numpy() + workers = (person[WAGES] > 0).to_numpy() + + assert acs.sum() == 280 + for column in US_ESI_PREMIUMS_OUTPUT_COLUMNS: + values = person[column].to_numpy(dtype=float) + assert np.isfinite(values).all() and (values >= 0).all() + assert (values[acs & workers] > 0).any() + assert np.unique(values[acs]).size > 2 + assert not values[acs & ~workers].any() + # The fill conditions on measured wages, so few draws needed clearing and + # the transferred rows sit near the source rows before the anchor scale. + receipt = stacked_pool["receipt"] + assert receipt["cleared_rows"][EMPLOYER] <= 0.1 * acs.sum() + assert 0.5 <= receipt["scale_factor"] <= 2.0 + + +def test_the_pool_keeps_its_total_and_clone_agreement_through_the_puf_clone( + stacked_pool, +) -> None: + # The pipeline clones after the fill and anchors after the clone. Clone a + # seeded half of the households so both clone pairs and single lineages + # are present. + cloned = clone_us_frame_for_puf_support( + stacked_pool["filled"], + clone_attachment_fraction=0.5, + clone_attachment_seed=7, + ) + anchored, receipt = with_us_esi_premium_pool_anchor(cloned) + person = anchored.table("person") + + assert set(person["person_support_clone_index"]) == {0, 1} + assert _total(anchored) == pytest.approx(_total(stacked_pool["anchored"]), rel=1e-9) + assert receipt["source_household_mass_share"] == pytest.approx(0.5, rel=1e-12) + assert receipt["scale_factor"] == pytest.approx( + stacked_pool["receipt"]["scale_factor"], rel=1e-9 + ) + per_source = person.groupby("person_source_id")[ + list(US_ESI_PREMIUMS_OUTPUT_COLUMNS) + ].nunique() + assert (per_source == 1).all().all() + + +@given( + share=st.floats(min_value=0.1, max_value=0.9), + asec_scale=st.floats(min_value=0.01, max_value=100.0), + acs_scale=st.floats(min_value=0.01, max_value=100.0), +) +@settings(max_examples=12, deadline=None) +def test_any_mass_split_keeps_the_pool_on_the_single_source_total( + share: float, asec_scale: float, acs_scale: float +) -> None: + def scaled(frame: Frame, factor: float) -> Frame: + return Frame( + {entity: frame.table(entity) for entity in frame.entities}, + frame.schema, + { + "household": Weights( + values=np.asarray(frame.weights_for("household").values) * factor, + kind=WeightKind.DESIGN, + ) + }, + frame.strata, + ) + + asec = scaled(_asec_arm(120), asec_scale) + pool = assemble_spines( + {"asec": asec, "acs": scaled(_acs_arm(90), acs_scale)}, + household_mass_shares={"asec": share, "acs": 1.0 - share}, + ) + staged, stage_receipt = _stage_on_cps_rows(pool) + cps = staged.table("person")["PERIDNUM"].notna().to_numpy() + filled = transfer_acs_inputs( + staged, + staged.select(cps), + target_families=_esi_gap_fill_plan()[0].target_families, + donor_channel=None, + seed=0, + n_estimators=5, + ).frame + + anchored, receipt = with_us_esi_premium_pool_anchor(filled) + + alone = with_us_esi_premium_inputs(asec, seed=0, time_period=2024) + assert stage_receipt["anchor_share"] == pytest.approx(share, rel=1e-9) + assert _total(anchored) == pytest.approx(_total(alone), rel=1e-9) + assert _total(anchored, cps) == pytest.approx(share * _total(alone), rel=1e-9) + assert receipt["source_household_mass_share"] == pytest.approx(share, rel=1e-9) + # The anchor counts every policyholder. Held to the pool, that is the + # column over the employed share of the anchor universe. + summary = us_esi_premiums_summary(anchored) + assert summary["anchor_universe_employer_total"] == pytest.approx(ANCHOR, rel=1e-9) + assert summary["transferred_to_source_per_household_mass_ratio"] == pytest.approx( + 1.0, rel=1e-9 + ) + + +# --- The stage at a share of the anchor --------------------------------------- + + +def _reweighted(frame: Frame, factors: np.ndarray | float) -> Frame: + return Frame( + {entity: frame.table(entity) for entity in frame.entities}, + frame.schema, + { + "household": Weights( + values=np.asarray(frame.weights_for("household").values) * factors, + kind=frame.weights_for("household").kind, + ) + }, + frame.strata, + metadata=frame.metadata, + ) + + +@given(share=st.floats(min_value=0.02, max_value=1.0)) +@settings(max_examples=25, deadline=None) +def test_a_share_of_the_weights_at_that_share_of_the_anchor_moves_no_value( + share: float, +) -> None: + # Weight homogeneity across the pool boundary: rows at ``share`` of their + # weight, held to ``share`` of the anchor, carry single-source dollars. + asec = _asec_arm(80) + alone = with_us_esi_premium_inputs(asec, seed=0, time_period=2024) + + shared = with_us_esi_premium_inputs( + _reweighted(asec, share), seed=0, time_period=2024, anchor_share=share + ) + + np.testing.assert_allclose( + _column(shared, EMPLOYER), _column(alone, EMPLOYER), rtol=1e-12 + ) + summary = us_esi_premiums_summary(shared) + assert summary["anchor_universe_employer_total"] == pytest.approx( + share * ANCHOR, rel=1e-9 + ) + + +def test_the_anchor_share_defaults_to_the_whole_anchor() -> None: + asec = _asec_arm(80) + + default = with_us_esi_premium_inputs(asec, seed=0, time_period=2024) + explicit = with_us_esi_premium_inputs( + asec, seed=0, time_period=2024, anchor_share=1.0 + ) + + np.testing.assert_array_equal( + _column(default, EMPLOYER), _column(explicit, EMPLOYER) + ) + assert us_esi_premiums_summary(default)[ + "anchor_universe_employer_total" + ] == pytest.approx(ANCHOR, rel=1e-12) + + +@pytest.mark.parametrize("share", [0.0, -0.5, 1.0000001, np.nan, np.inf, True, "0.5"]) +def test_an_anchor_share_outside_zero_to_one_is_refused(share: object) -> None: + with pytest.raises(SourceRuntimeError, match="anchor share must be"): + with_us_esi_premium_inputs( + _asec_arm(40), seed=0, time_period=2024, anchor_share=share + ) + + +# --- The gates on a pooled frame ---------------------------------------------- + + +def test_both_gates_pass_on_the_stacked_pool(stacked_pool) -> None: + anchored = stacked_pool["anchored"] + + signal = us_esi_premiums_signal_gate(anchored) + anchor = us_esi_premiums_anchor_gate(anchored, time_period=2024) + + assert signal.passed, signal.failures + assert anchor.passed, anchor.failures + # The cell proofs ran on the CPS-source rows, and found them one common + # multiple of their MEPS-IC shares: the single-source factor. + alone = us_esi_premiums_summary( + with_us_esi_premium_inputs(stacked_pool["asec"], seed=0, time_period=2024) + ) + assert signal.details["source_rows"] == 320 + assert signal.details["transferred_rows"] == 280 + assert signal.details["scale_factor"] == pytest.approx( + alone["scale_factor"], rel=1e-9 + ) + assert signal.details["employer_premium_outside_universe_rows"] == 0 + assert signal.details["clone_disagreement_source_persons"] == 0 + assert signal.details["transferred_source_records_with_premium_and_no_wages"] == 0 + assert anchor.details["anchor_universe_employer_total"] == pytest.approx( + ANCHOR, rel=1e-9 + ) + assert anchor.details["relative_error"] == pytest.approx(0.0, abs=1e-9) + assert anchor.details["source_household_mass_share"] == 0.5 + assert anchor.details[ + "transferred_to_source_per_household_mass_ratio" + ] == pytest.approx(1.0, rel=1e-9) + assert anchor.details["employed_share_of_anchor_universe"] == pytest.approx( + alone["employed_share_of_anchor_universe"], rel=1e-12 + ) + assert "employed share" in anchor.details["anchor_universe_assumption"] + # Scaled to the population, the private-sector cross-check matches the + # single-source one. + assert anchor.details["private_active_cross_check"][ + "employer_premium_private_sector" + ] == pytest.approx(alone["employer_premium_by_sector"]["private"], rel=1e-9) + + +def test_both_gates_pass_on_the_pool_after_the_puf_clone(stacked_pool) -> None: + cloned = clone_us_frame_for_puf_support(stacked_pool["filled"]) + anchored, _receipt = with_us_esi_premium_pool_anchor(cloned) + + signal = us_esi_premiums_signal_gate(anchored) + anchor = us_esi_premiums_anchor_gate(anchored, time_period=2024) + + assert signal.passed, signal.failures + assert anchor.passed, anchor.failures + assert signal.details["clone_disagreement_source_persons"] == 0 + assert anchor.details["anchor_universe_employer_total"] == pytest.approx( + ANCHOR, rel=1e-9 + ) + + +def _with_transferred_scaled(frame: Frame, factor: float) -> Frame: + tables = {entity: frame.table(entity).copy() for entity in frame.entities} + transferred = ~_source_rows(frame) + tables["person"].loc[transferred, EMPLOYER] *= factor + return Frame( + tables, + frame.schema, + {"household": frame.weights_for("household")}, + frame.strata, + metadata=frame.metadata, + ) + + +def test_transferred_rows_without_the_premium_fail_the_signal_gate( + stacked_pool, +) -> None: + flattened = _with_transferred_scaled(stacked_pool["anchored"], 0.0) + + signal = us_esi_premiums_signal_gate(flattened) + + assert not signal.passed + assert any( + "positive share on the rows without raw ASEC columns" in failure + for failure in signal.failures + ) + + +@pytest.mark.parametrize("factor", [0.7, 1.4]) +def test_transferred_rows_off_the_source_rows_per_mass_total_fail_the_anchor_gate( + stacked_pool, factor: float +) -> None: + skewed = _with_transferred_scaled(stacked_pool["anchored"], factor) + + anchor = us_esi_premiums_anchor_gate(skewed, time_period=2024) + + assert not anchor.passed + assert anchor.details[ + "transferred_to_source_per_household_mass_ratio" + ] == pytest.approx(factor, rel=1e-9) + assert any("per unit of household mass" in failure for failure in anchor.failures) + # Half the mass at ``factor`` moves the anchor-universe total by half of it. + assert anchor.details["relative_error"] == pytest.approx( + (factor - 1.0) / 2.0, rel=1e-6 + ) + + +def test_reweighting_one_side_moves_the_pool_total_but_not_the_per_mass_ratio( + stacked_pool, +) -> None: + # What calibration does across sources: more weight on one side. + anchored = stacked_pool["anchored"] + household = anchored.table("household") + transferred_households = household["household_id"].isin( + anchored.table("person").loc[~_source_rows(anchored), "person_household_id"] + ) + reweighted = _reweighted(anchored, np.where(transferred_households, 1.06, 1.0)) + + anchor = us_esi_premiums_anchor_gate(reweighted, time_period=2024) + + assert anchor.passed, anchor.failures + assert anchor.details[ + "transferred_to_source_per_household_mass_ratio" + ] == pytest.approx(1.0, rel=1e-9) + assert anchor.details["relative_error"] == pytest.approx(0.03, rel=1e-6) + assert anchor.details["source_household_mass_share"] == pytest.approx( + 1.0 / 2.06, rel=1e-9 + ) + + +def _with_person_rows(frame: Frame, rows: np.ndarray, columns, value) -> Frame: + tables = {entity: frame.table(entity).copy() for entity in frame.entities} + person = tables["person"] + person.loc[person.index[rows], columns] = value + return Frame( + tables, + frame.schema, + {"household": frame.weights_for("household")}, + frame.strata, + metadata=frame.metadata, + ) + + +def test_a_pool_whose_transferred_rows_hold_no_mass_passes_both_gates( + stacked_pool, +) -> None: + # Selection can leave one source without weight. The other source then + # carries the whole population, and there is no second half to compare. + anchored = stacked_pool["anchored"] + household = anchored.table("household") + transferred_households = household["household_id"].isin( + anchored.table("person").loc[~_source_rows(anchored), "person_household_id"] + ) + source_only = _reweighted(anchored, np.where(transferred_households, 0.0, 2.0)) + + signal = us_esi_premiums_signal_gate(source_only) + anchor = us_esi_premiums_anchor_gate(source_only, time_period=2024) + + assert signal.passed, signal.failures + assert anchor.passed, anchor.failures + assert anchor.details["transferred_household_mass_share"] == 0.0 + assert anchor.details["anchor_universe_employer_total"] == pytest.approx( + ANCHOR, rel=1e-9 + ) + again, receipt = with_us_esi_premium_pool_anchor(source_only) + assert again is source_only + assert receipt["status"] == "no_transferred_mass" + + +def test_cps_records_that_lost_their_raw_fields_fail_both_gates(stacked_pool) -> None: + anchored = stacked_pool["anchored"] + lost = np.flatnonzero(_source_rows(anchored))[:4] + + for frame in ( + # A pool, and a single-source frame: neither may read lost coverage + # codes as a transfer. + _with_person_rows(anchored, lost, list(RAW), np.nan), + _with_person_rows( + with_us_esi_premium_inputs(stacked_pool["asec"], seed=0, time_period=2024), + np.arange(4), + list(RAW), + np.nan, + ), + ): + for gate in ( + us_esi_premiums_signal_gate(frame), + us_esi_premiums_anchor_gate(frame, time_period=2024), + ): + assert not gate.passed + assert "4 CPS record(s)" in gate.failures[0] + assert "lack the raw ASEC fields" in gate.failures[0] + + +def test_transferred_support_clones_that_disagree_fail_the_signal_gate( + stacked_pool, +) -> None: + cloned = clone_us_frame_for_puf_support(stacked_pool["filled"]) + anchored, _receipt = with_us_esi_premium_pool_anchor(cloned) + person = anchored.table("person") + clone = np.flatnonzero( + ~_source_rows(anchored) + & person["person_support_clone_index"].eq(1).to_numpy() + & (person[EMPLOYER] > 0).to_numpy() + )[:1] + split = _with_person_rows(anchored, clone, EMPLOYER, 1.0) + + signal = us_esi_premiums_signal_gate(split) + + assert us_esi_premiums_signal_gate(anchored).passed + assert signal.details["transferred_clone_disagreement_source_records"] == 1 + assert any( + "support-clone disagreement(s) on the rows without raw ASEC columns" in failure + for failure in signal.failures + ) + # The anchor restores one premium per person. + restored, receipt = with_us_esi_premium_pool_anchor(split) + assert receipt["transferred_rows_reset_to_source_record"][EMPLOYER] == 1 + assert us_esi_premiums_signal_gate(restored).passed + + +def test_a_row_with_only_some_raw_columns_fails_both_gates(stacked_pool) -> None: + anchored = stacked_pool["anchored"] + tables = {entity: anchored.table(entity).copy() for entity in anchored.entities} + transferred = np.flatnonzero(~_source_rows(anchored)) + tables["person"].loc[tables["person"].index[transferred[0]], RAW[0]] = 2 + broken = Frame( + tables, + anchored.schema, + {"household": anchored.weights_for("household")}, + anchored.strata, + metadata=anchored.metadata, + ) + + for gate in ( + us_esi_premiums_signal_gate(broken), + us_esi_premiums_anchor_gate(broken, time_period=2024), + ): + assert not gate.passed + assert "only some of the raw ASEC fields" in gate.failures[0] + + +def test_a_single_source_frame_gets_no_pool_keys(stacked_pool) -> None: + alone = with_us_esi_premium_inputs(stacked_pool["asec"], seed=0, time_period=2024) + + summary = us_esi_premiums_summary(alone) + anchor = us_esi_premiums_anchor_gate(alone, time_period=2024) + + assert "transferred_rows" not in summary + assert "source_household_mass_share" not in anchor.details + assert anchor.passed, anchor.failures + + +# --- the real stacked fill, measured on the pinned inputs ----------------------------- + + +@pytest.mark.parametrize( + ( + "fraction", + "rows", + "incidence", + "quantile_distance", + "cleared", + "factor", + "means", + "total", + ), + [ + # Figures quoted in docs/us-esi-employer-premiums.md: person rows + # (ASEC, ACS), ACS-over-ASEC incidence and quantile distance (after the + # fill, after the anchor), rows cleared, scale factor, mean per holder + # after the anchor (ASEC, ACS) and the pool column total. + ( + "f001", + (4_177, 34_293), + (0.933, 0.930), + (0.072, 0.169), + 34, + 1.102, + (11_741, 12_935), + 947.3e9, + ), + ( + "f005", + (21_133, 171_381), + (0.975, 0.969), + (0.047, 0.077), + 255, + 1.047, + (12_608, 13_208), + 924.7e9, + ), + ], +) +def test_the_pool_fill_receipts_reproduce_the_documented_measurements( + fraction, rows, incidence, quantile_distance, cleared, factor, means, total +) -> None: + receipt = json.loads( + ( + _REPOSITORY_ROOT + / f"experiments/us-esi-454/receipts/pool_fill_2023_2025_{fraction}.json" + ).read_text() + ) + target = f"person/source_operator_esi_premiums/{EMPLOYER}" + anchor = receipt["pool_anchor"] + + assert receipt["target_year"] == 2024 + assert receipt["anchor"] == ANCHOR + assert receipt["signal_gate"] == {"passed": True, "failures": []} + assert receipt["anchor_gate"] == {"passed": True, "failures": []} + assert receipt["gap_fill_targets"][target] == { + "authorized_null_rows": rows[1], + "imputed_rows": rows[1], + "residual_null_rows": 0, + "unmodeled_rows": 0, + } + assert (anchor["source_rows"], anchor["transferred_rows"]) == rows + assert anchor["source_household_mass_share"] == pytest.approx(0.5) + # Every ACS wage is a number by the anchor: the universe producer wrote + # the zeros below age 15 and no eligible record was missing one. + universe = receipt["acs_wage_universe"] + assert universe["rule_id"] == "acs_2024_pums_wagp_age_15_plus" + assert universe["in_universe_null_rows"] == 0 + assert ( + universe["structurally_absent_person_rows"] + + universe["eligible_acs_person_rows"] + == rows[1] + ) + # The stacked order fills before it clones, so no clone needed resetting. + assert anchor["transferred_rows_reset_to_source_record"] == {EMPLOYER: 0} + assert anchor["cleared_rows"] == {EMPLOYER: cleared} + assert anchor["scale_factor"] == pytest.approx(factor, abs=5e-4) + # Conservation and equal intensity, on the real fill. + assert anchor["employer_premium_total"] == pytest.approx( + anchor["source_employer_premium_total"] / anchor["source_household_mass_share"], + rel=1e-9, + ) + assert receipt["pool_employer_premium_total"] == pytest.approx(total, rel=1e-4) + for stage, at in (("before_anchor", 0), ("after_anchor", 1)): + battery = receipt[stage]["by_origin_battery"] + assert battery["passed"] and battery["failures"] == [] + leg = battery["comparisons"][f"{target}[clone_0]"]["legs"]["positive"] + assert leg["incidence_ratio_acs_over_asec"] == pytest.approx( + incidence[at], abs=5e-4 + ) + assert leg["quantile_envelope_distance"] == pytest.approx( + quantile_distance[at], abs=5e-4 + ) + sides = receipt["after_anchor"]["sides"][EMPLOYER] + assert sides["acs"]["positive_rows_without_wages"] == 0 + assert sides["acs"]["weighted_total"] == pytest.approx( + sides["cps"]["weighted_total"], rel=1e-9 + ) + assert ( + round(sides["cps"]["mean_per_positive_person"]), + round(sides["acs"]["mean_per_positive_person"]), + ) == means diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_modal_stage_plan_tool.py b/packages/microcosm-build/tests/engine_free/us/test_us_modal_stage_plan_tool.py index 90307cd5fb..fb23cf55d7 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_us_modal_stage_plan_tool.py +++ b/packages/microcosm-build/tests/engine_free/us/test_us_modal_stage_plan_tool.py @@ -312,6 +312,24 @@ def test_package_argv_adds_release_root_and_bool_flags() -> None: assert "--allow-dirty" not in argv +@pytest.mark.parametrize("stage", ["finalize", "package"]) +def test_the_esi_premium_waiver_reaches_the_stages_that_grade_it(stage) -> None: + # microcosm#454: a diagnostic run on a checkpoint without the premium + # needs the waiver forwarded; a release plan leaves it unset. + data = _plan_data(stage) + data["options"] = {"allow_esi_premium_gaps": True} + assert "--allow-esi-premium-gaps" in plan_lib.planned_argv( + plan_lib.parse_plan(data) + ) + data["options"] = {"allow_esi_premium_gaps": False} + assert "--allow-esi-premium-gaps" not in plan_lib.planned_argv( + plan_lib.parse_plan(data) + ) + assert "--allow-esi-premium-gaps" not in plan_lib.planned_argv( + plan_lib.parse_plan(_plan_data(stage)) + ) + + def test_argv_paths_are_stable_across_stages() -> None: # run_identity.json records the staging path and every later stage # re-verifies the staging digest, so staged paths must not move. diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_multispine_pool.py b/packages/microcosm-build/tests/engine_free/us/test_us_multispine_pool.py index 4e15a813be..a9594c291d 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_us_multispine_pool.py +++ b/packages/microcosm-build/tests/engine_free/us/test_us_multispine_pool.py @@ -595,6 +595,10 @@ def test_pool_transfer_plan_extends_legacy_except_receipted_asset_deferrals() -> "person", "source_operator_cps_carried", ) + assert owners["employer_sponsored_insurance_premiums"] == ( + "person", + "source_operator_esi_premiums", + ) assert POOL_OPERATOR_CONTRACTS["derive_us_cps_carried_inputs"].phases == ( "pre_clone", ) @@ -603,10 +607,10 @@ def test_pool_transfer_plan_extends_legacy_except_receipted_asset_deferrals() -> assert "has_marketplace_health_coverage" not in owners target_names = sorted(owners) - assert len(target_names) == 118 + assert len(target_names) == 119 assert ( hashlib.sha256(("\n".join(target_names) + "\n").encode()).hexdigest() - == "c792f12f0ef34f8a2ca9f16e68f5b306391eed56f120cda247bf778a95118c15" + == "fc2ee6977017febbf653d50034d74f5bf782a133bbc0861aadc0354418ba07a8" ) @@ -625,7 +629,7 @@ def keys(target_families): puf_producers = keys(pool_post_puf_puf_producer_target_families()) source_producers = keys(pool_post_puf_source_producer_target_families()) - assert len(early) == 48 + assert len(early) == 49 assert len(late) == 70 assert early.isdisjoint(late) assert early | late == full @@ -661,13 +665,13 @@ def test_pool_input_surface_normalizes_all_four_source_registries() -> None: surface = pool_input_surface() by_name = {entry.variable: entry for entry in surface} - assert len(surface) == len(by_name) == 142 + assert len(surface) == len(by_name) == 143 assert [entry.variable for entry in surface] == sorted(by_name) assert Counter( provenance for entry in surface for provenance in entry.provenance ) == Counter( { - "pool_transfer_target_families": 118, + "pool_transfer_target_families": 119, "POOL_DEFERRED_TRANSFER_INPUTS": 3, "PRIMARY_QRF_TARGET_ORDER": 65, "load_take_up_contract": 17, @@ -864,6 +868,22 @@ def test_remaining_stage_manifest_covers_every_derive_read() -> None: ("person", "schedule_d_capital_gain_distributions"), ("tax_unit", "tax_unit_id"), }, + "with_us_esi_premium_pool_anchor": { + ("person", "employer_sponsored_insurance_premiums"), + *{ + ("person", column) + for column in US_ESI_PREMIUMS_REQUIRED_SOURCE_COLUMNS + if column != "state_fips" + }, + ("person", "PERIDNUM"), + ("person", "employment_income_before_lsr"), + ("person", "person_source_id"), + ("person", "person_support_clone_index"), + ("person", "person_household_id"), + ("person", ""), + ("household", "household_id"), + ("household", ""), + }, "with_us_qbi_input_reconciliation": { *{("person", variable) for variable in US_QBI_OUTPUT_COLUMNS}, ("person", "self_employment_income_before_lsr"), @@ -1027,14 +1047,14 @@ def test_remaining_stage_manifest_enumerates_every_simulation_projection_input() } assert Counter(entry.provision for entry in projection) == Counter( { - "materialized_pool_input_surface": 122, + "materialized_pool_input_surface": 123, "seed_stage_program_contract": 17, "declared_deferred_null_input": 3, "assembled_native_engine_input": 5, "frame_structural_engine_input": 10, "preserved_stacked_engine_input": 4, "derived_schedule_d_input": 1, - "declared_absent_engine_input": 763, + "declared_absent_engine_input": 762, "unprovisioned_source_input": 1, } ) @@ -1071,9 +1091,9 @@ def test_remaining_stage_manifest_enumerates_every_simulation_projection_input() def test_remaining_stage_manifest_is_unique_complete_and_stable() -> None: manifest = pool_remaining_stage_input_manifest(_installed_variable_metadata_index()) - assert len(manifest) == 1059 + assert len(manifest) == 1075 assert Counter(entry.stage for entry in manifest) == Counter( - {"derive": 34, "seed": 33, "simulate": 992} + {"derive": 50, "seed": 33, "simulate": 992} ) assert len( { @@ -1086,9 +1106,9 @@ def test_remaining_stage_manifest_is_unique_complete_and_stable() -> None: receipt = pool_remaining_stage_input_manifest_receipt( _installed_variable_metadata_index() ) - assert receipt["entry_count"] == 1059 + assert receipt["entry_count"] == 1075 assert receipt["stage_counts"] == { - "derive": 34, + "derive": 50, "seed": 33, "simulate": 992, } @@ -1126,7 +1146,7 @@ def test_every_pool_transfer_target_is_an_installed_engine_input_leaf() -> None: for columns in families.values() for target in columns } - assert len(targets) == 118 + assert len(targets) == 119 acs_transfer_module.assert_acs_transfer_targets_are_input_leaves( targets, require_known=True, @@ -1151,7 +1171,7 @@ def test_every_pool_transfer_family_accepts_its_produced_physical_dtype( ) ) - assert len(targets) == 118 + assert len(targets) == 119 assert len(predictors) == 32 assert len(primary_predictor_sets) == 65 primary_targets = tuple( @@ -1168,13 +1188,13 @@ def test_every_pool_transfer_family_accepts_its_produced_physical_dtype( assert len(primary_predictor_sets[0][1]) == 8 assert len(primary_predictor_sets[-1][1]) == 72 assert len(POOL_DEFERRED_TRANSFER_INPUTS) == 3 - assert len(targets) + len(POOL_DEFERRED_TRANSFER_INPUTS) == 121 + assert len(targets) + len(POOL_DEFERRED_TRANSFER_INPUTS) == 122 assert set(POOL_SOURCE_OPERATOR_ORDER) <= set(calls) assert all(calls[name] > 0 for name in POOL_SOURCE_OPERATOR_ORDER) assert calls["with_us_prior_year_income_inputs"] == 2 assert calls["primary_puf_qrf.fit"] > 0 assert calls["primary_puf_qrf.predict"] > 0 - assert sum(calls[name] for name in POOL_SOURCE_OPERATOR_ORDER) == 22 + assert sum(calls[name] for name in POOL_SOURCE_OPERATOR_ORDER) == 23 def test_object_backed_is_female_becomes_nullable_before_production_transfer_fit( @@ -1945,9 +1965,12 @@ def test_real_preclone_prefix_runs_before_physical_clone( "relationship_inputs", "housing_inputs", "eligibility_inputs", + "esi_premiums", ] - assert [receipt["phase"] for receipt in suboperators] == ["pre_clone"] * 6 - assert [receipt["order_index"] for receipt in suboperators] == list(range(6)) + assert [receipt["phase"] for receipt in suboperators] == ["pre_clone"] * 7 + assert [receipt["order_index"] for receipt in suboperators] == list(range(7)) + # The ESI stage prices the CPS rows at their share of pool household mass. + assert suboperators[6]["kernel_receipt"]["anchor_share"] == pytest.approx(0.5) assert prepared.receipt["transient_outputs_carried_through_clone"] == { "person": ["employment_income_last_year"] } @@ -1989,6 +2012,15 @@ def test_real_preclone_prefix_runs_before_physical_clone( False, ] assert prepared_person.loc[~prepared_cps, "receives_wic"].isna().all() + employer_premium = prepared_person["employer_sponsored_insurance_premiums"] + # Rows 0 and 2 are employed policyholders with an employer; 1 and 3 are not. + assert (employer_premium[prepared_cps].to_numpy() > 0).tolist() == [ + True, + False, + True, + False, + ] + assert employer_premium[~prepared_cps].isna().all() prepared_spm_unit = prepared.frame.table("spm_unit") assert prepared_spm_unit["receives_tanf"].dropna().tolist() == [True, False] diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_multispine_pool_tool.py b/packages/microcosm-build/tests/engine_free/us/test_us_multispine_pool_tool.py index 19e6a40c39..a4ceb86992 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_us_multispine_pool_tool.py +++ b/packages/microcosm-build/tests/engine_free/us/test_us_multispine_pool_tool.py @@ -971,8 +971,10 @@ def deterministic_fixture_h5( # publication: the checkpoint identity carries policyengine_us_version, # and the pool engine contracts it binds were re-derived for 2.2.1. # pool_h5 and agreement above are unchanged, so only the identity - # surface moved, not the pool content. - "manifest": "e4692aa45f05826eb0097a7ae76dcbc712c13886a4d23a9c6a62b53752e323f1", + # surface moved, not the pool content. Adding the ESI premium source + # and derive operators (#454) moved the same checkpoint identities + # again, and nothing else in the manifest. + "manifest": "17e82d2765decabb44b5c71faf66a5f1cb1e20837c2a7149f800479c559a1367", } diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_release_head_to_head_scorer.py b/packages/microcosm-build/tests/engine_free/us/test_us_release_head_to_head_scorer.py index a4fab271ed..4299ade222 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_us_release_head_to_head_scorer.py +++ b/packages/microcosm-build/tests/engine_free/us/test_us_release_head_to_head_scorer.py @@ -701,13 +701,13 @@ def test_canonical_battery_contract_matches_production_registries() -> None: single = len(module.CANONICAL_ORIGIN_BATTERY_METRIC_REGISTRY) joint = len(module.CANONICAL_ORIGIN_BATTERY_JOINT_METRIC_REGISTRY) - assert single == 134 + assert single == 135 assert joint == 1 assert len(contract) == single + joint - assert sum(len(row["metric_legs"]) for row in contract.values()) == 372 + assert sum(len(row["metric_legs"]) for row in contract.values()) == 376 assert ( sum(row["metric"] == "monetary_sign_separated" for row in contract.values()) - == 79 + == 80 ) assert sum(row["metric"] == "boolean_incidence" for row in contract.values()) == 51 assert sum(row["metric"] == "categorical_tvd" for row in contract.values()) == 5 @@ -758,10 +758,10 @@ def test_observed_origin_battery_is_evidence_not_assertion(monkeypatch) -> None: assert asec_only["observed_origins"]["entities"]["person"]["asec_rows"] == 2 assert both_origins["status"] == "computed_finished_h5" assert both_origins["production_receipt_authenticated"] is False - assert both_origins["metric_leg_count"] == 372 - assert both_origins["scalar_leg_status_counts"] == {"computed": 372} + assert both_origins["metric_leg_count"] == 376 + assert both_origins["scalar_leg_status_counts"] == {"computed": 376} for payload in (no_columns, asec_only): - assert payload["comparison_count"] == 135 + assert payload["comparison_count"] == 136 assert all( row["status"] == "inapplicable" for row in payload["comparisons"].values() ) diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_spec_bundle.py b/packages/microcosm-build/tests/engine_free/us/test_us_spec_bundle.py index 789b149a05..502d4ffa5b 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_us_spec_bundle.py +++ b/packages/microcosm-build/tests/engine_free/us/test_us_spec_bundle.py @@ -65,12 +65,12 @@ def test_constant_derived_domain_counts_are_complete( for family in families: target_counts[family["stage"]] += len(family["targets"]) assert family_counts == { - "gap_fill_stacked_spine": 13, + "gap_fill_stacked_spine": 14, "primary_puf_qrf": 1, "late_producer_dag": 19, } assert target_counts == { - "gap_fill_stacked_spine": 48, + "gap_fill_stacked_spine": 49, "primary_puf_qrf": 65, "late_producer_dag": 70, } @@ -199,7 +199,7 @@ def test_constant_derived_domain_counts_are_complete( for step in local_steps ) assert all(step["kernel"].startswith("kernel:") for step in take_up_steps) - assert len(battery["metric_registry"]) == 134 + assert len(battery["metric_registry"]) == 135 assert len(battery["joint_metric_registry"]) == 1 assert "metric_counts" not in battery assert "declared_surface" not in battery @@ -208,7 +208,7 @@ def test_constant_derived_domain_counts_are_complete( assert battery_views["metric_counts"] == { "boolean_incidence": 51, "categorical_tvd": 4, - "monetary_sign_separated": 79, + "monetary_sign_separated": 80, } assert set(calibration["targets"]) == { "cd_policy", @@ -232,8 +232,8 @@ def test_constant_derived_domain_counts_are_complete( for knob in ("k", "pi_hi", "seed"): assert selection["exact_k"][knob]["required"] is True assert selection["exact_k"][knob]["default"] is None - assert len(catalogs["columns"]) == 176 - assert len(resolved_us_spec.columns) == 176 + assert len(catalogs["columns"]) == 177 + assert len(resolved_us_spec.columns) == 177 assert Counter(artifact.kind for artifact in resolved_us_spec.artifacts) == { "producer_node": 38, "virtual_output": 18, diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_spine_blindness.py b/packages/microcosm-build/tests/engine_free/us/test_us_spine_blindness.py index 5cd4c95992..8c0ed82789 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_us_spine_blindness.py +++ b/packages/microcosm-build/tests/engine_free/us/test_us_spine_blindness.py @@ -169,6 +169,11 @@ "education_inputs.py", "educator_expenses.py", "energy_subsidy.py", + # MEPS-IC employer-premium input (#454): a pool pre-clone operator and + # the whole-pool anchor. It tells the rows it derived from the rows a + # transfer filled by whether the raw ASEC fields are present, never by a + # spine or support-channel column. + "esi_premiums.py", "farm_business_income.py", "form_4952.py", "housing_inputs.py", @@ -230,6 +235,12 @@ # Exact source-universe validator/receipt owner; no population treatment. "acs_income_universe.py", "acs_inputs.py", + # Legacy local-lane employer premium (#454): donor qualification, a + # one-family transfer plan and narrow views for the pool anchor and + # the two ESI gates. It selects donors by support role and tells the + # rows apart by whether the raw ASEC fields are present, never by a + # spine or support-channel column, so it owns no provenance boundary. + "acs_local_esi_premiums.py", # Legacy source-hours completion and release gate; outside the registry. "acs_local_hours.py", "acs_multispine.py", @@ -266,11 +277,6 @@ "education_assistance_source.py", "eligibility_inputs.py", "engine_lifecycle.py", - # MEPS-IC employer-premium input (#454): a base-builder pre-clone - # stage keyed on restored ASEC coverage fields, - # not yet a multispine pool operator. Reads no spine or support-channel - # column and remains subject to the all-runtime source-identity scan. - "esi_premiums.py", "exact_k_ladder.py", # Calibration/selection seam; no source treatment. "fiscal_targets.py", "geography_ladder.py", @@ -3492,10 +3498,10 @@ def test_pool_build_tool_import_graph_is_source_spine_blind() -> None: # projection names the SPM role as a required source input (#893), # plus asec_sources.py, whose default ASEC pool the education sidecar # loader now defaults to, plus esi_premiums.py, whose output family - # operator_boundary registers so a raw source frame that already - # carries it is refused (#454). All five are classified in - # _OTHER_US_RUNTIME_MODULES and scanned below like every other - # reached module. + # operator_boundary registers and which the pool runs as an operator + # (#454). The first four are classified in _OTHER_US_RUNTIME_MODULES + # and esi_premiums.py as a spine-blind operator; all are scanned + # below like every other reached module. assert len(runtime_graph) == 75, ( f"{tool.name} must reach the pinned 75-module runtime graph; " f"reached {len(runtime_graph)}" diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_stacked_spine.py b/packages/microcosm-build/tests/engine_free/us/test_us_stacked_spine.py index 773b3b06e4..c92c900fb9 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_us_stacked_spine.py +++ b/packages/microcosm-build/tests/engine_free/us/test_us_stacked_spine.py @@ -1205,7 +1205,7 @@ def test_canonical_authority_objects_are_deeply_immutable() -> None: calibration["scope"]["reference"] = "forged" -def test_canonical_metric_registry_covers_the_declared_134_target_split() -> None: +def test_canonical_metric_registry_covers_the_declared_135_target_split() -> None: surface = stacked_spine_module.CANONICAL_STACKED_DECLARED_SURFACE registry = stacked_spine_module.CANONICAL_ORIGIN_BATTERY_METRIC_REGISTRY surface_targets = { @@ -1215,9 +1215,9 @@ def test_canonical_metric_registry_covers_the_declared_134_target_split() -> Non for target in targets } - assert len(surface_targets) == 134 + assert len(surface_targets) == 135 assert Counter(entity for entity, _family, _target, _clone in surface_targets) == { - "person": 114, + "person": 115, "tax_unit": 12, "spm_unit": 8, } @@ -1229,11 +1229,11 @@ def test_canonical_metric_registry_covers_the_declared_134_target_split() -> Non for family in families } ) - == 31 + == 32 ) assert set(registry) == surface_targets assert Counter(registry.values()) == { - "monetary_sign_separated": 79, + "monetary_sign_separated": 80, "boolean_incidence": 51, "categorical_tvd": 4, } @@ -1273,14 +1273,14 @@ def test_canonical_metric_registry_covers_the_declared_134_target_split() -> Non for family, targets in families.items() for target in targets } - assert len(gap_targets) == 48 + assert len(gap_targets) == 49 assert len(post_puf_targets) == 70 assert len(puf_producer_targets) == 43 assert len(source_producer_targets) == 29 assert len(puf_producer_targets & source_producer_targets) == 2 assert puf_producer_targets | source_producer_targets == post_puf_targets assert gap_targets.isdisjoint(post_puf_targets) - assert len(gap_targets | post_puf_targets) == 118 + assert len(gap_targets | post_puf_targets) == 119 assert gap_targets | post_puf_targets < surface_targets assert not { "bank_account_assets", @@ -1304,7 +1304,7 @@ def test_canonical_metric_registry_drives_checkpoint_round_trip( registry = stacked_spine_module.CANONICAL_ORIGIN_BATTERY_METRIC_REGISTRY nullable_booleans = _transferred_registry_boolean_targets() assert Counter(registry.values()) == { - "monetary_sign_separated": 79, + "monetary_sign_separated": 80, "boolean_incidence": 51, "categorical_tvd": 4, } @@ -1472,7 +1472,7 @@ def test_registry_drives_every_late_callback_dtype_family_check() -> None: (entity, column): metric for (entity, _family, column, _clone_index), metric in registry.items() } - assert len(by_column) == len(registry) == 134 + assert len(by_column) == len(registry) == 135 representative = { "monetary_sign_separated": pd.Series([1.0, pd.NA], dtype="Float64"), @@ -2116,9 +2116,9 @@ def test_every_declared_direction_producer_precedes_its_activation_check() -> No receipt = stacked_gap_fill_producer_schedule_receipt() assert receipt["status"] == "all_producers_precede_activation" assert receipt["direction_count"] == 2 - assert receipt["target_count"] == 48 + assert receipt["target_count"] == 49 assert [direction["target_count"] for direction in receipt["directions"]] == [ - 47, + 48, 1, ] @@ -7773,7 +7773,7 @@ def test_completeness_receipts_bind_live_authority_per_target() -> None: ) canonical = stacked_completeness_gate(frame) assert canonical.passed, canonical.failures - assert canonical.details["declared_targets"] == 134 + assert canonical.details["declared_targets"] == 135 authority = canonical.details["authority"] assert authority["authority_form"] == "CANONICAL" assert authority["canonical"] is True @@ -8001,6 +8001,40 @@ def test_stacked_authority_binds_import_validated_late_producer_schedule() -> No assert component["digest_matches_declared"] is True +def test_legacy_v11_authority_reconstruction_is_frozen_against_later_families() -> None: + # Attested schema-9 pools are scored against this reconstruction. It is + # rebuilt from the live surfaces, so a target family added after v11 must + # be left out of it or those sealed pools stop authenticating. The + # digests were recorded before the pool gained the ESI premium family. + receipt = stacked_spine_module._legacy_stacked_authority_receipt() + + assert receipt["version"] == 11 + assert receipt["sha256"] == ( + "e660a8ce42b69a39d29c5f0ec37264bc69d61b03f27adc386336ec8889531bb2" + ) + assert { + name: component["sha256"] + for name, component in receipt["components"].items() + if name in {"declared_surface", "gap_fill_plan", "metric_registry"} + } == { + "declared_surface": ( + "5b5a4470e2612365f253e933833bb08b8f9c857ea0bc175b958ead9a74abee01" + ), + "gap_fill_plan": ( + "f41319a95750a441676bc6599b1de6bb49a87b45d83b9263d627c402cfe8e750" + ), + "metric_registry": ( + "d75cb9b29f8b0a9a085471a11f4c19c32ba04cbe5419053df94ea81cbe6125a9" + ), + } + assert stacked_spine_module.legacy_us_late_producer_schedule_receipt()[ + "payload_sha256" + ] == ("02e618cc656eb39990ed99dca2b30a52794e01e2b06a3c2df87ca4a7d85ab086") + assert stacked_spine_module._POST_V11_AUTHORITY_TARGET_FAMILIES == { + ("person", "source_operator_esi_premiums") + } + + def test_stacked_authority_binds_post_transfer_calibration_policy() -> None: receipt = stacked_spine_module.stacked_spine_authority_receipt() component = receipt["components"]["post_transfer_calibration"] @@ -8261,7 +8295,7 @@ def test_fresh_gate_result_cannot_graft_canonical_authority_onto_test_surface() with pytest.raises( ValueError, - match="must declare exactly 134 targets.*manifest emission is forbidden", + match="must declare exactly 135 targets.*manifest emission is forbidden", ): GateReport((grafted,)).to_manifest() @@ -8396,7 +8430,7 @@ def test_fresh_battery_result_cannot_forge_canonical_coverage_receipts() -> None with pytest.raises( ValueError, - match="coverage receipt must bind all 134 targets.*emission is forbidden", + match="coverage receipt must bind all 135 targets.*emission is forbidden", ): GateReport((forged,)).to_manifest() @@ -8810,7 +8844,7 @@ def test_battery_taxable_interest_metric_cannot_be_relabelled_rare_incidence() - assert not result.passed assert result.details["tested_comparisons"] == 0 metric_receipt = result.details["authority"]["components"]["metric_registry"] - assert metric_receipt["target_count"] == 134 + assert metric_receipt["target_count"] == 135 assert any( "person/puf_tax_itemization/taxable_interest_income[clone_0]" in failure and "authoritative metric 'monetary_sign_separated'" in failure diff --git a/packages/microcosm-build/tests/engine_workflow/us/test_us_multispine_pool_tool.py b/packages/microcosm-build/tests/engine_workflow/us/test_us_multispine_pool_tool.py index 416be017a9..74a640f0dd 100644 --- a/packages/microcosm-build/tests/engine_workflow/us/test_us_multispine_pool_tool.py +++ b/packages/microcosm-build/tests/engine_workflow/us/test_us_multispine_pool_tool.py @@ -338,7 +338,7 @@ def capture_equality(expected: object, actual: object) -> None: "country": "us", "schema_id": "country_spec", "schema_version": 1, - "spec_sha256": "a1e98deaa1f5a451c7d0e1f380a7bf50a82b0cbc94753b885b7cf9a11e7d0005", + "spec_sha256": "e4b8c7ec593721baede44aa2c43271d49d26a509f5a43d94ad10c9f02fb0f874", }, } @@ -763,7 +763,7 @@ def identity( producer_schedule = identities["base"]["pool_code"]["gap_fill_producer_schedule"] assert producer_schedule["status"] == "all_producers_precede_activation" assert producer_schedule["direction_count"] == 2 - assert producer_schedule["target_count"] == 48 + assert producer_schedule["target_count"] == 49 digests = { name: pool_tool._pool_checkpoint_identity_sha256(value) for name, value in identities.items() diff --git a/packages/microcosm-graph/tests/fixtures/parity/us_post_transfer/expected.csv b/packages/microcosm-graph/tests/fixtures/parity/us_post_transfer/expected.csv index dc2d008e18..18cc136573 100644 --- a/packages/microcosm-graph/tests/fixtures/parity/us_post_transfer/expected.csv +++ b/packages/microcosm-graph/tests/fixtures/parity/us_post_transfer/expected.csv @@ -1,6 +1,6 @@ -person.schedule_d_capital_gain_distributions,tax_unit.takes_up_eitc,person.ssi -7.0,False,0.0 -0.0,False,0.0 -7.0,False,0.0 -0.0,False,0.0 -0.0,False,0.0 +person.schedule_d_capital_gain_distributions,person.employer_sponsored_insurance_premiums,tax_unit.takes_up_eitc,person.ssi +7.0,8000.0,False,0.0 +0.0,8000.0,False,0.0 +7.0,8000.0,False,0.0 +0.0,8000.0,False,0.0 +0.0,8000.0,False,0.0 diff --git a/packages/microcosm-graph/tests/fixtures/parity/us_post_transfer/sources/frame.json b/packages/microcosm-graph/tests/fixtures/parity/us_post_transfer/sources/frame.json index 95d24ac255..5e87c9feee 100644 --- a/packages/microcosm-graph/tests/fixtures/parity/us_post_transfer/sources/frame.json +++ b/packages/microcosm-graph/tests/fixtures/parity/us_post_transfer/sources/frame.json @@ -59,6 +59,16 @@ "sstb_w2_wages_from_qualified_business", "unadjusted_basis_qualified_property", "w2_wages_from_qualified_business", + "NOW_OWNGRP", + "NOW_HIPAID", + "NOW_GRPFTYP", + "NOW_GRPFTYP2", + "PEMLR", + "NOEMP", + "PEIO1COW", + "PERIDNUM", + "employment_income_before_lsr", + "employer_sponsored_insurance_premiums", "takes_up_medicaid_if_eligible", "takes_up_chip_if_eligible", "takes_up_basic_health_program_if_eligible", diff --git a/packages/microcosm-graph/tests/fixtures/parity/us_post_transfer/sources/person.csv b/packages/microcosm-graph/tests/fixtures/parity/us_post_transfer/sources/person.csv index 10d9b6548c..6790adc1ee 100644 --- a/packages/microcosm-graph/tests/fixtures/parity/us_post_transfer/sources/person.csv +++ b/packages/microcosm-graph/tests/fixtures/parity/us_post_transfer/sources/person.csv @@ -1,6 +1,6 @@ -person_id,person_household_id,person_tax_unit_id,person_spm_unit_id,person_family_id,person_marital_unit_id,A_AGE,A_SEX,source_year,measured,person_spine_source_id,person_source_id,person_support_channel,person_support_clone_index,age,SEMP,long_term_capital_gains_before_response,non_sch_d_capital_gains,schedule_d_capital_gain_distributions,self_employment_income_before_lsr,non_qualified_dividend_income,estate_income_would_be_qualified,farm_operations_income_would_be_qualified,farm_rent_income_would_be_qualified,partnership_s_corp_income_would_be_qualified,rental_income_would_be_qualified,self_employment_income_would_be_qualified,sstb_self_employment_income_would_be_qualified,business_is_sstb,qualified_bdc_income,qualified_reit_and_ptp_income,sstb_self_employment_income_before_lsr,sstb_unadjusted_basis_qualified_property,sstb_w2_wages_from_qualified_business,unadjusted_basis_qualified_property,w2_wages_from_qualified_business,takes_up_medicaid_if_eligible,takes_up_chip_if_eligible,takes_up_basic_health_program_if_eligible,takes_up_medicare_if_eligible,takes_up_ssi_if_eligible,takes_up_head_start_if_eligible,takes_up_early_head_start_if_eligible,takes_up_wic_if_eligible,short_term_capital_gains,long_term_capital_gains_on_collectibles,__stratum__ -83,83,83,83,83,83,4.0_0000000000000000e+01,1,2024,8.3_0000000000000000e+01,83,83,asec,0,4.0_0000000000000000e+01,1.0_0000000000000000e+01,1.0_0000000000000000e+02,5.0_0000000000000000e+00,7.0_0000000000000000e+00,1.0_0000000000000000e+01,1.0_0000000000000000e+00,False,False,False,False,False,False,False,True,2.0_0000000000000000e+00,3.0_0000000000000000e+00,5.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,2.0_0000000000000000e+02,1.0_0000000000000000e+02,True,True,True,True,True,True,True,True,,,fixture -84,84,84,84,84,84,4.0_0000000000000000e+01,1,2024,1.0_8300000000000000e+03,83,84,acs,0,4.0_0000000000000000e+01,2.0_0000000000000000e+01,2.0_0000000000000000e+02,1.0_0000000000000000e+01,,2.0_0000000000000000e+01,2.0_0000000000000000e+00,False,False,False,False,False,False,False,False,0.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,False,False,False,False,False,False,False,False,,,fixture -183,183,183,183,183,183,4.0_0000000000000000e+01,1,2024,8.3_0000000000000000e+01,83,83,asec,1,4.0_0000000000000000e+01,1.0_0000000000000000e+01,1.0_0000000000000000e+02,5.0_0000000000000000e+00,7.0_0000000000000000e+00,1.0_0000000000000000e+01,1.0_0000000000000000e+00,False,False,False,False,False,False,False,True,2.0_0000000000000000e+00,3.0_0000000000000000e+00,5.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,2.0_0000000000000000e+02,1.0_0000000000000000e+02,True,True,True,True,True,True,True,True,,,fixture -184,184,184,184,184,184,4.0_0000000000000000e+01,1,2024,1.0_8300000000000000e+03,83,84,acs,1,4.0_0000000000000000e+01,2.0_0000000000000000e+01,2.0_0000000000000000e+02,1.0_0000000000000000e+01,,2.0_0000000000000000e+01,2.0_0000000000000000e+00,False,False,False,False,False,False,False,False,0.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,False,False,False,False,False,False,False,False,,,fixture -283,283,283,283,283,283,4.0_0000000000000000e+01,1,2024,8.3_0000000000000000e+01,83,83,asec,2,4.0_0000000000000000e+01,1.0_0000000000000000e+01,5.0_0000000000000000e+02,3.0_0000000000000000e+00,7.0_0000000000000000e+00,1.0_0000000000000000e+01,1.0_0000000000000000e+00,False,False,False,False,False,False,False,True,2.0_0000000000000000e+00,3.0_0000000000000000e+00,5.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,2.0_0000000000000000e+02,1.0_0000000000000000e+02,True,True,True,True,True,True,True,True,1.0_0000000000000000e+00,2.0_0000000000000000e+00,fixture +person_id,person_household_id,person_tax_unit_id,person_spm_unit_id,person_family_id,person_marital_unit_id,A_AGE,A_SEX,source_year,measured,person_spine_source_id,person_source_id,person_support_channel,person_support_clone_index,age,SEMP,long_term_capital_gains_before_response,non_sch_d_capital_gains,schedule_d_capital_gain_distributions,self_employment_income_before_lsr,non_qualified_dividend_income,estate_income_would_be_qualified,farm_operations_income_would_be_qualified,farm_rent_income_would_be_qualified,partnership_s_corp_income_would_be_qualified,rental_income_would_be_qualified,self_employment_income_would_be_qualified,sstb_self_employment_income_would_be_qualified,business_is_sstb,qualified_bdc_income,qualified_reit_and_ptp_income,sstb_self_employment_income_before_lsr,sstb_unadjusted_basis_qualified_property,sstb_w2_wages_from_qualified_business,unadjusted_basis_qualified_property,w2_wages_from_qualified_business,NOW_OWNGRP,NOW_HIPAID,NOW_GRPFTYP,NOW_GRPFTYP2,PEMLR,NOEMP,PEIO1COW,PERIDNUM,employment_income_before_lsr,employer_sponsored_insurance_premiums,takes_up_medicaid_if_eligible,takes_up_chip_if_eligible,takes_up_basic_health_program_if_eligible,takes_up_medicare_if_eligible,takes_up_ssi_if_eligible,takes_up_head_start_if_eligible,takes_up_early_head_start_if_eligible,takes_up_wic_if_eligible,short_term_capital_gains,long_term_capital_gains_on_collectibles,__stratum__ +83,83,83,83,83,83,4.0_0000000000000000e+01,1,2024,8.3_0000000000000000e+01,83,83,asec,0,4.0_0000000000000000e+01,1.0_0000000000000000e+01,1.0_0000000000000000e+02,5.0_0000000000000000e+00,7.0_0000000000000000e+00,1.0_0000000000000000e+01,1.0_0000000000000000e+00,False,False,False,False,False,False,False,True,2.0_0000000000000000e+00,3.0_0000000000000000e+00,5.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,2.0_0000000000000000e+02,1.0_0000000000000000e+02,1.0_0000000000000000e+00,1.0_0000000000000000e+00,1.0_0000000000000000e+00,1.0_0000000000000000e+00,1.0_0000000000000000e+00,1.0_0000000000000000e+00,1.0_0000000000000000e+00,1.0_0000000000000000e+00,5.0_0000000000000000e+04,8.0_0000000000000000e+03,True,True,True,True,True,True,True,True,,,fixture +84,84,84,84,84,84,4.0_0000000000000000e+01,1,2024,1.0_8300000000000000e+03,83,84,acs,0,4.0_0000000000000000e+01,2.0_0000000000000000e+01,2.0_0000000000000000e+02,1.0_0000000000000000e+01,,2.0_0000000000000000e+01,2.0_0000000000000000e+00,False,False,False,False,False,False,False,False,0.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,,,,,,,,,4.0_0000000000000000e+04,6.0_0000000000000000e+03,False,False,False,False,False,False,False,False,,,fixture +183,183,183,183,183,183,4.0_0000000000000000e+01,1,2024,8.3_0000000000000000e+01,83,83,asec,1,4.0_0000000000000000e+01,1.0_0000000000000000e+01,1.0_0000000000000000e+02,5.0_0000000000000000e+00,7.0_0000000000000000e+00,1.0_0000000000000000e+01,1.0_0000000000000000e+00,False,False,False,False,False,False,False,True,2.0_0000000000000000e+00,3.0_0000000000000000e+00,5.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,2.0_0000000000000000e+02,1.0_0000000000000000e+02,1.0_0000000000000000e+00,1.0_0000000000000000e+00,1.0_0000000000000000e+00,1.0_0000000000000000e+00,1.0_0000000000000000e+00,1.0_0000000000000000e+00,1.0_0000000000000000e+00,1.0_0000000000000000e+00,5.0_0000000000000000e+04,8.0_0000000000000000e+03,True,True,True,True,True,True,True,True,,,fixture +184,184,184,184,184,184,4.0_0000000000000000e+01,1,2024,1.0_8300000000000000e+03,83,84,acs,1,4.0_0000000000000000e+01,2.0_0000000000000000e+01,2.0_0000000000000000e+02,1.0_0000000000000000e+01,,2.0_0000000000000000e+01,2.0_0000000000000000e+00,False,False,False,False,False,False,False,False,0.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,,,,,,,,,4.0_0000000000000000e+04,6.0_0000000000000000e+03,False,False,False,False,False,False,False,False,,,fixture +283,283,283,283,283,283,4.0_0000000000000000e+01,1,2024,8.3_0000000000000000e+01,83,83,asec,2,4.0_0000000000000000e+01,1.0_0000000000000000e+01,5.0_0000000000000000e+02,3.0_0000000000000000e+00,7.0_0000000000000000e+00,1.0_0000000000000000e+01,1.0_0000000000000000e+00,False,False,False,False,False,False,False,True,2.0_0000000000000000e+00,3.0_0000000000000000e+00,5.0_0000000000000000e+00,0.0_0000000000000000e+00,0.0_0000000000000000e+00,2.0_0000000000000000e+02,1.0_0000000000000000e+02,1.0_0000000000000000e+00,1.0_0000000000000000e+00,1.0_0000000000000000e+00,1.0_0000000000000000e+00,1.0_0000000000000000e+00,1.0_0000000000000000e+00,1.0_0000000000000000e+00,1.0_0000000000000000e+00,5.0_0000000000000000e+04,8.0_0000000000000000e+03,True,True,True,True,True,True,True,True,1.0_0000000000000000e+00,2.0_0000000000000000e+00,fixture diff --git a/packages/microcosm-graph/tests/fixtures/parity/us_post_transfer/sources/schema.json b/packages/microcosm-graph/tests/fixtures/parity/us_post_transfer/sources/schema.json index 810fb2b284..c9c768290e 100644 --- a/packages/microcosm-graph/tests/fixtures/parity/us_post_transfer/sources/schema.json +++ b/packages/microcosm-graph/tests/fixtures/parity/us_post_transfer/sources/schema.json @@ -25,10 +25,20 @@ "person": { "A_AGE": "float64", "A_SEX": "int64", + "NOEMP": "float64", + "NOW_GRPFTYP": "float64", + "NOW_GRPFTYP2": "float64", + "NOW_HIPAID": "float64", + "NOW_OWNGRP": "float64", + "PEIO1COW": "float64", + "PEMLR": "float64", + "PERIDNUM": "float64", "SEMP": "float64", "__stratum__": "string[python]", "age": "float64", "business_is_sstb": "bool", + "employer_sponsored_insurance_premiums": "float64", + "employment_income_before_lsr": "float64", "estate_income_would_be_qualified": "bool", "farm_operations_income_would_be_qualified": "bool", "farm_rent_income_would_be_qualified": "bool", diff --git a/packages/microcosm-graph/tests/fixtures/parity/us_post_transfer/us_post_transfer.json b/packages/microcosm-graph/tests/fixtures/parity/us_post_transfer/us_post_transfer.json index 3c5251e7c3..aa00e12d6a 100644 --- a/packages/microcosm-graph/tests/fixtures/parity/us_post_transfer/us_post_transfer.json +++ b/packages/microcosm-graph/tests/fixtures/parity/us_post_transfer/us_post_transfer.json @@ -1 +1 @@ -{"country":"us","nodes":[{"base":null,"citation":"","description":"Load the synthetic stacked pool after ACS transfer.","id":"create_stacked_pool","inputs":[],"kernel":"us.post_transfer.create@1","mass":"conserve","outputs":[{"column":"A_AGE","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"A_SEX","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"source_year","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"measured","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"person_spine_source_id","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"person_source_id","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"person_support_channel","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"person_support_clone_index","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"age","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"SEMP","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"long_term_capital_gains_before_response","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"non_sch_d_capital_gains","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"schedule_d_capital_gain_distributions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income_before_lsr","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"non_qualified_dividend_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"estate_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"farm_operations_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"farm_rent_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"partnership_s_corp_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"rental_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"sstb_self_employment_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"business_is_sstb","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"qualified_bdc_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"qualified_reit_and_ptp_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"sstb_self_employment_income_before_lsr","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"sstb_unadjusted_basis_qualified_property","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"sstb_w2_wages_from_qualified_business","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"unadjusted_basis_qualified_property","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"w2_wages_from_qualified_business","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"takes_up_medicaid_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"takes_up_chip_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"takes_up_basic_health_program_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"takes_up_medicare_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"takes_up_ssi_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"takes_up_head_start_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"takes_up_early_head_start_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"takes_up_wic_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"short_term_capital_gains","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"long_term_capital_gains_on_collectibles","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"TYPEHUGQ","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_spine_source_id","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_source_id","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_support_channel","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"household_support_clone_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"tax_unit_spine_source_id","dtype":"int64","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"tax_unit_source_id","dtype":"int64","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"tax_unit_support_channel","dtype":"string","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"tax_unit_support_clone_index","dtype":"int64","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"takes_up_dc_ptc","dtype":"bool","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"takes_up_aca_if_eligible","dtype":"bool","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"takes_up_ca_premium_subsidy_if_eligible","dtype":"bool","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"takes_up_co_premium_assistance_if_eligible","dtype":"bool","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"takes_up_nm_premium_assistance_if_eligible","dtype":"bool","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"puf_capital_gains_tail_transfer_applied","dtype":"bool","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"puf_capital_gains_tail_donor_is_synthetic","dtype":"bool","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"puf_capital_gains_tail_donor_source_id","dtype":"int64","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"puf_capital_gains_tail_donor_filing_status_code","dtype":"int64","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"puf_capital_gains_tail_donor_agi_band_index","dtype":"int64","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"puf_capital_gains_tail_transfer_weight","dtype":"float64","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"unrecaptured_section_1250_gain","dtype":"float64","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"spm_unit_spine_source_id","dtype":"int64","entity":"spm_unit","ownership":"produced","rows":"all"},{"column":"spm_unit_source_id","dtype":"int64","entity":"spm_unit","ownership":"produced","rows":"all"},{"column":"spm_unit_support_channel","dtype":"string","entity":"spm_unit","ownership":"produced","rows":"all"},{"column":"spm_unit_support_clone_index","dtype":"int64","entity":"spm_unit","ownership":"produced","rows":"all"},{"column":"takes_up_snap_if_eligible","dtype":"bool","entity":"spm_unit","ownership":"produced","rows":"all"},{"column":"takes_up_tanf_if_eligible","dtype":"bool","entity":"spm_unit","ownership":"produced","rows":"all"},{"column":"takes_up_housing_assistance_if_eligible","dtype":"bool","entity":"spm_unit","ownership":"produced","rows":"all"},{"column":"family_spine_source_id","dtype":"int64","entity":"family","ownership":"produced","rows":"all"},{"column":"family_source_id","dtype":"int64","entity":"family","ownership":"produced","rows":"all"},{"column":"family_support_channel","dtype":"string","entity":"family","ownership":"produced","rows":"all"},{"column":"family_support_clone_index","dtype":"int64","entity":"family","ownership":"produced","rows":"all"},{"column":"marital_unit_spine_source_id","dtype":"int64","entity":"marital_unit","ownership":"produced","rows":"all"},{"column":"marital_unit_source_id","dtype":"int64","entity":"marital_unit","ownership":"produced","rows":"all"},{"column":"marital_unit_support_channel","dtype":"string","entity":"marital_unit","ownership":"produced","rows":"all"},{"column":"marital_unit_support_clone_index","dtype":"int64","entity":"marital_unit","ownership":"produced","rows":"all"}],"params":{"context_schema_version":1},"population":null,"sources":["stacked"],"structural":"create","weights":null},{"base":"create_stacked_pool","citation":"","description":"Open a population version for prepare_stacked_tail_derivation rewrites.","id":"prepare_stacked_tail_derivation.boundary","inputs":[{"columns":["A_AGE","A_SEX","source_year","measured","person_spine_source_id","person_source_id","person_support_channel","person_support_clone_index","age","SEMP","long_term_capital_gains_before_response","non_sch_d_capital_gains","schedule_d_capital_gain_distributions","self_employment_income_before_lsr","non_qualified_dividend_income","estate_income_would_be_qualified","farm_operations_income_would_be_qualified","farm_rent_income_would_be_qualified","partnership_s_corp_income_would_be_qualified","rental_income_would_be_qualified","self_employment_income_would_be_qualified","sstb_self_employment_income_would_be_qualified","business_is_sstb","qualified_bdc_income","qualified_reit_and_ptp_income","sstb_self_employment_income_before_lsr","sstb_unadjusted_basis_qualified_property","sstb_w2_wages_from_qualified_business","unadjusted_basis_qualified_property","w2_wages_from_qualified_business","takes_up_medicaid_if_eligible","takes_up_chip_if_eligible","takes_up_basic_health_program_if_eligible","takes_up_medicare_if_eligible","takes_up_ssi_if_eligible","takes_up_head_start_if_eligible","takes_up_early_head_start_if_eligible","takes_up_wic_if_eligible","short_term_capital_gains","long_term_capital_gains_on_collectibles"],"entity":"person","rows":"all"},{"columns":["TYPEHUGQ","household_spine_source_id","household_source_id","household_support_channel","household_support_clone_index"],"entity":"household","rows":"all"},{"columns":["tax_unit_spine_source_id","tax_unit_source_id","tax_unit_support_channel","tax_unit_support_clone_index","takes_up_dc_ptc","takes_up_aca_if_eligible","takes_up_ca_premium_subsidy_if_eligible","takes_up_co_premium_assistance_if_eligible","takes_up_nm_premium_assistance_if_eligible","puf_capital_gains_tail_transfer_applied","puf_capital_gains_tail_donor_is_synthetic","puf_capital_gains_tail_donor_source_id","puf_capital_gains_tail_donor_filing_status_code","puf_capital_gains_tail_donor_agi_band_index","puf_capital_gains_tail_transfer_weight","unrecaptured_section_1250_gain"],"entity":"tax_unit","rows":"all"},{"columns":["spm_unit_spine_source_id","spm_unit_source_id","spm_unit_support_channel","spm_unit_support_clone_index","takes_up_snap_if_eligible","takes_up_tanf_if_eligible","takes_up_housing_assistance_if_eligible"],"entity":"spm_unit","rows":"all"},{"columns":["family_spine_source_id","family_source_id","family_support_channel","family_support_clone_index"],"entity":"family","rows":"all"},{"columns":["marital_unit_spine_source_id","marital_unit_source_id","marital_unit_support_channel","marital_unit_support_clone_index"],"entity":"marital_unit","rows":"all"}],"kernel":"us.post_transfer.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"base":null,"citation":"","description":"Clear clone-2 Schedule-D incumbents before derivation.","id":"prepare_stacked_tail_derivation","inputs":[{"columns":["A_AGE","A_SEX","source_year","measured","person_spine_source_id","person_source_id","person_support_channel","person_support_clone_index","age","SEMP","long_term_capital_gains_before_response","non_sch_d_capital_gains","self_employment_income_before_lsr","non_qualified_dividend_income","estate_income_would_be_qualified","farm_operations_income_would_be_qualified","farm_rent_income_would_be_qualified","partnership_s_corp_income_would_be_qualified","rental_income_would_be_qualified","self_employment_income_would_be_qualified","sstb_self_employment_income_would_be_qualified","business_is_sstb","qualified_bdc_income","qualified_reit_and_ptp_income","sstb_self_employment_income_before_lsr","sstb_unadjusted_basis_qualified_property","sstb_w2_wages_from_qualified_business","unadjusted_basis_qualified_property","w2_wages_from_qualified_business","takes_up_medicaid_if_eligible","takes_up_chip_if_eligible","takes_up_basic_health_program_if_eligible","takes_up_medicare_if_eligible","takes_up_ssi_if_eligible","takes_up_head_start_if_eligible","takes_up_early_head_start_if_eligible","takes_up_wic_if_eligible","short_term_capital_gains","long_term_capital_gains_on_collectibles"],"entity":"person","rows":"all"},{"columns":["TYPEHUGQ","household_spine_source_id","household_source_id","household_support_channel","household_support_clone_index"],"entity":"household","rows":"all"},{"columns":["tax_unit_spine_source_id","tax_unit_source_id","tax_unit_support_channel","tax_unit_support_clone_index","takes_up_dc_ptc","takes_up_aca_if_eligible","takes_up_ca_premium_subsidy_if_eligible","takes_up_co_premium_assistance_if_eligible","takes_up_nm_premium_assistance_if_eligible","puf_capital_gains_tail_transfer_applied","puf_capital_gains_tail_donor_is_synthetic","puf_capital_gains_tail_donor_source_id","puf_capital_gains_tail_donor_filing_status_code","puf_capital_gains_tail_donor_agi_band_index","puf_capital_gains_tail_transfer_weight","unrecaptured_section_1250_gain"],"entity":"tax_unit","rows":"all"},{"columns":["spm_unit_spine_source_id","spm_unit_source_id","spm_unit_support_channel","spm_unit_support_clone_index","takes_up_snap_if_eligible","takes_up_tanf_if_eligible","takes_up_housing_assistance_if_eligible"],"entity":"spm_unit","rows":"all"},{"columns":["family_spine_source_id","family_source_id","family_support_channel","family_support_clone_index"],"entity":"family","rows":"all"},{"columns":["marital_unit_spine_source_id","marital_unit_source_id","marital_unit_support_channel","marital_unit_support_clone_index"],"entity":"marital_unit","rows":"all"}],"kernel":"us.post_transfer.prepare@1","mass":"conserve","outputs":[{"column":"schedule_d_capital_gain_distributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"stage":"prepare_stacked_tail_derivation"},"population":"prepare_stacked_tail_derivation.boundary","sources":["stacked"],"structural":"none","weights":null},{"base":"prepare_stacked_tail_derivation.boundary","citation":"","description":"Open a population version for derive_multispine_pool_inputs rewrites.","id":"derive_multispine_pool_inputs.boundary","inputs":[{"columns":["A_AGE","A_SEX","source_year","measured","person_spine_source_id","person_source_id","person_support_channel","person_support_clone_index","age","SEMP","long_term_capital_gains_before_response","non_sch_d_capital_gains","schedule_d_capital_gain_distributions","self_employment_income_before_lsr","non_qualified_dividend_income","estate_income_would_be_qualified","farm_operations_income_would_be_qualified","farm_rent_income_would_be_qualified","partnership_s_corp_income_would_be_qualified","rental_income_would_be_qualified","self_employment_income_would_be_qualified","sstb_self_employment_income_would_be_qualified","business_is_sstb","qualified_bdc_income","qualified_reit_and_ptp_income","sstb_self_employment_income_before_lsr","sstb_unadjusted_basis_qualified_property","sstb_w2_wages_from_qualified_business","unadjusted_basis_qualified_property","w2_wages_from_qualified_business","takes_up_medicaid_if_eligible","takes_up_chip_if_eligible","takes_up_basic_health_program_if_eligible","takes_up_medicare_if_eligible","takes_up_ssi_if_eligible","takes_up_head_start_if_eligible","takes_up_early_head_start_if_eligible","takes_up_wic_if_eligible","short_term_capital_gains","long_term_capital_gains_on_collectibles"],"entity":"person","rows":"all"},{"columns":["TYPEHUGQ","household_spine_source_id","household_source_id","household_support_channel","household_support_clone_index"],"entity":"household","rows":"all"},{"columns":["tax_unit_spine_source_id","tax_unit_source_id","tax_unit_support_channel","tax_unit_support_clone_index","takes_up_dc_ptc","takes_up_aca_if_eligible","takes_up_ca_premium_subsidy_if_eligible","takes_up_co_premium_assistance_if_eligible","takes_up_nm_premium_assistance_if_eligible","puf_capital_gains_tail_transfer_applied","puf_capital_gains_tail_donor_is_synthetic","puf_capital_gains_tail_donor_source_id","puf_capital_gains_tail_donor_filing_status_code","puf_capital_gains_tail_donor_agi_band_index","puf_capital_gains_tail_transfer_weight","unrecaptured_section_1250_gain"],"entity":"tax_unit","rows":"all"},{"columns":["spm_unit_spine_source_id","spm_unit_source_id","spm_unit_support_channel","spm_unit_support_clone_index","takes_up_snap_if_eligible","takes_up_tanf_if_eligible","takes_up_housing_assistance_if_eligible"],"entity":"spm_unit","rows":"all"},{"columns":["family_spine_source_id","family_source_id","family_support_channel","family_support_clone_index"],"entity":"family","rows":"all"},{"columns":["marital_unit_spine_source_id","marital_unit_source_id","marital_unit_support_channel","marital_unit_support_clone_index"],"entity":"marital_unit","rows":"all"}],"kernel":"us.post_transfer.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"base":null,"citation":"","description":"Derive Schedule-D and reconcile the QBI input family.","id":"derive_multispine_pool_inputs","inputs":[{"columns":["A_AGE","A_SEX","source_year","measured","person_spine_source_id","person_source_id","person_support_channel","person_support_clone_index","age","SEMP","long_term_capital_gains_before_response","non_sch_d_capital_gains","non_qualified_dividend_income","takes_up_medicaid_if_eligible","takes_up_chip_if_eligible","takes_up_basic_health_program_if_eligible","takes_up_medicare_if_eligible","takes_up_ssi_if_eligible","takes_up_head_start_if_eligible","takes_up_early_head_start_if_eligible","takes_up_wic_if_eligible","short_term_capital_gains","long_term_capital_gains_on_collectibles"],"entity":"person","rows":"all"},{"columns":["TYPEHUGQ","household_spine_source_id","household_source_id","household_support_channel","household_support_clone_index"],"entity":"household","rows":"all"},{"columns":["tax_unit_spine_source_id","tax_unit_source_id","tax_unit_support_channel","tax_unit_support_clone_index","takes_up_dc_ptc","takes_up_aca_if_eligible","takes_up_ca_premium_subsidy_if_eligible","takes_up_co_premium_assistance_if_eligible","takes_up_nm_premium_assistance_if_eligible","puf_capital_gains_tail_transfer_applied","puf_capital_gains_tail_donor_is_synthetic","puf_capital_gains_tail_donor_source_id","puf_capital_gains_tail_donor_filing_status_code","puf_capital_gains_tail_donor_agi_band_index","puf_capital_gains_tail_transfer_weight","unrecaptured_section_1250_gain"],"entity":"tax_unit","rows":"all"},{"columns":["spm_unit_spine_source_id","spm_unit_source_id","spm_unit_support_channel","spm_unit_support_clone_index","takes_up_snap_if_eligible","takes_up_tanf_if_eligible","takes_up_housing_assistance_if_eligible"],"entity":"spm_unit","rows":"all"},{"columns":["family_spine_source_id","family_source_id","family_support_channel","family_support_clone_index"],"entity":"family","rows":"all"},{"columns":["marital_unit_spine_source_id","marital_unit_source_id","marital_unit_support_channel","marital_unit_support_clone_index"],"entity":"marital_unit","rows":"all"}],"kernel":"us.post_transfer.derive@1","mass":"conserve","outputs":[{"column":"schedule_d_capital_gain_distributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"estate_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"farm_operations_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"farm_rent_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"partnership_s_corp_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rental_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sstb_self_employment_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"business_is_sstb","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"qualified_bdc_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"qualified_reit_and_ptp_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sstb_self_employment_income_before_lsr","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sstb_unadjusted_basis_qualified_property","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sstb_w2_wages_from_qualified_business","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"unadjusted_basis_qualified_property","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"w2_wages_from_qualified_business","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income_before_lsr","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"qbi_contract_version":2,"remaining_stage_manifest_sha256":"0a84565a659a6404cb17715dda36f094a87431c713c7a37bf65a936b16937325","schedule_d_asset_sha256":"e7d31a5956dc420940002b5c5120b4fa7f6af6fa8bf071d488affe35b616611d","stage":"derive_multispine_pool_inputs"},"population":"derive_multispine_pool_inputs.boundary","sources":["stacked"],"structural":"none","weights":null},{"base":"derive_multispine_pool_inputs.boundary","citation":"","description":"Open a population version for seed_multispine_pool_inputs rewrites.","id":"seed_multispine_pool_inputs.boundary","inputs":[{"columns":["A_AGE","A_SEX","source_year","measured","person_spine_source_id","person_source_id","person_support_channel","person_support_clone_index","age","SEMP","long_term_capital_gains_before_response","non_sch_d_capital_gains","schedule_d_capital_gain_distributions","self_employment_income_before_lsr","non_qualified_dividend_income","estate_income_would_be_qualified","farm_operations_income_would_be_qualified","farm_rent_income_would_be_qualified","partnership_s_corp_income_would_be_qualified","rental_income_would_be_qualified","self_employment_income_would_be_qualified","sstb_self_employment_income_would_be_qualified","business_is_sstb","qualified_bdc_income","qualified_reit_and_ptp_income","sstb_self_employment_income_before_lsr","sstb_unadjusted_basis_qualified_property","sstb_w2_wages_from_qualified_business","unadjusted_basis_qualified_property","w2_wages_from_qualified_business","takes_up_medicaid_if_eligible","takes_up_chip_if_eligible","takes_up_basic_health_program_if_eligible","takes_up_medicare_if_eligible","takes_up_ssi_if_eligible","takes_up_head_start_if_eligible","takes_up_early_head_start_if_eligible","takes_up_wic_if_eligible","short_term_capital_gains","long_term_capital_gains_on_collectibles"],"entity":"person","rows":"all"},{"columns":["TYPEHUGQ","household_spine_source_id","household_source_id","household_support_channel","household_support_clone_index"],"entity":"household","rows":"all"},{"columns":["tax_unit_spine_source_id","tax_unit_source_id","tax_unit_support_channel","tax_unit_support_clone_index","takes_up_dc_ptc","takes_up_aca_if_eligible","takes_up_ca_premium_subsidy_if_eligible","takes_up_co_premium_assistance_if_eligible","takes_up_nm_premium_assistance_if_eligible","puf_capital_gains_tail_transfer_applied","puf_capital_gains_tail_donor_is_synthetic","puf_capital_gains_tail_donor_source_id","puf_capital_gains_tail_donor_filing_status_code","puf_capital_gains_tail_donor_agi_band_index","puf_capital_gains_tail_transfer_weight","unrecaptured_section_1250_gain"],"entity":"tax_unit","rows":"all"},{"columns":["spm_unit_spine_source_id","spm_unit_source_id","spm_unit_support_channel","spm_unit_support_clone_index","takes_up_snap_if_eligible","takes_up_tanf_if_eligible","takes_up_housing_assistance_if_eligible"],"entity":"spm_unit","rows":"all"},{"columns":["family_spine_source_id","family_source_id","family_support_channel","family_support_clone_index"],"entity":"family","rows":"all"},{"columns":["marital_unit_spine_source_id","marital_unit_source_id","marital_unit_support_channel","marital_unit_support_clone_index"],"entity":"marital_unit","rows":"all"}],"kernel":"us.post_transfer.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"base":null,"citation":"","description":"Seed take-up inputs and disclose remaining defaults.","id":"seed_multispine_pool_inputs","inputs":[{"columns":["A_AGE","A_SEX","source_year","measured","person_spine_source_id","person_source_id","person_support_channel","person_support_clone_index","age","SEMP","long_term_capital_gains_before_response","non_sch_d_capital_gains","schedule_d_capital_gain_distributions","self_employment_income_before_lsr","non_qualified_dividend_income","estate_income_would_be_qualified","farm_operations_income_would_be_qualified","farm_rent_income_would_be_qualified","partnership_s_corp_income_would_be_qualified","rental_income_would_be_qualified","self_employment_income_would_be_qualified","sstb_self_employment_income_would_be_qualified","business_is_sstb","qualified_bdc_income","qualified_reit_and_ptp_income","sstb_self_employment_income_before_lsr","sstb_unadjusted_basis_qualified_property","sstb_w2_wages_from_qualified_business","unadjusted_basis_qualified_property","w2_wages_from_qualified_business","short_term_capital_gains","long_term_capital_gains_on_collectibles"],"entity":"person","rows":"all"},{"columns":["TYPEHUGQ","household_spine_source_id","household_source_id","household_support_channel","household_support_clone_index"],"entity":"household","rows":"all"},{"columns":["tax_unit_spine_source_id","tax_unit_source_id","tax_unit_support_channel","tax_unit_support_clone_index","puf_capital_gains_tail_transfer_applied","puf_capital_gains_tail_donor_is_synthetic","puf_capital_gains_tail_donor_source_id","puf_capital_gains_tail_donor_filing_status_code","puf_capital_gains_tail_donor_agi_band_index","puf_capital_gains_tail_transfer_weight","unrecaptured_section_1250_gain"],"entity":"tax_unit","rows":"all"},{"columns":["spm_unit_spine_source_id","spm_unit_source_id","spm_unit_support_channel","spm_unit_support_clone_index"],"entity":"spm_unit","rows":"all"},{"columns":["family_spine_source_id","family_source_id","family_support_channel","family_support_clone_index"],"entity":"family","rows":"all"},{"columns":["marital_unit_spine_source_id","marital_unit_source_id","marital_unit_support_channel","marital_unit_support_clone_index"],"entity":"marital_unit","rows":"all"}],"kernel":"us.post_transfer.seed@1","mass":"conserve","outputs":[{"column":"takes_up_snap_if_eligible","dtype":"bool","entity":"spm_unit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_tanf_if_eligible","dtype":"bool","entity":"spm_unit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_eitc","dtype":"bool","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"takes_up_medicaid_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_chip_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_basic_health_program_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_medicare_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_ssi_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_dc_ptc","dtype":"bool","entity":"tax_unit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_head_start_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_early_head_start_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_housing_assistance_if_eligible","dtype":"bool","entity":"spm_unit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_wic_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_aca_if_eligible","dtype":"bool","entity":"tax_unit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_ca_premium_subsidy_if_eligible","dtype":"bool","entity":"tax_unit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_co_premium_assistance_if_eligible","dtype":"bool","entity":"tax_unit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_nm_premium_assistance_if_eligible","dtype":"bool","entity":"tax_unit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"engine_ref":"policyengine-us","seed":0,"stage":"seed_multispine_pool_inputs","take_up_contract_version":1,"take_up_resource_sha256":"9522ce40f7dea569312dd7a7beb474e5a5afadd2f1e10cb5876534c3ef623d35","time_period":2024},"population":"seed_multispine_pool_inputs.boundary","sources":["stacked"],"structural":"none","weights":null},{"base":null,"citation":"","description":"Materialize SSI on the disposable agreement view.","id":"materialize_multispine_agreement_outputs","inputs":[{"columns":["A_AGE","A_SEX","source_year","measured","person_spine_source_id","person_source_id","person_support_channel","person_support_clone_index","age","SEMP","long_term_capital_gains_before_response","non_sch_d_capital_gains","schedule_d_capital_gain_distributions","self_employment_income_before_lsr","non_qualified_dividend_income","estate_income_would_be_qualified","farm_operations_income_would_be_qualified","farm_rent_income_would_be_qualified","partnership_s_corp_income_would_be_qualified","rental_income_would_be_qualified","self_employment_income_would_be_qualified","sstb_self_employment_income_would_be_qualified","business_is_sstb","qualified_bdc_income","qualified_reit_and_ptp_income","sstb_self_employment_income_before_lsr","sstb_unadjusted_basis_qualified_property","sstb_w2_wages_from_qualified_business","unadjusted_basis_qualified_property","w2_wages_from_qualified_business","takes_up_medicaid_if_eligible","takes_up_chip_if_eligible","takes_up_basic_health_program_if_eligible","takes_up_medicare_if_eligible","takes_up_ssi_if_eligible","takes_up_head_start_if_eligible","takes_up_early_head_start_if_eligible","takes_up_wic_if_eligible","short_term_capital_gains","long_term_capital_gains_on_collectibles"],"entity":"person","rows":"all"},{"columns":["TYPEHUGQ","household_spine_source_id","household_source_id","household_support_channel","household_support_clone_index"],"entity":"household","rows":"all"},{"columns":["tax_unit_spine_source_id","tax_unit_source_id","tax_unit_support_channel","tax_unit_support_clone_index","takes_up_dc_ptc","takes_up_aca_if_eligible","takes_up_ca_premium_subsidy_if_eligible","takes_up_co_premium_assistance_if_eligible","takes_up_nm_premium_assistance_if_eligible","puf_capital_gains_tail_transfer_applied","puf_capital_gains_tail_donor_is_synthetic","puf_capital_gains_tail_donor_source_id","puf_capital_gains_tail_donor_filing_status_code","puf_capital_gains_tail_donor_agi_band_index","puf_capital_gains_tail_transfer_weight","unrecaptured_section_1250_gain","takes_up_eitc"],"entity":"tax_unit","rows":"all"},{"columns":["spm_unit_spine_source_id","spm_unit_source_id","spm_unit_support_channel","spm_unit_support_clone_index","takes_up_snap_if_eligible","takes_up_tanf_if_eligible","takes_up_housing_assistance_if_eligible"],"entity":"spm_unit","rows":"all"},{"columns":["family_spine_source_id","family_source_id","family_support_channel","family_support_clone_index"],"entity":"family","rows":"all"},{"columns":["marital_unit_spine_source_id","marital_unit_source_id","marital_unit_support_channel","marital_unit_support_clone_index"],"entity":"marital_unit","rows":"all"}],"kernel":"us.post_transfer.materialize@1","mass":"conserve","outputs":[{"column":"ssi","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"engine_input_defaults_sha256":"f938af6506623f453ca55922cf4a8ba6443d5f780f85e4381b777083a90396a0","engine_input_projection_sha256":"cefb137f164c6629589a887bbb56831ebc463cd46909a72ead4dbe0557961e61","engine_ref":"policyengine-us","household_batch_size":5000,"ssi_dependency_sha256":"200ca39e784511e9ede685261f5e0840198ec2b9c4292a522c0fc504c535b31c","stage":"materialize_multispine_agreement_outputs","time_period":2024},"population":"seed_multispine_pool_inputs.boundary","sources":["stacked"],"structural":"none","weights":null}],"sources":[{"codec":"csv-tables","description":"Synthetic stacked US pool at the completed ACS-transfer boundary.","name":"stacked"}]} +{"country":"us","nodes":[{"base":null,"citation":"","description":"Load the synthetic stacked pool after ACS transfer.","id":"create_stacked_pool","inputs":[],"kernel":"us.post_transfer.create@1","mass":"conserve","outputs":[{"column":"A_AGE","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"A_SEX","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"source_year","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"measured","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"person_spine_source_id","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"person_source_id","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"person_support_channel","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"person_support_clone_index","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"age","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"SEMP","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"long_term_capital_gains_before_response","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"non_sch_d_capital_gains","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"schedule_d_capital_gain_distributions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income_before_lsr","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"non_qualified_dividend_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"estate_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"farm_operations_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"farm_rent_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"partnership_s_corp_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"rental_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"sstb_self_employment_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"business_is_sstb","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"qualified_bdc_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"qualified_reit_and_ptp_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"sstb_self_employment_income_before_lsr","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"sstb_unadjusted_basis_qualified_property","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"sstb_w2_wages_from_qualified_business","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"unadjusted_basis_qualified_property","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"w2_wages_from_qualified_business","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employer_sponsored_insurance_premiums","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"NOW_OWNGRP","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"NOW_HIPAID","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"NOW_GRPFTYP","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"NOW_GRPFTYP2","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"PEMLR","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"NOEMP","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"PEIO1COW","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"PERIDNUM","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_income_before_lsr","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"takes_up_medicaid_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"takes_up_chip_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"takes_up_basic_health_program_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"takes_up_medicare_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"takes_up_ssi_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"takes_up_head_start_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"takes_up_early_head_start_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"takes_up_wic_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"short_term_capital_gains","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"long_term_capital_gains_on_collectibles","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"TYPEHUGQ","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_spine_source_id","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_source_id","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_support_channel","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"household_support_clone_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"tax_unit_spine_source_id","dtype":"int64","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"tax_unit_source_id","dtype":"int64","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"tax_unit_support_channel","dtype":"string","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"tax_unit_support_clone_index","dtype":"int64","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"takes_up_dc_ptc","dtype":"bool","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"takes_up_aca_if_eligible","dtype":"bool","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"takes_up_ca_premium_subsidy_if_eligible","dtype":"bool","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"takes_up_co_premium_assistance_if_eligible","dtype":"bool","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"takes_up_nm_premium_assistance_if_eligible","dtype":"bool","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"puf_capital_gains_tail_transfer_applied","dtype":"bool","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"puf_capital_gains_tail_donor_is_synthetic","dtype":"bool","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"puf_capital_gains_tail_donor_source_id","dtype":"int64","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"puf_capital_gains_tail_donor_filing_status_code","dtype":"int64","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"puf_capital_gains_tail_donor_agi_band_index","dtype":"int64","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"puf_capital_gains_tail_transfer_weight","dtype":"float64","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"unrecaptured_section_1250_gain","dtype":"float64","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"spm_unit_spine_source_id","dtype":"int64","entity":"spm_unit","ownership":"produced","rows":"all"},{"column":"spm_unit_source_id","dtype":"int64","entity":"spm_unit","ownership":"produced","rows":"all"},{"column":"spm_unit_support_channel","dtype":"string","entity":"spm_unit","ownership":"produced","rows":"all"},{"column":"spm_unit_support_clone_index","dtype":"int64","entity":"spm_unit","ownership":"produced","rows":"all"},{"column":"takes_up_snap_if_eligible","dtype":"bool","entity":"spm_unit","ownership":"produced","rows":"all"},{"column":"takes_up_tanf_if_eligible","dtype":"bool","entity":"spm_unit","ownership":"produced","rows":"all"},{"column":"takes_up_housing_assistance_if_eligible","dtype":"bool","entity":"spm_unit","ownership":"produced","rows":"all"},{"column":"family_spine_source_id","dtype":"int64","entity":"family","ownership":"produced","rows":"all"},{"column":"family_source_id","dtype":"int64","entity":"family","ownership":"produced","rows":"all"},{"column":"family_support_channel","dtype":"string","entity":"family","ownership":"produced","rows":"all"},{"column":"family_support_clone_index","dtype":"int64","entity":"family","ownership":"produced","rows":"all"},{"column":"marital_unit_spine_source_id","dtype":"int64","entity":"marital_unit","ownership":"produced","rows":"all"},{"column":"marital_unit_source_id","dtype":"int64","entity":"marital_unit","ownership":"produced","rows":"all"},{"column":"marital_unit_support_channel","dtype":"string","entity":"marital_unit","ownership":"produced","rows":"all"},{"column":"marital_unit_support_clone_index","dtype":"int64","entity":"marital_unit","ownership":"produced","rows":"all"}],"params":{"context_schema_version":1},"population":null,"sources":["stacked"],"structural":"create","weights":null},{"base":"create_stacked_pool","citation":"","description":"Open a population version for prepare_stacked_tail_derivation rewrites.","id":"prepare_stacked_tail_derivation.boundary","inputs":[{"columns":["A_AGE","A_SEX","source_year","measured","person_spine_source_id","person_source_id","person_support_channel","person_support_clone_index","age","SEMP","long_term_capital_gains_before_response","non_sch_d_capital_gains","schedule_d_capital_gain_distributions","self_employment_income_before_lsr","non_qualified_dividend_income","estate_income_would_be_qualified","farm_operations_income_would_be_qualified","farm_rent_income_would_be_qualified","partnership_s_corp_income_would_be_qualified","rental_income_would_be_qualified","self_employment_income_would_be_qualified","sstb_self_employment_income_would_be_qualified","business_is_sstb","qualified_bdc_income","qualified_reit_and_ptp_income","sstb_self_employment_income_before_lsr","sstb_unadjusted_basis_qualified_property","sstb_w2_wages_from_qualified_business","unadjusted_basis_qualified_property","w2_wages_from_qualified_business","employer_sponsored_insurance_premiums","NOW_OWNGRP","NOW_HIPAID","NOW_GRPFTYP","NOW_GRPFTYP2","PEMLR","NOEMP","PEIO1COW","PERIDNUM","employment_income_before_lsr","takes_up_medicaid_if_eligible","takes_up_chip_if_eligible","takes_up_basic_health_program_if_eligible","takes_up_medicare_if_eligible","takes_up_ssi_if_eligible","takes_up_head_start_if_eligible","takes_up_early_head_start_if_eligible","takes_up_wic_if_eligible","short_term_capital_gains","long_term_capital_gains_on_collectibles"],"entity":"person","rows":"all"},{"columns":["TYPEHUGQ","household_spine_source_id","household_source_id","household_support_channel","household_support_clone_index"],"entity":"household","rows":"all"},{"columns":["tax_unit_spine_source_id","tax_unit_source_id","tax_unit_support_channel","tax_unit_support_clone_index","takes_up_dc_ptc","takes_up_aca_if_eligible","takes_up_ca_premium_subsidy_if_eligible","takes_up_co_premium_assistance_if_eligible","takes_up_nm_premium_assistance_if_eligible","puf_capital_gains_tail_transfer_applied","puf_capital_gains_tail_donor_is_synthetic","puf_capital_gains_tail_donor_source_id","puf_capital_gains_tail_donor_filing_status_code","puf_capital_gains_tail_donor_agi_band_index","puf_capital_gains_tail_transfer_weight","unrecaptured_section_1250_gain"],"entity":"tax_unit","rows":"all"},{"columns":["spm_unit_spine_source_id","spm_unit_source_id","spm_unit_support_channel","spm_unit_support_clone_index","takes_up_snap_if_eligible","takes_up_tanf_if_eligible","takes_up_housing_assistance_if_eligible"],"entity":"spm_unit","rows":"all"},{"columns":["family_spine_source_id","family_source_id","family_support_channel","family_support_clone_index"],"entity":"family","rows":"all"},{"columns":["marital_unit_spine_source_id","marital_unit_source_id","marital_unit_support_channel","marital_unit_support_clone_index"],"entity":"marital_unit","rows":"all"}],"kernel":"us.post_transfer.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"base":null,"citation":"","description":"Clear clone-2 Schedule-D incumbents before derivation.","id":"prepare_stacked_tail_derivation","inputs":[{"columns":["A_AGE","A_SEX","source_year","measured","person_spine_source_id","person_source_id","person_support_channel","person_support_clone_index","age","SEMP","long_term_capital_gains_before_response","non_sch_d_capital_gains","self_employment_income_before_lsr","non_qualified_dividend_income","estate_income_would_be_qualified","farm_operations_income_would_be_qualified","farm_rent_income_would_be_qualified","partnership_s_corp_income_would_be_qualified","rental_income_would_be_qualified","self_employment_income_would_be_qualified","sstb_self_employment_income_would_be_qualified","business_is_sstb","qualified_bdc_income","qualified_reit_and_ptp_income","sstb_self_employment_income_before_lsr","sstb_unadjusted_basis_qualified_property","sstb_w2_wages_from_qualified_business","unadjusted_basis_qualified_property","w2_wages_from_qualified_business","employer_sponsored_insurance_premiums","NOW_OWNGRP","NOW_HIPAID","NOW_GRPFTYP","NOW_GRPFTYP2","PEMLR","NOEMP","PEIO1COW","PERIDNUM","employment_income_before_lsr","takes_up_medicaid_if_eligible","takes_up_chip_if_eligible","takes_up_basic_health_program_if_eligible","takes_up_medicare_if_eligible","takes_up_ssi_if_eligible","takes_up_head_start_if_eligible","takes_up_early_head_start_if_eligible","takes_up_wic_if_eligible","short_term_capital_gains","long_term_capital_gains_on_collectibles"],"entity":"person","rows":"all"},{"columns":["TYPEHUGQ","household_spine_source_id","household_source_id","household_support_channel","household_support_clone_index"],"entity":"household","rows":"all"},{"columns":["tax_unit_spine_source_id","tax_unit_source_id","tax_unit_support_channel","tax_unit_support_clone_index","takes_up_dc_ptc","takes_up_aca_if_eligible","takes_up_ca_premium_subsidy_if_eligible","takes_up_co_premium_assistance_if_eligible","takes_up_nm_premium_assistance_if_eligible","puf_capital_gains_tail_transfer_applied","puf_capital_gains_tail_donor_is_synthetic","puf_capital_gains_tail_donor_source_id","puf_capital_gains_tail_donor_filing_status_code","puf_capital_gains_tail_donor_agi_band_index","puf_capital_gains_tail_transfer_weight","unrecaptured_section_1250_gain"],"entity":"tax_unit","rows":"all"},{"columns":["spm_unit_spine_source_id","spm_unit_source_id","spm_unit_support_channel","spm_unit_support_clone_index","takes_up_snap_if_eligible","takes_up_tanf_if_eligible","takes_up_housing_assistance_if_eligible"],"entity":"spm_unit","rows":"all"},{"columns":["family_spine_source_id","family_source_id","family_support_channel","family_support_clone_index"],"entity":"family","rows":"all"},{"columns":["marital_unit_spine_source_id","marital_unit_source_id","marital_unit_support_channel","marital_unit_support_clone_index"],"entity":"marital_unit","rows":"all"}],"kernel":"us.post_transfer.prepare@1","mass":"conserve","outputs":[{"column":"schedule_d_capital_gain_distributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"stage":"prepare_stacked_tail_derivation"},"population":"prepare_stacked_tail_derivation.boundary","sources":["stacked"],"structural":"none","weights":null},{"base":"prepare_stacked_tail_derivation.boundary","citation":"","description":"Open a population version for derive_multispine_pool_inputs rewrites.","id":"derive_multispine_pool_inputs.boundary","inputs":[{"columns":["A_AGE","A_SEX","source_year","measured","person_spine_source_id","person_source_id","person_support_channel","person_support_clone_index","age","SEMP","long_term_capital_gains_before_response","non_sch_d_capital_gains","schedule_d_capital_gain_distributions","self_employment_income_before_lsr","non_qualified_dividend_income","estate_income_would_be_qualified","farm_operations_income_would_be_qualified","farm_rent_income_would_be_qualified","partnership_s_corp_income_would_be_qualified","rental_income_would_be_qualified","self_employment_income_would_be_qualified","sstb_self_employment_income_would_be_qualified","business_is_sstb","qualified_bdc_income","qualified_reit_and_ptp_income","sstb_self_employment_income_before_lsr","sstb_unadjusted_basis_qualified_property","sstb_w2_wages_from_qualified_business","unadjusted_basis_qualified_property","w2_wages_from_qualified_business","employer_sponsored_insurance_premiums","NOW_OWNGRP","NOW_HIPAID","NOW_GRPFTYP","NOW_GRPFTYP2","PEMLR","NOEMP","PEIO1COW","PERIDNUM","employment_income_before_lsr","takes_up_medicaid_if_eligible","takes_up_chip_if_eligible","takes_up_basic_health_program_if_eligible","takes_up_medicare_if_eligible","takes_up_ssi_if_eligible","takes_up_head_start_if_eligible","takes_up_early_head_start_if_eligible","takes_up_wic_if_eligible","short_term_capital_gains","long_term_capital_gains_on_collectibles"],"entity":"person","rows":"all"},{"columns":["TYPEHUGQ","household_spine_source_id","household_source_id","household_support_channel","household_support_clone_index"],"entity":"household","rows":"all"},{"columns":["tax_unit_spine_source_id","tax_unit_source_id","tax_unit_support_channel","tax_unit_support_clone_index","takes_up_dc_ptc","takes_up_aca_if_eligible","takes_up_ca_premium_subsidy_if_eligible","takes_up_co_premium_assistance_if_eligible","takes_up_nm_premium_assistance_if_eligible","puf_capital_gains_tail_transfer_applied","puf_capital_gains_tail_donor_is_synthetic","puf_capital_gains_tail_donor_source_id","puf_capital_gains_tail_donor_filing_status_code","puf_capital_gains_tail_donor_agi_band_index","puf_capital_gains_tail_transfer_weight","unrecaptured_section_1250_gain"],"entity":"tax_unit","rows":"all"},{"columns":["spm_unit_spine_source_id","spm_unit_source_id","spm_unit_support_channel","spm_unit_support_clone_index","takes_up_snap_if_eligible","takes_up_tanf_if_eligible","takes_up_housing_assistance_if_eligible"],"entity":"spm_unit","rows":"all"},{"columns":["family_spine_source_id","family_source_id","family_support_channel","family_support_clone_index"],"entity":"family","rows":"all"},{"columns":["marital_unit_spine_source_id","marital_unit_source_id","marital_unit_support_channel","marital_unit_support_clone_index"],"entity":"marital_unit","rows":"all"}],"kernel":"us.post_transfer.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"base":null,"citation":"","description":"Derive Schedule-D and reconcile the QBI input family.","id":"derive_multispine_pool_inputs","inputs":[{"columns":["A_AGE","A_SEX","source_year","measured","person_spine_source_id","person_source_id","person_support_channel","person_support_clone_index","age","SEMP","long_term_capital_gains_before_response","non_sch_d_capital_gains","non_qualified_dividend_income","NOW_OWNGRP","NOW_HIPAID","NOW_GRPFTYP","NOW_GRPFTYP2","PEMLR","NOEMP","PEIO1COW","PERIDNUM","employment_income_before_lsr","takes_up_medicaid_if_eligible","takes_up_chip_if_eligible","takes_up_basic_health_program_if_eligible","takes_up_medicare_if_eligible","takes_up_ssi_if_eligible","takes_up_head_start_if_eligible","takes_up_early_head_start_if_eligible","takes_up_wic_if_eligible","short_term_capital_gains","long_term_capital_gains_on_collectibles"],"entity":"person","rows":"all"},{"columns":["TYPEHUGQ","household_spine_source_id","household_source_id","household_support_channel","household_support_clone_index"],"entity":"household","rows":"all"},{"columns":["tax_unit_spine_source_id","tax_unit_source_id","tax_unit_support_channel","tax_unit_support_clone_index","takes_up_dc_ptc","takes_up_aca_if_eligible","takes_up_ca_premium_subsidy_if_eligible","takes_up_co_premium_assistance_if_eligible","takes_up_nm_premium_assistance_if_eligible","puf_capital_gains_tail_transfer_applied","puf_capital_gains_tail_donor_is_synthetic","puf_capital_gains_tail_donor_source_id","puf_capital_gains_tail_donor_filing_status_code","puf_capital_gains_tail_donor_agi_band_index","puf_capital_gains_tail_transfer_weight","unrecaptured_section_1250_gain"],"entity":"tax_unit","rows":"all"},{"columns":["spm_unit_spine_source_id","spm_unit_source_id","spm_unit_support_channel","spm_unit_support_clone_index","takes_up_snap_if_eligible","takes_up_tanf_if_eligible","takes_up_housing_assistance_if_eligible"],"entity":"spm_unit","rows":"all"},{"columns":["family_spine_source_id","family_source_id","family_support_channel","family_support_clone_index"],"entity":"family","rows":"all"},{"columns":["marital_unit_spine_source_id","marital_unit_source_id","marital_unit_support_channel","marital_unit_support_clone_index"],"entity":"marital_unit","rows":"all"}],"kernel":"us.post_transfer.derive@1","mass":"conserve","outputs":[{"column":"schedule_d_capital_gain_distributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employer_sponsored_insurance_premiums","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"estate_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"farm_operations_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"farm_rent_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"partnership_s_corp_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rental_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sstb_self_employment_income_would_be_qualified","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"business_is_sstb","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"qualified_bdc_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"qualified_reit_and_ptp_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sstb_self_employment_income_before_lsr","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sstb_unadjusted_basis_qualified_property","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sstb_w2_wages_from_qualified_business","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"unadjusted_basis_qualified_property","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"w2_wages_from_qualified_business","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income_before_lsr","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"qbi_contract_version":2,"remaining_stage_manifest_sha256":"d32b748b4e240a7a93c6354925bd2e7af2c493587cc740cd822cda8d8480833c","schedule_d_asset_sha256":"e7d31a5956dc420940002b5c5120b4fa7f6af6fa8bf071d488affe35b616611d","stage":"derive_multispine_pool_inputs"},"population":"derive_multispine_pool_inputs.boundary","sources":["stacked"],"structural":"none","weights":null},{"base":"derive_multispine_pool_inputs.boundary","citation":"","description":"Open a population version for seed_multispine_pool_inputs rewrites.","id":"seed_multispine_pool_inputs.boundary","inputs":[{"columns":["A_AGE","A_SEX","source_year","measured","person_spine_source_id","person_source_id","person_support_channel","person_support_clone_index","age","SEMP","long_term_capital_gains_before_response","non_sch_d_capital_gains","schedule_d_capital_gain_distributions","self_employment_income_before_lsr","non_qualified_dividend_income","estate_income_would_be_qualified","farm_operations_income_would_be_qualified","farm_rent_income_would_be_qualified","partnership_s_corp_income_would_be_qualified","rental_income_would_be_qualified","self_employment_income_would_be_qualified","sstb_self_employment_income_would_be_qualified","business_is_sstb","qualified_bdc_income","qualified_reit_and_ptp_income","sstb_self_employment_income_before_lsr","sstb_unadjusted_basis_qualified_property","sstb_w2_wages_from_qualified_business","unadjusted_basis_qualified_property","w2_wages_from_qualified_business","employer_sponsored_insurance_premiums","NOW_OWNGRP","NOW_HIPAID","NOW_GRPFTYP","NOW_GRPFTYP2","PEMLR","NOEMP","PEIO1COW","PERIDNUM","employment_income_before_lsr","takes_up_medicaid_if_eligible","takes_up_chip_if_eligible","takes_up_basic_health_program_if_eligible","takes_up_medicare_if_eligible","takes_up_ssi_if_eligible","takes_up_head_start_if_eligible","takes_up_early_head_start_if_eligible","takes_up_wic_if_eligible","short_term_capital_gains","long_term_capital_gains_on_collectibles"],"entity":"person","rows":"all"},{"columns":["TYPEHUGQ","household_spine_source_id","household_source_id","household_support_channel","household_support_clone_index"],"entity":"household","rows":"all"},{"columns":["tax_unit_spine_source_id","tax_unit_source_id","tax_unit_support_channel","tax_unit_support_clone_index","takes_up_dc_ptc","takes_up_aca_if_eligible","takes_up_ca_premium_subsidy_if_eligible","takes_up_co_premium_assistance_if_eligible","takes_up_nm_premium_assistance_if_eligible","puf_capital_gains_tail_transfer_applied","puf_capital_gains_tail_donor_is_synthetic","puf_capital_gains_tail_donor_source_id","puf_capital_gains_tail_donor_filing_status_code","puf_capital_gains_tail_donor_agi_band_index","puf_capital_gains_tail_transfer_weight","unrecaptured_section_1250_gain"],"entity":"tax_unit","rows":"all"},{"columns":["spm_unit_spine_source_id","spm_unit_source_id","spm_unit_support_channel","spm_unit_support_clone_index","takes_up_snap_if_eligible","takes_up_tanf_if_eligible","takes_up_housing_assistance_if_eligible"],"entity":"spm_unit","rows":"all"},{"columns":["family_spine_source_id","family_source_id","family_support_channel","family_support_clone_index"],"entity":"family","rows":"all"},{"columns":["marital_unit_spine_source_id","marital_unit_source_id","marital_unit_support_channel","marital_unit_support_clone_index"],"entity":"marital_unit","rows":"all"}],"kernel":"us.post_transfer.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"base":null,"citation":"","description":"Seed take-up inputs and disclose remaining defaults.","id":"seed_multispine_pool_inputs","inputs":[{"columns":["A_AGE","A_SEX","source_year","measured","person_spine_source_id","person_source_id","person_support_channel","person_support_clone_index","age","SEMP","long_term_capital_gains_before_response","non_sch_d_capital_gains","schedule_d_capital_gain_distributions","self_employment_income_before_lsr","non_qualified_dividend_income","estate_income_would_be_qualified","farm_operations_income_would_be_qualified","farm_rent_income_would_be_qualified","partnership_s_corp_income_would_be_qualified","rental_income_would_be_qualified","self_employment_income_would_be_qualified","sstb_self_employment_income_would_be_qualified","business_is_sstb","qualified_bdc_income","qualified_reit_and_ptp_income","sstb_self_employment_income_before_lsr","sstb_unadjusted_basis_qualified_property","sstb_w2_wages_from_qualified_business","unadjusted_basis_qualified_property","w2_wages_from_qualified_business","employer_sponsored_insurance_premiums","NOW_OWNGRP","NOW_HIPAID","NOW_GRPFTYP","NOW_GRPFTYP2","PEMLR","NOEMP","PEIO1COW","PERIDNUM","employment_income_before_lsr","short_term_capital_gains","long_term_capital_gains_on_collectibles"],"entity":"person","rows":"all"},{"columns":["TYPEHUGQ","household_spine_source_id","household_source_id","household_support_channel","household_support_clone_index"],"entity":"household","rows":"all"},{"columns":["tax_unit_spine_source_id","tax_unit_source_id","tax_unit_support_channel","tax_unit_support_clone_index","puf_capital_gains_tail_transfer_applied","puf_capital_gains_tail_donor_is_synthetic","puf_capital_gains_tail_donor_source_id","puf_capital_gains_tail_donor_filing_status_code","puf_capital_gains_tail_donor_agi_band_index","puf_capital_gains_tail_transfer_weight","unrecaptured_section_1250_gain"],"entity":"tax_unit","rows":"all"},{"columns":["spm_unit_spine_source_id","spm_unit_source_id","spm_unit_support_channel","spm_unit_support_clone_index"],"entity":"spm_unit","rows":"all"},{"columns":["family_spine_source_id","family_source_id","family_support_channel","family_support_clone_index"],"entity":"family","rows":"all"},{"columns":["marital_unit_spine_source_id","marital_unit_source_id","marital_unit_support_channel","marital_unit_support_clone_index"],"entity":"marital_unit","rows":"all"}],"kernel":"us.post_transfer.seed@1","mass":"conserve","outputs":[{"column":"takes_up_snap_if_eligible","dtype":"bool","entity":"spm_unit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_tanf_if_eligible","dtype":"bool","entity":"spm_unit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_eitc","dtype":"bool","entity":"tax_unit","ownership":"produced","rows":"all"},{"column":"takes_up_medicaid_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_chip_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_basic_health_program_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_medicare_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_ssi_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_dc_ptc","dtype":"bool","entity":"tax_unit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_head_start_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_early_head_start_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_housing_assistance_if_eligible","dtype":"bool","entity":"spm_unit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_wic_if_eligible","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_aca_if_eligible","dtype":"bool","entity":"tax_unit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_ca_premium_subsidy_if_eligible","dtype":"bool","entity":"tax_unit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_co_premium_assistance_if_eligible","dtype":"bool","entity":"tax_unit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"takes_up_nm_premium_assistance_if_eligible","dtype":"bool","entity":"tax_unit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"engine_ref":"policyengine-us","seed":0,"stage":"seed_multispine_pool_inputs","take_up_contract_version":1,"take_up_resource_sha256":"9522ce40f7dea569312dd7a7beb474e5a5afadd2f1e10cb5876534c3ef623d35","time_period":2024},"population":"seed_multispine_pool_inputs.boundary","sources":["stacked"],"structural":"none","weights":null},{"base":null,"citation":"","description":"Materialize SSI on the disposable agreement view.","id":"materialize_multispine_agreement_outputs","inputs":[{"columns":["A_AGE","A_SEX","source_year","measured","person_spine_source_id","person_source_id","person_support_channel","person_support_clone_index","age","SEMP","long_term_capital_gains_before_response","non_sch_d_capital_gains","schedule_d_capital_gain_distributions","self_employment_income_before_lsr","non_qualified_dividend_income","estate_income_would_be_qualified","farm_operations_income_would_be_qualified","farm_rent_income_would_be_qualified","partnership_s_corp_income_would_be_qualified","rental_income_would_be_qualified","self_employment_income_would_be_qualified","sstb_self_employment_income_would_be_qualified","business_is_sstb","qualified_bdc_income","qualified_reit_and_ptp_income","sstb_self_employment_income_before_lsr","sstb_unadjusted_basis_qualified_property","sstb_w2_wages_from_qualified_business","unadjusted_basis_qualified_property","w2_wages_from_qualified_business","employer_sponsored_insurance_premiums","NOW_OWNGRP","NOW_HIPAID","NOW_GRPFTYP","NOW_GRPFTYP2","PEMLR","NOEMP","PEIO1COW","PERIDNUM","employment_income_before_lsr","takes_up_medicaid_if_eligible","takes_up_chip_if_eligible","takes_up_basic_health_program_if_eligible","takes_up_medicare_if_eligible","takes_up_ssi_if_eligible","takes_up_head_start_if_eligible","takes_up_early_head_start_if_eligible","takes_up_wic_if_eligible","short_term_capital_gains","long_term_capital_gains_on_collectibles"],"entity":"person","rows":"all"},{"columns":["TYPEHUGQ","household_spine_source_id","household_source_id","household_support_channel","household_support_clone_index"],"entity":"household","rows":"all"},{"columns":["tax_unit_spine_source_id","tax_unit_source_id","tax_unit_support_channel","tax_unit_support_clone_index","takes_up_dc_ptc","takes_up_aca_if_eligible","takes_up_ca_premium_subsidy_if_eligible","takes_up_co_premium_assistance_if_eligible","takes_up_nm_premium_assistance_if_eligible","puf_capital_gains_tail_transfer_applied","puf_capital_gains_tail_donor_is_synthetic","puf_capital_gains_tail_donor_source_id","puf_capital_gains_tail_donor_filing_status_code","puf_capital_gains_tail_donor_agi_band_index","puf_capital_gains_tail_transfer_weight","unrecaptured_section_1250_gain","takes_up_eitc"],"entity":"tax_unit","rows":"all"},{"columns":["spm_unit_spine_source_id","spm_unit_source_id","spm_unit_support_channel","spm_unit_support_clone_index","takes_up_snap_if_eligible","takes_up_tanf_if_eligible","takes_up_housing_assistance_if_eligible"],"entity":"spm_unit","rows":"all"},{"columns":["family_spine_source_id","family_source_id","family_support_channel","family_support_clone_index"],"entity":"family","rows":"all"},{"columns":["marital_unit_spine_source_id","marital_unit_source_id","marital_unit_support_channel","marital_unit_support_clone_index"],"entity":"marital_unit","rows":"all"}],"kernel":"us.post_transfer.materialize@1","mass":"conserve","outputs":[{"column":"ssi","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"engine_input_defaults_sha256":"f938af6506623f453ca55922cf4a8ba6443d5f780f85e4381b777083a90396a0","engine_input_projection_sha256":"cefb137f164c6629589a887bbb56831ebc463cd46909a72ead4dbe0557961e61","engine_ref":"policyengine-us","household_batch_size":5000,"ssi_dependency_sha256":"200ca39e784511e9ede685261f5e0840198ec2b9c4292a522c0fc504c535b31c","stage":"materialize_multispine_agreement_outputs","time_period":2024},"population":"seed_multispine_pool_inputs.boundary","sources":["stacked"],"structural":"none","weights":null}],"sources":[{"codec":"csv-tables","description":"Synthetic stacked US pool at the completed ACS-transfer boundary.","name":"stacked"}]} diff --git a/test_support/microcosm_build/spec_engine_inventory_coverage.py b/test_support/microcosm_build/spec_engine_inventory_coverage.py index 1d051f5c4d..2664fc1886 100644 --- a/test_support/microcosm_build/spec_engine_inventory_coverage.py +++ b/test_support/microcosm_build/spec_engine_inventory_coverage.py @@ -107,8 +107,8 @@ def binding() -> dict[str, object]: EXPECTED_COUNTS = { "adapter_surfaces": 13, "authority_components": 9, - "early_families": 13, - "early_targets": 48, + "early_families": 14, + "early_targets": 49, "itemization_batches": 5, "itemization_targets": 37, "late_groups": 19, @@ -123,7 +123,7 @@ def binding() -> dict[str, object]: "producer_nodes": 38, "producer_virtual_resources": 75, "release_rungs": 5, - "resolved_references": 334, + "resolved_references": 335, "seed_owner_bindings": 112, "seed_owner_rows": 54, "seed_sites": 53, @@ -137,7 +137,7 @@ def binding() -> dict[str, object]: "take_up_pipeline_steps": 28, "take_up_programs": 17, "typed_artifacts": 84, - "typed_columns": 176, + "typed_columns": 177, "typed_entities": 8, "typed_scopes": 7, } diff --git a/test_support/microcosm_build/us_acs_local_esi_premiums.py b/test_support/microcosm_build/us_acs_local_esi_premiums.py new file mode 100644 index 0000000000..d71b266182 --- /dev/null +++ b/test_support/microcosm_build/us_acs_local_esi_premiums.py @@ -0,0 +1,325 @@ +"""Fixtures for the ACS local lane's ESI employer premium (microcosm #454). + +The lane pools a dense ASEC-by-PUF donor release with the ACS spine. These +builders make both sides small: a donor the ``meps_esi_premiums`` stage ran on +before the PUF clone, and an ACS frame as the PUMS loader hands it over. +""" + +from __future__ import annotations + +from pathlib import Path + +import numpy as np +import pandas as pd +import pytest + +from microcosm.build.us_runtime import acs_multispine +from microcosm.build.us_runtime.acs_local_esi_premiums import ( + prepare_acs_local_esi_premium_donor, +) +from microcosm.build.us_runtime.acs_multispine import AcsMultispineResult +from microcosm.build.us_runtime.acs_pums import AcsPumsSource +from microcosm.build.us_runtime.base_pool import with_optional_acs_spine +from microcosm.build.us_runtime.esi_premiums import ( + US_ESI_EMPLOYER_PREMIUM_COLUMN, + US_ESI_PREMIUMS_WAGE_COLUMN, + with_us_esi_premium_inputs, +) +from microcosm.build.us_runtime.puf_support import clone_us_frame_for_puf_support +from microcosm.frame import US_SCHEMA, Frame, WeightKind, Weights + +EMPLOYER = US_ESI_EMPLOYER_PREMIUM_COLUMN +WAGES = US_ESI_PREMIUMS_WAGE_COLUMN +ASEC_PUF = "asec_puf" +ACS = "acs_2024_1yr" +_STATES = (6, 36, 48, 12, 17, 39, 53, 13) +_GROUP_OFFSETS = { + "tax_unit": 100_000, + "spm_unit": 200_000, + "family": 300_000, + "marital_unit": 400_000, +} + + +def _one_person_households( + person: pd.DataFrame, + household: pd.DataFrame, + weights: np.ndarray, + *, + stratum: str, + kind: WeightKind, +) -> Frame: + tables = {"person": person, "household": household} + for group, offset in _GROUP_OFFSETS.items(): + person[f"person_{group}_id"] = person["person_household_id"] + offset + tables[group] = pd.DataFrame( + {f"{group}_id": household["household_id"] + offset} + ) + return Frame( + tables, + US_SCHEMA, + {"household": Weights(np.asarray(weights, dtype=np.float64), kind)}, + pd.Series([stratum] * len(person), dtype=object), + ) + + +def asec_observations(households: int = 320) -> Frame: + """One-person ASEC households with the raw fields the stage reads. + + Of every 20 people, 7 are employed policyholders, 2 are policyholders + without a job, 5 are employed without a policy and 6 are neither. Wages + are the measured wages: positive exactly for the employed. Age and sex do + not tell the employed from the rest, so only wages can. + """ + + index = np.arange(households) + kind = index % 20 + holder = kind < 9 + employed = (kind < 7) | ((kind >= 9) & (kind < 14)) + tier = np.where(holder, np.asarray([1, 2, 3])[index % 3], 0) + person = pd.DataFrame( + { + "person_id": index + 1, + "person_household_id": index + 1, + # The CPS record id: with the raw fields, it marks a row the + # stage derived. + "PERIDNUM": [f"asec-{position:05d}" for position in index], + "age": 24.0 + index % 41, + "is_female": index % 2 == 0, + WAGES: np.where(employed, 28_000.0 + 850.0 * (index % 97), 0.0), + "NOW_OWNGRP": np.where(holder, 1, 2), + "NOW_HIPAID": np.where(holder, np.asarray([1, 2, 2, 3])[index % 4], 0), + "NOW_GRPFTYP2": tier, + "NOW_GRPFTYP": np.asarray([0, 1, 1, 2])[tier], + "PEMLR": np.where(employed, 1, 5), + "NOEMP": np.where(employed, np.asarray([1, 3, 6, 0])[index % 4], 0), + "PEIO1COW": np.where( + employed, np.asarray([4, 4, 5, 2, 3, 1])[index % 6], 0 + ), + "source_year": 2024, + "source_household_id": index + 1, + "source_person_id": 1, + } + ) + household = pd.DataFrame( + { + "household_id": index + 1, + "state_fips": np.asarray(_STATES, dtype=np.int64)[index % len(_STATES)], + } + ) + return _one_person_households( + person, + household, + 900.0 + 37.0 * (index % 11), + stratum=ASEC_PUF, + kind=WeightKind.DESIGN, + ) + + +def dense_donor(households: int = 320, *, puf_wage_seed: int = 5) -> Frame: + """A dense ASEC-by-PUF donor release that ran the ``meps_esi_premiums`` stage. + + The stage assigns one premium per source person; the PUF clone copies it. + The clone's wages are then replaced, as PUF imputation replaces them: a + seeded permutation, so a PUF-detail row's wages no longer say whether its + source person holds a job. Weights are calibrated, as a release's are. + """ + + staged = with_us_esi_premium_inputs( + asec_observations(households), seed=0, time_period=2024 + ) + cloned = clone_us_frame_for_puf_support(staged) + person = cloned.table("person").copy() + puf = person["person_support_clone_index"].to_numpy() == 1 + rng = np.random.default_rng(puf_wage_seed) + person.loc[puf, WAGES] = rng.permutation(person.loc[puf, WAGES].to_numpy()) + return Frame( + { + entity: person if entity == "person" else cloned.table(entity) + for entity in cloned.entities + }, + US_SCHEMA, + { + "household": Weights( + np.asarray(cloned.weights_for("household").values, dtype=np.float64), + WeightKind.CALIBRATED, + ) + }, + cloned.strata, + ) + + +def raw_acs(households: int = 280, *, first_id: int = 1, children: int = 0) -> Frame: + """One-person ACS households as the PUMS loader returns them. + + Three in five adults report wages, at any age. ``first_id`` defaults to 1 + so the ACS ids repeat the donor's, as the two real id spaces may. + ``children`` appends that many people aged 9, whose ``WAGP`` is blank: + PUMS asks earnings of people aged 15 and older. + """ + + index = np.arange(households + children) + child = index >= households + employed = (index % 5 < 3) & ~child + person = pd.DataFrame( + { + "person_id": index + first_id, + "person_household_id": index + first_id, + "AGEP": np.where(child, 9, 23 + index % 43), + "SEX": np.where(index % 2 == 1, 2, 1), + "ADJINC": 1_000_000, + "WAGP": np.where( + child, + np.nan, + np.where(employed, 26_000.0 + 1_100.0 * (index % 83), 0.0), + ), + } + ) + household = pd.DataFrame( + { + "household_id": index + first_id, + "state_fips": np.asarray(_STATES, dtype=np.int64)[ + (index + 3) % len(_STATES) + ], + "TYPEHUGQ": 1, + } + ) + return _one_person_households( + person, + household, + 40.0 + 3.0 * (index % 13), + stratum=ACS, + kind=WeightKind.DESIGN, + ) + + +def transferred_acs( + premiums: np.ndarray, + wages: np.ndarray, + weights: np.ndarray, + *, + households: np.ndarray | None = None, + ages: np.ndarray | None = None, + first_id: int = 1, +) -> Frame: + """An ACS frame after the lane's transfers. + + ``premiums`` stands for whatever the ESI transfer drew, so a property can + range over every draw without fitting a forest. ``households`` gives each + person's household position (nondecreasing, starting at 0; one person per + household by default) and ``weights`` one weight per household. ``ages`` + defaults to adults; a NaN wage is a blank the source left. + """ + + index = np.arange(len(premiums)) + members = index if households is None else np.asarray(households, dtype=np.int64) + count = int(members.max()) + 1 + person = pd.DataFrame( + { + "person_id": index + first_id, + "person_household_id": members + first_id, + "age": ( + 30.0 + index % 40 if ages is None else np.asarray(ages, dtype=float) + ), + "is_female": index % 2 == 0, + WAGES: np.asarray(wages, dtype=np.float64), + EMPLOYER: np.asarray(premiums, dtype=np.float64), + } + ) + household_index = np.arange(count) + household = pd.DataFrame( + { + "household_id": household_index + first_id, + "state_fips": np.asarray(_STATES, dtype=np.int64)[ + household_index % len(_STATES) + ], + } + ) + return _one_person_households( + person, household, weights, stratum=ACS, kind=WeightKind.DESIGN + ) + + +def reweighted(frame: Frame, factor: float | np.ndarray) -> Frame: + """The frame with its household weights multiplied by ``factor``. + + ``factor`` is one number for every household or one per household. + """ + + weights = frame.weights_for("household") + return Frame( + {entity: frame.table(entity) for entity in frame.entities}, + frame.schema, + { + "household": Weights( + np.asarray(weights.values, dtype=np.float64) * factor, weights.kind + ) + }, + frame.strata, + metadata=frame.metadata, + ) + + +def pooled(donor: Frame, acs: Frame, *, acs_share: float = 0.5) -> Frame: + """The lane's pooled frame before the anchor.""" + + return with_optional_acs_spine(donor, acs, acs_share=acs_share) + + +def donor_rows(frame: Frame) -> np.ndarray: + """People whose premium the stage derived: they carry the CPS record id.""" + + return frame.table("person")["PERIDNUM"].notna().to_numpy() + + +def person_weights(frame: Frame) -> np.ndarray: + return np.asarray(frame.resolve_weights("person").values, dtype=np.float64) + + +def employer_total(frame: Frame, rows: np.ndarray | None = None) -> float: + """Weighted employer premium over ``rows`` (every person by default).""" + + weights = person_weights(frame) + values = frame.table("person")[EMPLOYER].to_numpy(dtype=np.float64) + rows = np.ones(len(values), dtype=bool) if rows is None else rows + return float(weights[rows] @ values[rows]) + + +def household_mass_share(frame: Frame, rows: np.ndarray) -> float: + """Share of household mass in the households of ``rows``.""" + + household = frame.table("household") + members = frame.table("person").loc[rows, "person_household_id"] + selected = household["household_id"].isin(members).to_numpy() + weights = np.asarray(frame.weights_for("household").values, dtype=np.float64) + return float(weights[selected].sum() / weights.sum()) + + +def build_lane( + donor: Frame, + acs: Frame, + *, + acs_share: float = 0.5, + n_estimators: int = 20, + seed: int = 0, + target_families: dict | None = None, +) -> AcsMultispineResult: + """Run the lane's staging orchestration on fixture frames. + + Only the PUMS loader is replaced; native mapping, the ESI transfer, the + pooling and the anchor are the production code. + """ + + with pytest.MonkeyPatch.context() as patch: + patch.setattr( + acs_multispine, "build_acs_pums_unit_frame", lambda *a, **k: (acs, {}) + ) + return acs_multispine.build_optional_acs_multispine( + donor, + AcsPumsSource(Path("unused-hus.zip"), Path("unused-pus.zip")), + acs_share=acs_share, + target_families=target_families or {}, + esi_premium_donor_factory=prepare_acs_local_esi_premium_donor, + seed=seed, + n_estimators=n_estimators, + ) diff --git a/test_support/microcosm_build/us_acs_local_release_tool.py b/test_support/microcosm_build/us_acs_local_release_tool.py new file mode 100644 index 0000000000..5a39d5d01c --- /dev/null +++ b/test_support/microcosm_build/us_acs_local_release_tool.py @@ -0,0 +1,34 @@ +"""Loaders for the ACS local release chain's two tools. + +``tools/`` is not a package, so tests in more than one category load the +tools by path through these helpers. +""" + +from __future__ import annotations + +import importlib.util +from types import ModuleType + +from test_support.paths import paths_for + +_TOOLS = paths_for("microcosm-build").repository / "tools" + + +def _load(name: str) -> ModuleType: + spec = importlib.util.spec_from_file_location(name, _TOOLS / f"{name}.py") + assert spec is not None and spec.loader is not None + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module + + +def load_tool_module() -> ModuleType: + """``tools/build_us_acs_local_release.py``, freshly executed.""" + + return _load("build_us_acs_local_release") + + +def load_staging_builder_module() -> ModuleType: + """``tools/build_us_acs_multispine_base.py``, the staging shim.""" + + return _load("build_us_acs_multispine_base") diff --git a/test_support/microcosm_build/us_multispine_pool.py b/test_support/microcosm_build/us_multispine_pool.py index 47468ad9a6..ef242ca69b 100644 --- a/test_support/microcosm_build/us_multispine_pool.py +++ b/test_support/microcosm_build/us_multispine_pool.py @@ -29,6 +29,11 @@ from microcosm.build.us_runtime.acs_transfer import ( declared_acs_transfer_target_families, ) +from microcosm.build.us_runtime.esi_premiums import ( + US_ESI_PREMIUMS_OUTPUT_COLUMNS, + US_ESI_PREMIUMS_REQUIRED_SOURCE_COLUMNS, + US_ESI_PREMIUMS_WAGE_COLUMN, +) from microcosm.build.us_runtime.multispine_pool import ( POOL_CHECKPOINT_STAGE_ORDER, POOL_DEFERRED_TRANSFER_INPUTS, @@ -113,6 +118,7 @@ "with_us_medicare_take_up_input", "with_us_housing_inputs", "with_us_eligibility_inputs", + "with_us_esi_premium_inputs", "with_us_pregnancy_inputs", "with_us_wic_claim_input", "impute_us_housing_assistance_to_puf_support", @@ -136,6 +142,7 @@ "with_us_relationship_inputs", "with_us_housing_inputs", "with_us_eligibility_inputs", + "with_us_esi_premium_inputs", ) _EXPECTED_POST_CLONE_SOURCE_OPERATOR_ORDER = ( @@ -187,6 +194,8 @@ def _overlap_person_table() -> pd.DataFrame: _EXPECTED_SOURCE_OPERATOR_WRAPPERS = { "with_us_hours_worked_inputs": "_with_gated_us_hours_worked_inputs", + "with_us_esi_premium_inputs": "esi_premiums_at_pool_share", + "with_us_esi_premium_pool_anchor": "anchor_esi_premiums_with_receipt", "with_us_qbi_input_reconciliation": "reconcile_qbi_with_receipt", } @@ -340,6 +349,16 @@ def _real_pre_clone_source_frame() -> Frame: "WICYN": [0, 1, 2, 0], "SPM_CAPHOUSESUB": [0.0, 0.0, 0.0, 0.0], "SPM_TENMORTSTATUS": [3, 3, 3, 3], + # Each parent is an employed private-sector ESI policyholder + # whose employer pays some or all of a family premium; the + # children are outside the coverage universe. + "NOW_OWNGRP": [1, 0, 1, 0], + "NOW_HIPAID": [2, 0, 1, 0], + "NOW_GRPFTYP": [1, 0, 1, 0], + "NOW_GRPFTYP2": [1, 0, 2, 0], + "PEMLR": [1, 0, 1, 0], + "NOEMP": [6, 0, 2, 0], + "PEIO1COW": [4, 0, 4, 0], } ) tables = { @@ -737,7 +756,6 @@ def _producer_dtype_source_frame() -> Frame: person["RESNSS2"] = 0 person["SS_YN"] = 2 person["SSI_YN"] = 2 - person["PEIO1COW"] = 0 person["A_MJOCC"] = 0 person["PEAFEVER"] = 2 person["ED_VAL"] = [0.0, 500.0, 0.0, 1_000.0] @@ -1034,6 +1052,37 @@ def _single_post_clone_source_receipt(operator: str) -> dict[str, object]: } +def _with_esi_premium_pool_surface(frame: Frame) -> Frame: + """Give a fixture pool the ESI premium surface the derive stage requires. + + ASEC-channel rows carry the raw ASEC fields the stage reads and a CPS + record id; every other row holds a transferred premium and neither. + Everyone has the same premium, and wages unless the fixture already sets + them. + """ + + person = frame.table("person").copy() + asec = person["person_support_channel"].eq("asec").to_numpy() + for column in US_ESI_PREMIUMS_REQUIRED_SOURCE_COLUMNS: + if column != "state_fips": + person[column] = np.where(asec, 1.0, np.nan) + record_ids = ( + person["PERIDNUM"].astype(object) + if "PERIDNUM" in person + else "cps-" + person["person_source_id"].astype(str) + ) + person["PERIDNUM"] = record_ids.where(asec & pd.notna(record_ids), None) + if person.loc[asec, "PERIDNUM"].isna().any(): + person.loc[asec, "PERIDNUM"] = "cps-" + person.loc[ + asec, "person_source_id" + ].astype(str) + for column in US_ESI_PREMIUMS_OUTPUT_COLUMNS: + person[column] = 100.0 + if US_ESI_PREMIUMS_WAGE_COLUMN not in person: + person[US_ESI_PREMIUMS_WAGE_COLUMN] = 1_000.0 + return _replace_person(frame, person) + + def _qbi_ready_derive_frame() -> Frame: assembled = assemble_spines( {"asec": _source_frame(), "acs": _source_frame()}, @@ -1048,7 +1097,7 @@ def _qbi_ready_derive_frame() -> Frame: person["self_employment_income_before_lsr"] = 10.0 person["SEMP"] = 10.0 person["sstb_self_employment_income_before_lsr"] = 5.0 - return _replace_person(frame, person) + return _with_esi_premium_pool_surface(_replace_person(frame, person)) class _FakeEngine: diff --git a/tools/_legacy/build_us_acs_multispine_base.py b/tools/_legacy/build_us_acs_multispine_base.py index 80dba82181..ea2c038f55 100644 --- a/tools/_legacy/build_us_acs_multispine_base.py +++ b/tools/_legacy/build_us_acs_multispine_base.py @@ -28,6 +28,12 @@ weights_audit_gate, ) from microcosm.build.us_runtime import acs_sources +from microcosm.build.us_runtime.acs_local_esi_premiums import ( + acs_local_esi_premium_gate_payload, + acs_local_esi_premium_gates, + acs_local_esi_premium_transfer_target_families, + prepare_acs_local_esi_premium_donor, +) from microcosm.build.us_runtime.acs_local_hours import ( ACS_UNDER15_ZERO_POLICY, acs_local_hours_signal_gate, @@ -165,6 +171,19 @@ def _parse_args(argv: list[str] | None = None) -> argparse.Namespace: "the appropriate support channel for each input family." ), ) + parser.add_argument( + "--allow-esi-premium-gaps", + action="store_true", + help=( + "Diagnostic escape hatch (microcosm#454): build from a donor " + "release that predates the meps_esi_premiums stage. No row then " + "carries employer_sponsored_insurance_premiums and both ESI gates " + "are red; what was red is written to the staging summary. A donor " + "that carries the column but fails qualification leaves it null " + "on the ACS spine, which the release tool refuses. Release builds " + "must leave this unset." + ), + ) parser.add_argument( "--donor-release-manifest", type=Path, @@ -246,6 +265,10 @@ def main(argv: list[str] | None = None) -> int: donor_channel=args.donor_channel, target_families=transfer_plan, ) + esi_premium_waiver = _qualify_esi_premium_donor( + base, allow_gaps=args.allow_esi_premium_gaps + ) + transfer_esi_premiums = esi_premium_waiver is None base_rows = _row_counts(base) base_mass = float(base.weights_for("household").total) puma_ladder_sha256 = _sha256(args.puma_ladder) @@ -268,6 +291,9 @@ def main(argv: list[str] | None = None) -> int: donor, seed=args.seed, period=args.period ), hours_under15_policy=args.hours_under15_policy, + esi_premium_donor_factory=( + prepare_acs_local_esi_premium_donor if transfer_esi_premiums else None + ), donor_channel=args.donor_channel, seed=args.seed, n_estimators=args.n_estimators, @@ -280,7 +306,7 @@ def main(argv: list[str] | None = None) -> int: transfer_coverage = _require_default_transfer_coverage( result, base, - target_families=acs_local_transfer_target_families(), + target_families=_local_coverage_plan(esi_premiums=transfer_esi_premiums), ) weights_audit = _audit_fits(result) @@ -299,6 +325,13 @@ def main(argv: list[str] | None = None) -> int: "Local staging hours gate failed: " + "; ".join(hours_gate.failures) ) + local_esi_premiums = _local_esi_premium_evidence( + result, + period=args.period, + waiver=esi_premium_waiver, + allow_gaps=args.allow_esi_premium_gaps, + ) + args.out_h5.parent.mkdir(parents=True, exist_ok=True) staging_export_peak_bytes = _preflight_staging_export(result.frame) _write_dataset(result.frame, args.out_h5, period=args.period) @@ -328,6 +361,7 @@ def main(argv: list[str] | None = None) -> int: "failures": list(hours_gate.failures), "details": dict(hours_gate.details), } + summary["local_esi_premiums"] = local_esi_premiums summary_path.parent.mkdir(parents=True, exist_ok=True) rendered = json.dumps(summary, indent=2, sort_keys=True, allow_nan=False) + "\n" summary_path.write_text(rendered, encoding="utf-8") @@ -335,6 +369,78 @@ def main(argv: list[str] | None = None) -> int: return 0 +def _qualify_esi_premium_donor(base: Frame, *, allow_gaps: bool) -> str | None: + """Qualify the donor of the employer premium before ACS acquisition. + + Returns ``None`` for a qualified donor, or the refusal a diagnostic build + waived (``--allow-esi-premium-gaps``). The transfer qualifies the donor + again when it selects its rows, so no selection is held through the ACS + load. + """ + + try: + prepare_acs_local_esi_premium_donor(base) + except ValueError as exc: + if not allow_gaps: + raise SystemExit( + "Dense ASEC-by-PUF donor failed the ESI employer premium " + f"qualification: {exc} Pass --allow-esi-premium-gaps only for " + "a diagnostic build." + ) from exc + return str(exc) + return None + + +def _local_coverage_plan(*, esi_premiums: bool) -> TargetFamilies: + """Every input the lane's transfers owe the ACS spine.""" + + plan = { + entity: dict(families) + for entity, families in acs_local_transfer_target_families().items() + } + if esi_premiums: + local = acs_local_esi_premium_transfer_target_families() + for entity, families in local.items(): + plan.setdefault(entity, {}).update(families) + return plan + + +def _local_esi_premium_evidence( + result: AcsMultispineResult, + *, + period: int, + waiver: str | None, + allow_gaps: bool, +) -> dict[str, object]: + """Grade the employer premium on the pooled staging frame (microcosm#454). + + Both gates run on the frame the staging H5 is written from: the donor + rows get the MEPS-IC recomputation and the ACS rows are compared with + them. A red gate fails the build unless a diagnostic build waived it; the + verdicts are recorded either way. + """ + + signal, anchor = acs_local_esi_premium_gates(result.frame, time_period=period) + evidence: dict[str, object] = { + "enforced": not allow_gaps, + "transferred": waiver is None, + "donor_qualification_waived": waiver, + "provenance": result.provenance.get("local_esi_premiums"), + "signal_gate": acs_local_esi_premium_gate_payload(signal), + "anchor_gate": acs_local_esi_premium_gate_payload(anchor), + } + failures = [ + f"{gate.name}: {failure}" + for gate in (signal, anchor) + for failure in gate.failures + ] + if failures and not allow_gaps: + raise SystemExit( + "Local staging ESI employer premium gates failed: " + "; ".join(failures) + ) + return evidence + + def _audit_fits(result: AcsMultispineResult) -> dict[str, object]: records = result.fit_records if not records: @@ -930,6 +1036,7 @@ def _build_summary( "n_estimators": args.n_estimators, "max_targets_per_fit": args.max_targets_per_fit, "donor_channel": args.donor_channel, + "allow_esi_premium_gaps": bool(args.allow_esi_premium_gaps), "provenance": result.provenance, }, "weights_audit": weights_audit, diff --git a/tools/build_us_acs_local_release.py b/tools/build_us_acs_local_release.py index eaca029f7a..8e12dc446c 100644 --- a/tools/build_us_acs_local_release.py +++ b/tools/build_us_acs_local_release.py @@ -42,7 +42,8 @@ per-spine SSI incidence and intensity (the microcosm#403 signature, measured rather than assumed). finalize : release-style gate report (PUMA-ladder gate, calibration - gate, spine-composition evidence) + the reviewed-limitations + gate, both ESI employer-premium gates on the calibrated + artifact, spine-composition evidence) + the reviewed-limitations register for this lineage (inherited #507 SSI aged-band collapse, #393 miscellaneous-income defect, CD marginal vintage, ESS concentration, sparse-selection donor, mixed @@ -79,6 +80,10 @@ import pandas as pd from microcosm.build.us_runtime import target_loss_weights as loss_weighting +from microcosm.build.us_runtime.acs_local_esi_premiums import ( + acs_local_esi_premium_gate_payload, + acs_local_esi_premium_gates, +) from microcosm.build.us_runtime.acs_local_hours import acs_local_hours_signal_gate from microcosm.build.us_runtime.esi_premiums import refuse_unassigned_us_esi_premiums @@ -503,13 +508,15 @@ def fill_reviewed_nulls( Every registered (entity, column) has its NaN filled with the pe-us variable's own default; NaN in any engine-input column NOT in the register is a hard error with a per-spine diagnostic — an artifact - defect, surfaced not filled. The ESI employer premium input is never - filled, registered or not: a null there refuses the build. + defect, surfaced not filled. The ESI employer premium is never filled, + registered or not: a null there refuses the build. """ - # microcosm#454: the ESI employer premium exists only where the - # meps_esi_premiums stage ran (the ASEC donor rows). Refuse before any - # fill: a registered null here would become a silent zero on the ACS spine. + # microcosm#454: the staging build transfers the ESI employer premium onto + # the ACS spine and holds it to the donor rows' scale, so every row of a + # current staging frame carries it. A null means a staging H5 built before + # that. Refuse before any fill: a registered null here would become a + # silent zero on the ACS spine. refuse_unassigned_us_esi_premiums( frame, consumer="ACS local release (fill_reviewed_nulls)" ) @@ -2684,6 +2691,56 @@ def _require_local_hours(frame, staging_summary: dict) -> None: raise SystemExit("Local hours coverage failed: " + "; ".join(gate.failures)) +#: The lane's verdict on the ESI employer premium (microcosm#454), in the +#: gate report finalize writes and package requires. +ESI_PREMIUM_GATE_NAMES = ("esi_premiums_signal", "esi_premiums_anchor") + + +def _esi_premium_gate_entry(gate, *, artifact_sha256: str, enforced: bool) -> dict: + """One ESI premium verdict, bound to the artifact bytes it graded.""" + + payload = acs_local_esi_premium_gate_payload(gate) + return { + "passed": payload["passed"], + "failures": payload["failures"], + "detail": payload["details"], + "artifact_sha256": artifact_sha256, + "enforced": enforced, + } + + +def _require_esi_premium_gates(gates, *, h5_sha: str, allow_gaps: bool) -> None: + """Refuse to package without the lane's passing ESI premium verdict. + + Both gates must be present and bound to the bytes being packaged. A red + gate is refused unless this stage was also run with + ``--allow-esi-premium-gaps``; a report finalized before the gates existed + carries neither and is always refused. + """ + + for name in ESI_PREMIUM_GATE_NAMES: + gate = gates.get(name) if isinstance(gates, dict) else None + if not isinstance(gate, dict) or not isinstance(gate.get("passed"), bool): + raise SystemExit( + f"The finalize gate report carries no {name} verdict " + "(microcosm#454); an old simulation_ready summary is " + "insufficient. Re-run --stage finalize." + ) + if gate.get("artifact_sha256") != h5_sha: + raise SystemExit( + f"The {name} gate is missing its artifact binding or certifies " + "different H5 bytes. Re-run --stage finalize against the " + "current artifact." + ) + if gate["passed"] is not True and not allow_gaps: + raise SystemExit( + f"Packaging requires a passing {name} gate: " + + "; ".join(map(str, gate.get("failures") or ["no failure recorded"])) + + ". --allow-esi-premium-gaps packages a diagnostic build with " + "the red verdict recorded." + ) + + def do_finalize(args) -> None: from microcosm.build.us_runtime.hours_worked import ( US_HOURS_WORKED_POOL_OUTPUT_COLUMNS, @@ -2761,6 +2818,13 @@ def do_finalize(args) -> None: hours_gate = us_hours_worked_signal_gate( frame, required_columns=US_HOURS_WORKED_POOL_OUTPUT_COLUMNS ) + # microcosm#454: the lane's own verdict on the ESI employer premium, on + # the calibrated bytes. The donor rows get the MEPS-IC recomputation, the + # ACS rows are compared with them, and the anchor-universe total is held + # to the stage's national anchor at the calibrated weights. + esi_signal_gate, esi_anchor_gate = acs_local_esi_premium_gates( + frame, time_period=PERIOD + ) del frame gc.collect() if _sha256(args.out_h5) != hours_artifact_sha: @@ -2869,17 +2933,35 @@ def do_finalize(args) -> None: ), "detail": diagnostics.get("weight_origin"), }, + "esi_premiums_signal": _esi_premium_gate_entry( + esi_signal_gate, + artifact_sha256=hours_artifact_sha, + enforced=not args.allow_esi_premium_gaps, + ), + "esi_premiums_anchor": _esi_premium_gate_entry( + esi_anchor_gate, + artifact_sha256=hours_artifact_sha, + enforced=not args.allow_esi_premium_gaps, + ), "input_coverage": { - # Enforced upstream: the staging driver's donor-coverage gate - # hard-fails before transfer, so reaching finalize means it held. - "passed": True, + # The donor's own coverage is enforced upstream: the staging + # driver's donor-coverage gate hard-fails before transfer, so + # reaching finalize means it held. That says nothing about a + # required input on the ACS spine, so the one this lane produces + # there from a stage output, the ESI employer premium, is graded + # on this artifact by the two gates above. + "passed": bool(esi_signal_gate.passed and esi_anchor_gate.passed), "binds": "donor_certified_release", + "graded_on_artifact": ["esi_premiums_signal", "esi_premiums_anchor"], "note": ( "Input coverage is enforced on the certified donor release " "before transfer; the ACS spine inherits required inputs via " - "QRF transfer. ACS native GQ-housing / source-universe nulls " - "are reviewed_limitations (calibration_blocker: false) and " - "are NOT re-imposed on the ACS spine." + "QRF transfer. The ESI employer premium (microcosm#454) is " + "also graded on the calibrated artifact: esi_premiums_signal " + "and esi_premiums_anchor. ACS native GQ-housing / " + "source-universe nulls are reviewed_limitations " + "(calibration_blocker: false) and are NOT re-imposed on the " + "ACS spine." ), }, "spine_composition": { @@ -2933,6 +3015,12 @@ def do_finalize(args) -> None: ) if not gates[name]["passed"] ] + # --allow-esi-premium-gaps records a red ESI premium gate without failing + # a diagnostic build; the gate entries keep what was red. + if not args.allow_esi_premium_gaps: + hard_failures += [ + name for name in ESI_PREMIUM_GATE_NAMES if not gates[name]["passed"] + ] updated_summary = dict(staging_summary) updated_summary.update( { @@ -3160,6 +3248,14 @@ def do_package(args) -> dict: out_h5_sha256=h5_sha, stage="package", ) + # microcosm#454: the lane's verdict on the ESI employer premium must be + # in the report and bound to these bytes. A refusal leaves no release + # directory behind. + _require_esi_premium_gates( + gate_report.get("gates"), + h5_sha=h5_sha, + allow_gaps=args.allow_esi_premium_gaps, + ) code = _repo_code_identity(args.allow_dirty) timestamp = datetime.now(UTC).strftime("%Y%m%dT%H%M%SZ") @@ -3637,6 +3733,20 @@ def _parse_args(argv: list[str] | None = None) -> argparse.Namespace: help="Release root for --stage package (releases// lands here).", ) parser.add_argument("--allow-dirty", action="store_true") + parser.add_argument( + "--allow-esi-premium-gaps", + action="store_true", + help=( + "Diagnostic escape hatch (microcosm#454): record the ESI premium " + "gates on the calibrated artifact — " + "employer_sponsored_insurance_premiums absent, zero-mass, missing " + "on the ACS spine, missing its raw ASEC coverage columns, or off " + "the stage's national anchor — without failing finalize or " + "package (for example on a staging H5 built from a donor that " + "predates the meps_esi_premiums stage). The failures are still " + "written to the gate report. Release builds must leave this unset." + ), + ) parser.add_argument( "--allow-partial-geography", action="store_true", diff --git a/tools/graph_us_post_transfer_fixture.py b/tools/graph_us_post_transfer_fixture.py index fdf2316c44..8f773bff01 100644 --- a/tools/graph_us_post_transfer_fixture.py +++ b/tools/graph_us_post_transfer_fixture.py @@ -16,6 +16,11 @@ import pandas as pd import microcosm.build.us_runtime.puf_capital_gains_tail as tail_module +from microcosm.build.us_runtime.esi_premiums import ( + US_ESI_EMPLOYER_PREMIUM_COLUMN, + US_ESI_PREMIUMS_POOL_ANCHOR_PERSON_INPUTS, + US_ESI_PREMIUMS_WAGE_COLUMN, +) from microcosm.build.us_runtime.graph import us_post_transfer_graph, us_registry from microcosm.build.us_runtime.multispine_pool import ( derive_multispine_pool_inputs, @@ -59,13 +64,14 @@ / "us_post_transfer" ) _POOL_TOOL_TEST = ( - _REPOSITORY - / "packages" - / "microcosm-build" - / "tests" - / "test_us_multispine_pool_tool.py" + _REPOSITORY / "test_support" / "microcosm_build" / "us_multispine_pool_tool.py" ) _SAMPLE_SEED = 578 +ESI_RAW_EVIDENCE_COLUMNS = tuple( + column + for column, provision in US_ESI_PREMIUMS_POOL_ANCHOR_PERSON_INPUTS.items() + if provision == "assembled_raw_asec_source_evidence" +) _SOURCE_HOUSEHOLDS = 100 _NORMALIZED_STRING_COLUMNS: Mapping[str, tuple[str, ...]] = { @@ -74,6 +80,7 @@ _STRATA_SOURCE_COORDINATE = "person.__stratum__" _EXPECTED_COLUMNS = ( "person.schedule_d_capital_gain_distributions", + "person.employer_sponsored_insurance_premiums", "tax_unit.takes_up_eitc", "person.ssi", ) @@ -137,6 +144,9 @@ def _write_root_csv( def _pool_tool_test_helpers() -> ModuleType: + # The helpers import ``test_support`` by its repository-root package name. + if str(_REPOSITORY) not in sys.path: + sys.path.insert(0, str(_REPOSITORY)) name = "graph_us_post_transfer_pool_tool_test_helpers" spec = importlib.util.spec_from_file_location(name, _POOL_TOOL_TEST) if spec is None or spec.loader is None: @@ -217,6 +227,19 @@ def _post_transfer_prerequisites(frame: Frame) -> Frame: person.loc[person.index[0], "w2_wages_from_qualified_business"] = 100.0 person.loc[person.index[0], "unadjusted_basis_qualified_property"] = 200.0 + # ESI premiums: the ASEC row is an employed policyholder whose premium the + # stage assigned; the ACS row carries a premium the transfer drew and no + # raw coverage fields, so the derive stage's pool anchor rescales it. + asec = person["person_support_channel"].astype(str).eq("asec").to_numpy() + if asec.sum() != 1: + raise RuntimeError("Expected one ASEC and one ACS sampled spine row.") + for column in ESI_RAW_EVIDENCE_COLUMNS: + # The coverage codes and the CPS record id mark the row the stage + # derived; the anchor reads only whether they are present. + person[column] = np.where(asec, 1.0, np.nan) + person[US_ESI_PREMIUMS_WAGE_COLUMN] = np.where(asec, 50_000.0, 40_000.0) + person[US_ESI_EMPLOYER_PREMIUM_COLUMN] = np.where(asec, 8_000.0, 6_000.0) + # EITC is deliberately absent so seed owns a genuinely produced flag. # Every other contract cell is a dense incumbent and therefore exercises # amendment-8 rewrite projection and byte preservation. diff --git a/tools/modal_us_stage_plan.py b/tools/modal_us_stage_plan.py index 9a5cefeb23..7b274ee080 100644 --- a/tools/modal_us_stage_plan.py +++ b/tools/modal_us_stage_plan.py @@ -549,6 +549,9 @@ def _acs_local_release_argv( "batch": OptionFlag("--batch", int), "hh_chunk": OptionFlag("--hh-chunk", int), "allow_partial_geography": OptionFlag("--allow-partial-geography", bool), + # Diagnostic only (microcosm#454): finalize and package record a red + # ESI premium verdict instead of failing on it. + "allow_esi_premium_gaps": OptionFlag("--allow-esi-premium-gaps", bool), }, owned_flags=frozenset( { diff --git a/tools/spec_engine_coverage.py b/tools/spec_engine_coverage.py index d4b4e88283..4a8d9f9cf6 100644 --- a/tools/spec_engine_coverage.py +++ b/tools/spec_engine_coverage.py @@ -41,7 +41,7 @@ REPORT_SCHEMA_VERSION = 3 EXPECTED_POINTER_INVENTORY_SHA256 = ( - "e8d32da2dbdaa015cb4eb363084c66cf509a93dde76cd473113750120dcaef80" + "6528cd3fccca59895d28cfda9b0f8d4268ffbd8dafdebe0c3e8d76ddd0ade93e" ) DEFAULT_REPORT_PATH = ( Path(__file__).resolve().parents[1] diff --git a/tools/us_bundle_generation/core.py b/tools/us_bundle_generation/core.py index aa6448f100..7d6e47968c 100644 --- a/tools/us_bundle_generation/core.py +++ b/tools/us_bundle_generation/core.py @@ -1143,8 +1143,8 @@ def build_catalogs() -> dict[str, Any]: seen.add(key) if not deferred <= {key.split(".", 1)[1] for key in seen}: raise ValueError("Deferred pool inputs are absent from the generated catalog.") - if len(seen) != 176: - raise ValueError(f"Closed US catalog must contain 176 keys, got {len(seen)}.") + if len(seen) != 177: + raise ValueError(f"Closed US catalog must contain 177 keys, got {len(seen)}.") return { "metadata_waivers": [ { diff --git a/tools/us_bundle_generation/imputation.py b/tools/us_bundle_generation/imputation.py index 5e8a96bb37..849ee93aaf 100644 --- a/tools/us_bundle_generation/imputation.py +++ b/tools/us_bundle_generation/imputation.py @@ -2060,12 +2060,12 @@ def _assert_invariants( for family in families: by_stage.setdefault(str(family["stage"]), []).append(family) expected = { - "gap_fill_stacked_spine": (13, 48), + "gap_fill_stacked_spine": (14, 49), "primary_puf_qrf": (1, 65), "late_producer_dag": (19, 70), } expected_dtypes = { - "gap_fill_stacked_spine": {"bool": 20, "float": 27, "int": 1}, + "gap_fill_stacked_spine": {"bool": 20, "float": 28, "int": 1}, "primary_puf_qrf": {"bool": 8, "float": 55, "int": 2}, "late_producer_dag": {"bool": 17, "float": 50, "int": 1, "str": 2}, }