diff --git a/PROGRESS-spm-composition.md b/PROGRESS-spm-composition.md index 3d02f24051..15fe34fb26 100644 --- a/PROGRESS-spm-composition.md +++ b/PROGRESS-spm-composition.md @@ -31,6 +31,17 @@ review of #948): raises the "cannot be evaluated" `ValueError` (SKIPPED) instead of reporting every unit as offending. +> Historical note (2026-09-18): the state and "Next" sections below describe +> the first session. Part 2's design note shipped in PR #948 +> (`docs/us-spm-role-for-a-fresh-base.md`); Max chose its Option 1 (shape b) +> on 2026-09-18. The current state is in "Step 2" at the end of this file. + +> Historical note (2026-09-22): #948 merged into main on 2026-09-22 and #959 +> was retargeted to main and re-levelled on it. The 2026-09-21 hardening +> listed above (age bands, report cap, join guard) now lives in +> `us_runtime/spm_composition.py`, where #959 moved the check; the preflight +> runbook re-exports it. Check GitHub for #959's current state. + ## Measured on the phase-2 base (read-only, `~/PolicyEngine/_buildq-runtime/out/base-q3/`) 352,932 households / 907,382 persons / 367,306 SPM units. @@ -101,6 +112,120 @@ review of #948): branch. Item 2 was not decided here; it is the open question, and the tracking issue — not this file — is where its verdict belongs.* -1. Part 2 design note `docs/us-spm-role-for-a-fresh-base.md`. -2. Decide (a) declared-parent generalisation vs (b) source stage; implement (a) - in this PR if it closes without a decision from Max. +1. Part 2 design note `docs/us-spm-role-for-a-fresh-base.md`. — shipped in #948. +2. Decide (a) declared-parent generalisation vs (b) source stage. — Max chose + (b) on 2026-09-18; implemented on branch `us-spm-role-stage`, PR #959 (see + Step 2 below). + +# Step 2 — the role as a build-stage input leaf (2026-09-18) + +> Historical note (2026-09-19): this section records the earlier session. +> Implementation and actual-wrapper acceptance have since advanced; see the +> dated continuation at the end. Check GitHub for current PR/CI status. + +Branch `us-spm-role-stage`, cut from `spm-composition-preflight` at +`0e4b20de7` (PR #948's head, CI green on run 35346454375, mergeable). + +## State + +Step 1 (make #948 green) was already complete on arrival: the first session's +`0e4b20de7` fixed the seven red jobs' one cause (the gate-failure test's fake +frame lacked a schema; repaired in the fake, not the guard), and the rerun is +green on every job. Step 2 design reading done; proof scripts written; design +note next, then the stage. + +## Done + +- [x] Verified `gh pr checks 948` all pass on head `0e4b20de7`; mergeable. +- [x] Read at this head: `spm_role_source.py` (byte-identical to main), + `asec_pool.py`, `relationship_inputs.py`, `education_inputs.py` (sidecar + pattern), the adapter's two classification paths, the engine's + `DATASET_SOURCE_INPUTS` declaration, the enrichment lane's pins, the + coverage manifest generator, the bundle generator's frozen digests, the + raw ASEC inputs' columns (no vintage carries `SPM_HEAD`; only 2024 + carries `A_FAMTYP`/`A_FAMREL`). +- [x] Located every artifact the proofs need on disk: the three pinned Census + person CSVs (`~/.cache/microcosm/cps/asec_education/`), the Build P + parent (HF blob named by its pinned digest), the certified reference + evidence CSV (digest matches pin 5). +- [x] `experiments/spm_role_stage_proof.py` written (base + buildp receipts). + +## Next + +1. Run the two proofs (foreground), commit receipts. +2. `docs/us-spm-role-stage.md`. +3. Stage module + manifest + registries + adapter carve-out + coverage manifest + + export list + base/release tool wiring; regenerate every moved pin through + its generator; tests; changelog; draft PR. + +# Continuation — September 19, 2026 + +Resumed Claude's `us-spm-role-stage` at `cff157729599c41f7ccfdadf32145d9679ffe796` +and preserved its uncommitted fixture/doc/changelog work. Initial focused +battery: 442 passed. + +Independent source review found missing operator-boundary registration and +an impermissible synthesized default for the measured source role. Added +boundary rejection and a regression that failed before the fix. Source inputs +remain exportable but receive no generic default. The simulation projection +refuses an incomplete role, and its audit records 926 inputs / 925 defaults. +Existing role columns are now rederived and compared with the pinned Census +source, rather than trusted because they are nonconstant. Missing provenance +fails the signal gate. Regenerated engine/projection contracts with the +repository generator. + +Revised relevant battery: **936 passed**, one country-model divide warning, +167.45 seconds. CI test-group verification passes. Generated bundle/coverage +checks and Fable review are underway at this journal entry. + +The new `experiments/spm_role_stage_wrapper_proof.py` invokes the actual stage +and signal gate. Both pinned populations pass: Build P 166,321 persons, +28 unresolved units to zero; base-q3 907,382 persons, 222 to zero. Every role +matches the original derivation; Build P also reproduces the reference CSV +bytes. Every existing column/table/weight/stratum/mass log and every input +file remains unchanged. Receipts record exact source fingerprints and engine +versions. The two original direct-derivation receipts are unchanged. + +Remaining: complete generated-artifact checks and review; push a stacked draft +PR; integrate after acceptance. ACS-origin source roles, full-base calibration, +incumbent comparisons and release certification remain open. These proofs do +not establish a new released file. + +## Final wrapper verification and second review + +Fable reproduced a builder JSON failure caused by nested frozen provenance. +The first failing serialization regression is preserved outside the repository; +recursive conversion fixes it. The signal gate now checks provenance counts +and an ordered person/age/unit/role binding; it rejects integer roles and +returns a failed result for missing age. Both builder modes explicitly test +source-path forwarding, and the prepared-pool path tests its real refusal. +75 stage tests and 10 focused builder tests pass after these changes. + +The second Fable source review closed all eight original findings and reported +no new high or medium defect. Remaining scope notes about dtype-sensitive +bindings, historical pre-clone provenance and JSON-only metadata are in the +design note. Review did not substitute for execution. + +Final v2 wrapper proofs ran at clean committed source `6a6d53b2f`: all 166,321 +Build P and 907,382 base-q3 roles match, both gates pass and serialize their +complete details, all existing data are preserved. Peak RSS was 8.42 and +13.28 GiB respectively. Earlier receipts remain unchanged. Generated tests +found two stale golden counts: 38 source stages and 1,059 remaining input +rows (992 simulation rows); the generated lock was already correct. These +test expectations now follow the reviewed source addition. + +All nine selected generated-contract test files now pass across the focused +reruns. The final three-file run passed **300 tests in 556.47 seconds**; +earlier failure logs remain preserved and are not relabeled as green runs. +The bundle generator's `--check` passes at spec SHA `c1893460afccc6c1c4291efe2fc4d6091f60a15079043882dfbfd2bbc09e7e00`; +coverage is 42,174/42,174 fields and 41/41 inventory checks. Ruff and test-group +verification pass. Draft #959 is stacked on #948; the main-only CI workflow +does not run on that stacked base, so local checks are not a PR CI claim. + +> Historical note (2026-09-23): after the re-level, `47976be6c` added an +> archive reader to `spm_role_source.py`. The note's claims that the file is +> "byte-identical to main" and that "earlier receipts remain unchanged" +> describe the state before that commit and before the 2026-09-23 unit-id +> redaction of the two derivation receipts. `docs/us-spm-role-stage.md` §2 +> ("The archive reader") and §6 record both. Check GitHub for #959's current +> state. diff --git a/changelog.d/893-spm-independence-role-stage.added.md b/changelog.d/893-spm-independence-role-stage.added.md new file mode 100644 index 0000000000..b593449dfc --- /dev/null +++ b/changelog.d/893-spm-independence-role-stage.added.md @@ -0,0 +1 @@ +Add the `spm_independence_role` US build stage: restore the engine's one declared dataset source input, `is_spm_independent_minor_role`, on a base built from raw sources by exact income-year/PERIDNUM identity from the pinned complete Census ASEC person files through the certified `derive_spm_role_source`, fail closed on a missing source column, a unit with more or fewer than one SPM head, an unmatched person, or a unit left without a classified adult, and classify the role as an input leaf in both engine-adapter paths from `policyengine_us.spm.DATASET_SOURCE_INPUTS` so the export persists it. diff --git a/docs/evidence/spec-engine/us-f0-coverage.json b/docs/evidence/spec-engine/us-f0-coverage.json index f1fae18494..9e3634d5ce 100644 --- a/docs/evidence/spec-engine/us-f0-coverage.json +++ b/docs/evidence/spec-engine/us-f0-coverage.json @@ -4,9 +4,9 @@ "version": 1 }, "country": "us", - "documentation_sha256": "177ac92f6c70d9eca47fbce8642ecf0d8d80eb9a02745824bfa91fc39089d102", + "documentation_sha256": "911b21d13cc214601cfb537c538fed2851e5166e8f72de5ebfce5f2918af43d3", "field_usage": { - "authored_normative_field_count": 32390, + "authored_normative_field_count": 32400, "claim_count": 49, "claims": [ { @@ -514,8 +514,8 @@ ], "mode": "legacy_behavior", "pointer_class": "all", - "pointer_count": 1702, - "pointer_sha256": "be3e24b53955b9dabccfc7e779212b1e97daf0c0992be3c183e391bf695ed4ee", + "pointer_count": 1712, + "pointer_sha256": "a46d5e657d919db23ee7752d844bd8bbe59c15321dec07102837452d7994d8dd", "rationale": null, "relative_sink_prefix": "/source_manifest/stages", "source_prefix": "/authored/spec~1sources.yaml/stages", @@ -722,8 +722,8 @@ ], "mode": "legacy_behavior", "pointer_class": "all", - "pointer_count": 8606, - "pointer_sha256": "3f20975597d93f7313583a944eeb9d6437651c4ff20e67628bf6bf4c5aa9f004", + "pointer_count": 8614, + "pointer_sha256": "66eec1216f404e43f7605fba0016d1cd666e71ebe3e35278d14a944d8b48b619", "rationale": null, "relative_sink_prefix": null, "source_prefix": "/resolved/generated_authorities", @@ -772,21 +772,21 @@ "verifier": "vintages" } ], - "configuration_field_count": 42162, - "consumed_field_count": 42162, + "configuration_field_count": 42180, + "consumed_field_count": 42180, "generation0_effect_counts": { - "legacy_behavior": 38476, + "legacy_behavior": 38494, "no_generation0_effect": 3686 }, "mode_counts": { "compiler_semantic": 27717, "front_end_validation": 354, "identity_only": 103, - "legacy_behavior": 13988 + "legacy_behavior": 14006 }, "multiple_primary_use_field_count": 0, - "pointer_inventory_sha256": "8b9791cd74909a425279206bddab17c8c9c1f7a5600c75c4bcf81de35311acf5", - "resolved_binding_field_count": 9772, + "pointer_inventory_sha256": "21b6fe2f6b96307f8ec7d20d4162ee2e0702f363bb28ebd3fa47a4cf7fc12ed4", + "resolved_binding_field_count": 9780, "unused_field_count": 0 }, "inventory_coverage": { @@ -820,7 +820,7 @@ "seed_sites": 53, "seed_streams": 14, "source_operators": 16, - "source_stages": 37, + "source_stages": 38, "stacked_checkpoint_full_components": 13, "stacked_checkpoint_pool_code_components": 19, "stacked_checkpoint_static_components": 10, @@ -1361,12 +1361,12 @@ ], "expected": { "producer_count": 38, - "sha256": "895ffd419de464a761669a5c3bf68db66e3d1a273c47631de80778a6c7f73b57" + "sha256": "2c51a57c2265a41503e048c2acecd2ae84871e870f2b7e84d46c13129041e551" }, "failures": [], "observed": { "producer_count": 38, - "sha256": "895ffd419de464a761669a5c3bf68db66e3d1a273c47631de80778a6c7f73b57" + "sha256": "2c51a57c2265a41503e048c2acecd2ae84871e870f2b7e84d46c13129041e551" }, "status": "covered" }, @@ -1656,13 +1656,13 @@ "compiler_ir.node_slices" ], "expected": { - "map_sha256": "2db648c8740ce0713f52e34b46e764056f91c59c1754b8d553998f41ba831a6b", - "protocol_sha256": "0f6c58a987c54f7a129c325d4ddef449890f0f73cb140ec859dff806ccbe4f1a" + "map_sha256": "a6feafaf62ed99b4f3fa9fee32e986f83919aed7335848df6470db6ecd17987d", + "protocol_sha256": "45f82554869c7a966b3c12b71edab43a6c887806b0fc6e70cd7598e62f375922" }, "failures": [], "observed": { - "map_sha256": "2db648c8740ce0713f52e34b46e764056f91c59c1754b8d553998f41ba831a6b", - "protocol_sha256": "0f6c58a987c54f7a129c325d4ddef449890f0f73cb140ec859dff806ccbe4f1a" + "map_sha256": "a6feafaf62ed99b4f3fa9fee32e986f83919aed7335848df6470db6ecd17987d", + "protocol_sha256": "45f82554869c7a966b3c12b71edab43a6c887806b0fc6e70cd7598e62f375922" }, "status": "covered" }, @@ -1677,7 +1677,7 @@ "compiler_ir.seed_stream_map" ], "expected": { - "implementation_sha256": "0f6c58a987c54f7a129c325d4ddef449890f0f73cb140ec859dff806ccbe4f1a", + "implementation_sha256": "45f82554869c7a966b3c12b71edab43a6c887806b0fc6e70cd7598e62f375922", "protocol": "legacy-v1", "streams": [ "build_model", @@ -1698,7 +1698,7 @@ }, "failures": [], "observed": { - "implementation_sha256": "0f6c58a987c54f7a129c325d4ddef449890f0f73cb140ec859dff806ccbe4f1a", + "implementation_sha256": "45f82554869c7a966b3c12b71edab43a6c887806b0fc6e70cd7598e62f375922", "protocol": "legacy-v1", "streams": [ "build_model", @@ -1775,13 +1775,13 @@ "legacy_adapter.imputation.late_producer_resource_semantics" ], "expected": { - "sha256": "d6849714bb9d6f64c000193a871c324b6b82850100db6cb3196f5f6e417dc494", + "sha256": "a87278445d928ea20e15935a8cc07312d6e819e34409b04e8c814f17910d828f", "stages": 37 }, "failures": [], "observed": { - "sha256": "d6849714bb9d6f64c000193a871c324b6b82850100db6cb3196f5f6e417dc494", - "stages": 37 + "sha256": "a87278445d928ea20e15935a8cc07312d6e819e34409b04e8c814f17910d828f", + "stages": 38 }, "status": "covered" }, @@ -1887,7 +1887,7 @@ "alpha", "zeta" ], - "sha256": "c66844ca246fb0277e648691a91fe7bea2a21c26980b398017af90f3128521c5" + "sha256": "25d41aa00362261774ec88bd87f65a1c72c24eb407fcf2c517b8795c7220bdb2" }, "failures": [], "observed": { @@ -1911,7 +1911,7 @@ "alpha", "zeta" ], - "sha256": "c66844ca246fb0277e648691a91fe7bea2a21c26980b398017af90f3128521c5" + "sha256": "25d41aa00362261774ec88bd87f65a1c72c24eb407fcf2c517b8795c7220bdb2" }, "status": "covered" }, @@ -1975,7 +1975,7 @@ "take_up_contract", "us_qbi_reconciliation_contract" ], - "sha256": "7fc5e7d72ba465cae5b7cc80f042c1b82c756b0a74c1ba4ebc1ed3d99e88d10d" + "sha256": "1794b6cccfdc5a88c5eb9075fbff036c29259ec14bb5f6ad1422654dc7b2a4c9" }, "status": "covered" }, @@ -2599,7 +2599,7 @@ "country": "us", "schema_id": "country_spec", "schema_version": 1, - "spec_sha256": "77e8def60119df8f290b40b95ee477c3830848bc7f48b6ca3efd9f9d6fcf5414" + "spec_sha256": "1c46dda9cff4e53e5a44c6502a46fa695d02d92731f23d618616a892071d4841" } }, "report_schema_version": 3, @@ -2609,7 +2609,7 @@ "country": "us", "schema_id": "country_spec", "schema_version": 1, - "spec_sha256": "77e8def60119df8f290b40b95ee477c3830848bc7f48b6ca3efd9f9d6fcf5414" + "spec_sha256": "1c46dda9cff4e53e5a44c6502a46fa695d02d92731f23d618616a892071d4841" }, "status": "pass" } diff --git a/docs/us-spm-role-for-a-fresh-base.md b/docs/us-spm-role-for-a-fresh-base.md index d135f119f9..2bed609ddc 100644 --- a/docs/us-spm-role-for-a-fresh-base.md +++ b/docs/us-spm-role-for-a-fresh-base.md @@ -4,6 +4,33 @@ Every claim here was read at `spm-composition-preflight`'s head, which is `origin/main` `d1196af10` plus this branch. The installed engine is policyengine-us 2.2.1 / spm-calculator 1.0.0 / policyengine-core 3.32.5. +> Dated note (2026-09-23): this note records the state before PR #959, which +> implements its recommendation, Option 1, shape (b). The current design is in +> [`docs/us-spm-role-stage.md`](us-spm-role-stage.md). With #959 merged: +> +> - The `spm_independence_role` build stage derives the role for a base built +> from raw sources. It runs before support cloning, and the release tool +> re-derives and reconciles it for an older base. +> - The adapter classifies the role as an input leaf, by the engine's +> `DATASET_SOURCE_INPUTS`. The table in §4 that marks the role not +> exportable, and the generated audit's `formula_owned=True`, describe the +> adapter before #959. +> - The release requires the role. It is in the release input-coverage +> manifest with no reviewed exclusion, it is a required non-constant person +> source column in the export, and the role's signal gate must pass. No +> release ships on the head-only fallback. A frame without a sourced role is +> refused; for example, a prepared stacked pool fails the role's signal gate +> before calibration. +> - "A requirement that is missing today" (§1) was already wrong when +> written: `_reconcile_units` has refused an unresolved zero-adult SPM unit +> since `43171405d`. +> - "The existing Build P enrichment lane is untouched and stays +> byte-identical" (§5) no longer holds for one producer file. +> `spm_role_source.py` gained an archive reader in `47976be6c`. The rule, +> the join, the refusals and the extracted-CSV path are unchanged, but the +> file's hash is one the lane's producer-identity check compares. See +> `docs/us-spm-role-stage.md` §2, "The archive reader". + ## The problem in one paragraph `spm-calculator` 1.0.0 refuses the **whole population's** SPM measurement if diff --git a/docs/us-spm-role-stage.md b/docs/us-spm-role-stage.md new file mode 100644 index 0000000000..a552cbbedd --- /dev/null +++ b/docs/us-spm-role-stage.md @@ -0,0 +1,447 @@ +# The SPM independence role as a build-stage input leaf + +Every claim here was read at `us-spm-role-stage`'s head, cut from +`spm-composition-preflight` at `0e4b20de7` (PR #948, CI green on run +35346454375). The installed engine is policyengine-us 2.2.1 / +spm-calculator 1.0.0 / policyengine-core 3.32.5. This note implements the +decision Max took on 2026-09-18 ("sure we can take your rec on spm"): +`docs/us-spm-role-for-a-fresh-base.md` Option 1, shape (b). Build P's post-hoc +enrichment lane (`tools/build_us_spm_role_enrichment.py`, +`microcosm.data.source_enrichment`) stays pinned to Build P, and its driver and +validator are untouched. One of its producer source files is not: `47976be6c` +added an archive reader to `us_runtime/spm_role_source.py`. The reader, and +what it means for the lane's producer-identity check, are in §2 under "The +archive reader". + +## 1. Where the rule's columns enter the pool today, and where they are dropped + +`SPM_ROLE_RULE = "SPM_HEAD == 1 OR (A_FAMTYP in {1,4} AND A_FAMREL in {1,2})"` +(`us_runtime/spm_role_source.py`). The rule needs three ASEC person fields. + +**They never enter.** The raw inputs the pool is built from are the three +frozen `census_cps_{2022,2023,2024}.h5` files whose paths and digests base-q3's +`summary.json` records under `base_source.sources`. Read at this head: + +| raw input | person columns | `SPM_HEAD` | `A_FAMTYP` | `A_FAMREL` | `SPM_ID` | `PERIDNUM` | `SPM_HAGE`, `SPM_NUMADULTS`, `SPM_NUMKIDS`, `SPM_NUMPER` | +|---|---|---|---|---|---|---|---| +| `census_cps_2022.h5` | 137 | no | no | no | yes | yes | yes | +| `census_cps_2023.h5` | 138 | no | no | no | yes | yes | yes | +| `census_cps_2024.h5` | 162 | **no** | yes | yes | yes | yes | yes | + +So there is nothing to "drop": `SPM_HEAD` is absent from every vintage, and +`A_FAMTYP`/`A_FAMREL` exist only in the 2024 file. `asec_pool.py` carries every +raw person column through `pool_asec_sources` unchanged (it adds +`source_year`, `source_household_id`, `source_person_id` = `PERIDNUM`, +`source_row_id`, remaps `PH_SEQ`/`household_id`, and makes `SPM_ID` pool-global +in `_globalize_source_unit_column`), and `assign_us_unit_structure` keeps them. +That is why the phase-2 base still carries `A_FAMTYP`/`A_FAMREL` with 66.9 % +nulls and no `SPM_HEAD` at all (`experiments/893-spm-composition-base-q3-receipt.json`). +The pool-global `SPM_ID` pattern the brief points at is exactly what +`derive_spm_role_source` relies on: it refuses to compare remapped IDs and +instead reconstructs source membership through `(source_year, PERIDNUM)`. + +**Where they do exist:** the pinned complete Census ASEC person CSVs +(`pppub23.csv`, `pppub24.csv`, `pppub25.csv`, income years 2022-2024), pinned in +`education_assistance_source.ASEC_EDUCATION_ASSISTANCE_ARCHIVES` and re-exposed +as `spm_role_source.ASEC_SPM_ROLE_SOURCES`, cached by +`fetch_asec_education_assistance_source` under +`~/.cache/microcosm/cps/asec_education/`. The base builder already restores raw +columns from these CSVs by exact `(source_year, PERIDNUM)` join +(`_asec_raw_source_mapping_frame`: `LKWEEKS`, `ED_VAL`, `PAW_TYP`), and the +education and public-assistance stages consume them as sidecars. The role is +the same class of repair: a measured Census field the frozen H5 inputs never +carried, restored by exact Census identity, never predicted. + +## 2. The model stage, and what the new one copies from it + +`us_runtime/relationship_inputs.py` is the model: + +- a manifest stage (`source_stages.json` `relationship_inputs`: `read_table + person` → `derive_relationship_inputs`) loaded by + `us_relationship_inputs_stage_spec()`, which refuses a manifest whose outputs + differ from the runtime-owned tuple; +- a handler `derive_us_relationship_inputs_from_manifest` that refuses the + wrong operation kind, a missing person table, unsupported parameters, a + missing raw column, a non-integer code, and a household without exactly one + `P_SEQ == 1`; +- `with_us_relationship_inputs(frame, *, seed, time_period)` with an + idempotence guard (`_relationship_surface_carries_signal`: outputs present + and each carries more than one distinct value), `run_source_stage`, alignment + on `person_id`, a coverage refusal, and a new `Frame`; +- `us_relationship_inputs_summary` and `us_relationship_inputs_signal_gate` + (a `GateResult` with share bands and structural invariants); +- registration in `us_source_operation_handlers`, `US_DONORS`, + `US_STAGE_NAMES`, `source_manifest.ALLOWED_SOURCE_OPERATION_KINDS`, + `spec_engine/schema/sources.schema.json`, `operator_boundary`, + `l0_refit_export.US_RELEASE_REQUIRED_PERSON_SOURCE_COLUMNS`, + `release_input_coverage`, and both build tools. + +`us_runtime/spm_independence_role.py` copies that shape. Differences, each +deliberate: + +- **The derivation body is a call into `derive_spm_role_source`, unchanged.** + The handler projects the person table's identity, age and Census count + columns (plus whichever of the optional raw fields the frame carries) and the + `spm_unit` table into a temporary H5, hashes it, and calls the certified + derivation with that digest as `expected_parent_sha256`. Nothing about the + rule, the join, or the refusals is re-implemented. `spm_role_source.py` was + byte-identical to `origin/main` until `47976be6c`, which added only the + archive reader described below; the rule, the join, the refusals and the + extracted-CSV path are unchanged. The projection is the derivation's only + input, so the `dataset_sha256` in its provenance names the projection, and + the stage's summary records it as `frame_projection_sha256`. Since the + re-level onto `main` (2026-09-23) the projection is written by + `_write_role_projection` through the shared nullable-boolean boundary + (`microcosm.frame.put_frame_table`, pandas fixed format), registered as the + `spm_role_derivation_projection` serializer in + `microcosm.build.frame_serializer_registry`, because `main` forbids a bare + `DataFrame.to_hdf` sink. The derivation still reads it with `pd.read_hdf`. + Neither writer produces byte-identical files across runs (measured on a + small synthetic table), so the digest binds the projection within one run; + the receipts' `frame_projection_sha256` values were never reproducible + bytes. `pd.read_hdf` returns tables equal to the ones written under both + writers (same synthetic check), and the derivation sees only those tables. +- **The source is a set of pinned source paths, not a loaded sidecar.** Each + path is either the official Census survey archive (`asecpub23csv.zip`, + `asecpub24csv.zip`, `asecpub25csv.zip`) or the person CSV extracted from it + (`pppub23.csv`, `pppub24.csv`, `pppub25.csv`). The derivation verifies the + source itself, so a DataFrame handed in would bypass that. Paths reach the + handler through `SourceRuntimeConfig.extra["asec_spm_role_source_paths"]`, + keyed by income year, exactly the `--asec-education-source INCOME_YEAR=PATH` + vocabulary. The base builder passes whatever `--asec-education-source` + names; the 2026-09-23 base run names the three archives. A year without a + path is fetched and verified by `fetch_asec_education_assistance_source`, + which returns the extracted CSV; that is the release tool's path. +- **Two tables, not one.** The stage runs with `tables={"person": .., + "spm_unit": ..}` because the derivation requires that SPM membership exactly + covers the SPM table. + +### The archive reader (`47976be6c`) + +`--asec-education-source` has always accepted either the archive or its +extracted member (`education_assistance_source._load_one_source` reads both), +but `spm_role_source._load_source` read only a CSV. A base run that named the +archives would have refused the role at the CSV byte-length check. `47976be6c` +makes the derivation accept both forms, keyed on `zipfile.is_zipfile(path)`: + +- **Archive** (`_read_archive_member`): the archive's SHA-256 must equal the + pinned `archive_sha256`; the archive must hold exactly one member named the + pinned `member`; that member's declared size must equal `csv_size_bytes` and + its streamed SHA-256 must equal `csv_sha256`; the member is then read with + the same `pd.read_csv` call the CSV path uses; and the archive is re-hashed + after reading. The pins are the existing + `ASEC_EDUCATION_ASSISTANCE_ARCHIVES` values, so no new pin was introduced. +- **Extracted CSV**: unchanged statement for statement — size check, SHA-256 + check, the same read, and the post-read SHA-256 check. The only edit on this + path is that the `pd.read_csv` call moved into `_read_source_columns`, which + both paths share. + +Everything after the read (person count, key, missing-value, integer, role, +reconciliation and unit-count checks) is shared and unchanged. In an +independent review on 2026-09-23 (a local run, not a committed receipt), the +archive and the extracted CSV gave equal frames and equal source checks for +each of the three pinned vintages: 146,133 / 144,265 / 142,125 persons and +59,181 / 58,711 / 58,147 units. `test_us_spm_role_source.py` pins, on a +synthetic fixture, that the two forms derive identical roles, evidence and +provenance, and that an unpinned archive, an archive without the pinned +member, and a member with the wrong size or SHA-256 are each refused. + +**Consequence for the Build P lane's producer identity.** `spm_role_source.py` +is one of the six files in `source_enrichment.PRODUCER_SOURCE_FILES`. +`_check_producer_source_identity` requires each listed file, in the checkout +running certification or publication, to hash to the value the candidate's +build manifest recorded. A native-SPM-role candidate built before `47976be6c` +recorded the old hash (`a6cb7a9d…`), so certifying or publishing it from a +checkout that contains this change is refused +(`producer checkout source differs from recorded hash`). This does not create +the requirement. `populace-us-2024-spm-20260915` recorded producer commit +`743683b0e`, and `source_enrichment.py` and `contract.py` have already +changed on `main` since that commit. The candidate therefore already had to be +re-validated from a checkout at its recorded producer commit. That is how +its 2026-09-15 recertification ran: every certify, validate and publish +command runs from a clean worktree detached at `743683b0e`, the commit its +build manifest records. The role vector and the H5 bytes do not depend on +this change: the CSV path is unchanged, and the lane's builder reads the +extracted CSVs. + +### The fail-closed gates + +All of these already exist inside `derive_spm_role_source` and fire as +`ValueError`; the handler re-raises derivation and filesystem failures as +`SourceRuntimeError` prefixed with the stage name, and adds its own column +check first so the message names the stage. Read from `spm_role_source.py`: + +| refusal | where | +|---|---| +| a required person or SPM column is absent | `_require_columns(parent, required, ...)`; the stage checks the same tuple first | +| a person has no ASEC origin (no exact 22-digit `PERIDNUM`, or no join) | `_exact_person_keys`; `"Source join has unmatched parent persons."` | +| a native SPM unit repeats a source person, or mixes two source units | `"Native SPM unit repeats a source person."`, `"... combines distinct source units."` | +| an SPM unit has more or fewer than one `SPM_HEAD` | `_reconcile_units`: `units.heads.eq(1).all()`, on the source CSV **and** on the frame's native units | +| any SPM unit still has no classified adult after the role | `_reconcile_units`: `units.adults.ge(1).all()` — `"has an unresolved zero-adult SPM unit."` | +| derived adult/child/person counts disagree with Census's own `SPM_NUMADULTS` / `SPM_NUMKIDS` / `SPM_NUMPER` | `_reconcile_units` count reconciliation, again on both sides | +| a raw field the frame carries disagrees with the pinned CSV | `_REQUIRED_RAW_CHECKS` / `_OPTIONAL_RAW_CHECKS` equality | +| the CSV or archive changed while being read; the projection changed while deriving | the pre/post digest checks | +| an archive is not the pinned one, lacks exactly one pinned member, or its member's size or SHA-256 differs from the CSV pins | `_read_archive_member` (`47976be6c`) | + +The earlier note said the zero-adult invariant was "missing today". That was +wrong: `_reconcile_units` has enforced `adults >= 1` since `43171405d`. What +`minor_only_units_resolved` counts is still the number that *needed* resolving, +and the stage's gate reports it beside the number that *remain* (always zero +when the stage returns). + +The stage's own gate (`us_spm_independence_role_signal_gate`) then checks the +frame it produced: derivation provenance counts and the ordered +person/age/unit/role fingerprint agree with the current frame; the column is +present, Boolean-valued, and not degenerate; +`check_spm_composition` on the frame reports zero units without a classified +adult with `role_source == "source_column"`; and two plausibility bands taken +from the three pinned vintages — the role share among all persons (measured +0.601–0.603 per vintage on the phase-2 base, 0.567 on Build P; band 0.40–0.75) +and among 15-to-17-year-olds (measured 1.49 %–1.73 % per vintage; band +0.3 %–6 %). + +## 3. How clones and ACS-origin rows inherit the role + +**Support clones.** The lane measured that all 907,382 persons on the phase-2 +base carry a 22-digit `PERIDNUM`, including the 474,859 `puf_tax_detail` +clones. `clone_us_frame_for_puf_support` copies the person table into the two +channels, so a clone carries its source person's `source_year` and `PERIDNUM` +and joins the same CSV row. `derive_spm_role_source` merges with +`validate="many_to_one"`: a source person may repeat *across* native units (the +clone case) and is refused *within* one native unit. The receipt confirms it: +432,523 distinct source persons, **zero** with disagreeing clone roles. + +Placement makes this moot for the base builder: the stage runs in +`pre_clone_enrichment`, immediately after `relationship_inputs`, on the +ASEC-only frame; cloning then copies the Boolean. It also runs correctly +post-clone (the phase-2 receipt is a post-clone frame), which is what the +release tool's `pool_frame is None` path relies on for a base built before the +stage existed. An existing role is reconciled with the pinned CSV again: +null, non-Boolean or disagreeing observations are refused, and equal roles +are preserved with renewed derivation provenance. Merely carrying a +nonconstant column never bypasses the source checks. + +The metadata describes the stage input/output population at derivation time. +Cloning copies that historical metadata; its counts and binding do not attest +the expanded population until the wrapper runs again. The release path does +that before applying the role gate. The binding includes row order and pandas +value representation, so dtype conversions also require renewed derivation. +It is not a storage-independent semantic hash or a certificate for arbitrary +selected frames. The derivation's metadata contract contains JSON values; +set-valued provenance is outside that contract. + +**ACS-origin rows.** These exist only in the production stacked pool +(`tools/build_us_multispine_pool.py`, `docs/us-multispine-operator-ordering.md`): +`acs_inputs.py` derives `is_household_head` for them from `RELSHIPP == 20`, and +they carry no `PERIDNUM`. The stage cannot deliver a role to them, and it must +not: `policyengine_us/spm.py` says the source declaration "does not permit +synthesizing a default value when data are absent", and the brief says never +to invent an adult where the source delivers none. So the stage **refuses** a +frame with any person lacking an ASEC origin (the unmatched-person refusal), +and this PR does **not** add it to `multispine_pool.POOL_SOURCE_OPERATOR_ORDER`. +The pool's phase-3 contract ("historical kernels run on the raw-`PERIDNUM` +CPS/ASEC availability projection and merge only their declared outputs back") +would let the stage run on the ASEC projection; what value the ACS rows then +carry is a decision (§7). + +## 4. The adapter carve-out, driven by the engine's declaration + +> Dated note (2026-09-23): the two numbered paths below describe the adapter +> as it was on `main` before this PR. With this PR merged, both classify the +> role as an input leaf, as described after them. The live engine's +> `variables()` lists it, `formula_owned_outputs()` and +> `_engine_computed_columns()` do not flag it, and `write_dataset` persists it +> when the frame carries it. The generated metadata index records it +> `formula_owned=False`. `default_values()` returns no default for it. The +> release requires it with no reviewed exclusion. + +Before this PR, two classification paths refused the role, and the release +tool used both: + +1. **the live engine** (`PolicyEngineUSEngine`): `variables()`, + `formula_owned_outputs()` and `_engine_computed_columns()` classify with + `_is_engine_computed(variable)`, which is true for any variable carrying a + formula — and `is_spm_independent_minor_role` carries the fallback formula + `is_household_head | is_household_spouse` + (`spm_calculator/policyengine_adapter.py`). `write_dataset` refuses it; + `_engine_input_variables()` in the release tool excludes it. +2. **the import-free metadata index** (`PolicyEngineUSVariableMetadataIndex`), + which the release tool's `_assert_no_formula_owned_columns` uses: the + generated audit block `_GENERATED_VARIABLE_GROUPS` pins the role + `formula_owned=True`. + +The engine's own contract says the opposite about ownership: +`policyengine_us/spm.py` declares +`DATASET_SOURCE_INPUTS = frozenset({"is_spm_independent_minor_role"})` — "A +population producer must retain its observed boolean instead of treating the +fallback formula as ownership of the input." It is not in +`FORMULA_OWNED_INPUTS`, and `SPMSimulationMixin.set_input` rejects only +`REJECTED_DATASET_INPUTS`. (The earlier note said the engine asserts the two +sets disjoint; it does not — there is no assertion in `spm.py`. The carve-out +makes that check itself.) + +The carve-out reads that declaration in both paths and never a name list of +microcosm's own: + +- **live engine:** `_engine_dataset_source_inputs(policyengine_us)` imports + `policyengine_us.spm`, requires `DATASET_SOURCE_INPUTS` to be a non-empty + `frozenset` of strings disjoint from `REJECTED_DATASET_INPUTS`, and returns + it; `variables()`, `formula_owned_outputs()` and `_engine_computed_columns()` + treat those names as input leaves. +- **default filling:** source-deliverable names are excluded from + `default_values()`. The disposable simulation projection refuses a present + but incomplete role instead of replacing missing observations with `False`. + Its audit records the role as required source data with no default; the + stacked pool remains unqualified to supply that source input for release. +- **metadata index:** the snapshot is regenerated by + `tools/refresh_us_generated_variable_audit.py`, which now reads the same + declaration off the imported engine, emits `formula_owned=False` for a + declared source input, and pins `spm.py` as a policyengine-us *activation* + file — so an upstream change to the declaration fails the audit closed until + it is reviewed and regenerated. The generated block is never hand-edited. + +## 5. What moves, and through which generator + +| artifact | why it moves | generator / procedure | +|---|---|---| +| `packages/microcosm-frame/.../adapters/policyengine_us.py` generated audit block | role becomes an input leaf; `spm.py` pinned | `tools/refresh_us_generated_variable_audit.py` | +| `test_policyengine_us_metadata_index.py` sets and counts | one name changes class | observed values from the failing assertions (no generator) | +| `us/source_stages.json` (authored) → `us/spec/sources.yaml`, `country_package.json`, `engine_abi.lock.json` | new stage; role becomes an engine input, so the remaining-stage input manifest gains a row | `tools/generate_us_bundle_from_constants.py`; the frozen `source_stages.json` digest in that tool and its two pin tests (`test_us_bundle_core_contracts.py`, `test_us_spec_bundle.py`) take the observed digest, as in `afaffae26` | +| `spec_engine/schema/sources.schema.json` | new operation kind | authored `oneOf` entry beside `derive_relationship_inputs` | +| `multispine_pool` engine contracts | +1 installed simulation input | `tools/repin_us_pool_engine_contracts.py` | +| `us/release_input_coverage_manifest.json` | role required | `tools/build_us_release_input_coverage_manifest.py` after adding it to `POST_REFERENCE_ECPS_REQUIRED_INPUTS` (module and tool) | +| seed-protocol / seed-map digests, `us-f0-coverage.json`, loader golden, `test_us_multispine_pool_tool.py` `spec_sha256`, `field_usage` counts, pointer-inventory digest | `us_runtime.source_runtime` is on `_DIRECT_KERNEL_MODULES`, and the bundle gains authored fields | `tools/spec_engine_coverage.py`; `EXPECTED_HASHES` and the count constants take observed values | +| `l0_refit_export.US_RELEASE_REQUIRED_PERSON_SOURCE_COLUMNS` and its test fixture | role required non-constant in the export | authored | +| `SPM_COMPOSITION_REMEDY`, `_spm_composition_report` docstring | remedy (a) now names the stage; the "cannot be written" sentence becomes false. On 2026-09-23 the former remedy (b), carrying only `is_household_head` / `is_household_spouse` for the engine's fallback, was restated as not a release remedy, because the release now requires the source role | authored | + +Not moved: `source_enrichment.py`, `build_us_spm_role_enrichment.py` and +`h5_enrichment.py` (the Build P lane's driver, validator and writer); the +multispine pool operator order and its registries; and `asec_checkpoint.py` +(no raw column is materialized on the frame). + +Moved once, late: `spm_role_source.py`. It was unchanged through the re-level, +but `47976be6c` added the archive reader so the derivation reads the archives +the base stage passes. That makes it the one Build P lane producer file this +PR changes. See "The archive reader" in §2 for what changed and for the +consequence for `_check_producer_source_identity`. + +## 6. Proof + +The original receipts below exercise `derive_spm_role_source` directly through +`experiments/spm_role_stage_proof.py`. They prove source derivation and +composition repair, but do not exercise the new stage wrapper, temporary +projection, provenance transport or weighted signal gate. Wrapper acceptance +is recorded separately. These historical receipts are preserved except for +one redaction on 2026-09-23. Each receipt's `before` and `after` blocks +listed up to 20 internal `spm_unit_id` values of minor-only SPM units +(`offending_unit_ids_reported`). They now carry only the count +(`n_offending_units_reported`: 20 before, 0 after), as +`experiments/893-spm-composition-base-q3-receipt.json` does, and +`spm_role_stage_proof.py` now emits the count. Each redacted receipt records +its pre-redaction SHA-256 under `redaction`. That digest is the +`historical_receipt_sha256` the wrapper receipts below recorded. Their +`original_proof_script_sha256` likewise names the proof script before this +one-line change. + +**Phase-2 base** (`experiments/893-spm-role-stage-base-q3-receipt.json`), +read-only, digest verified against its sidecar before and after: + +| | before | after | +|---|---|---| +| `check_spm_composition` | FAIL | PASS | +| SPM units without a classified adult | 222 | **0** | +| units without a member aged 18 or over | 238 | 238 | +| role source | `household_structure_fallback` (`is_household_head` only) | `source_column` | + +No unit re-grouped, no adult invented: person ids, SPM membership, the +`spm_unit` table and every age are byte-equal before and after; all 238 +minor-only units are resolved by their own 15-to-17-year-old carrying the +source role (240 such persons; two units carry a second 15-to-17-year-old +with the role); zero unmatched persons; zero count-reconciliation +mismatches. Frame load 7.1 s, derivation 10.7 s. + +**Build P agreement** (`experiments/893-spm-role-stage-buildp-agreement-receipt.json`): +the same derivation against the reviewed parent (digest +`48b9d479…`, read-only) reproduces the enrichment lane's reference evidence +**byte for byte** (SHA-256 `22b5968d…`, pin 5), 166,321 of 166,321 roles equal, +every `EXPECTED_COUNTS` value matched. On the parent itself the check fails with +28 units under the head-only fallback and passes with the role — the 28 the +lane's pin records as resolved. + +### Actual wrapper acceptance, September 19 + +`experiments/spm_role_stage_wrapper_proof.py` independently runs +`with_us_spm_independence_role()` and its signal gate on both pinned local +populations. The final v2 receipts test committed source +`6a6d53b2fb2cad7ac7b84634decc2a41125efa92` with an empty source diff, including +the complete gate-details JSON serialization and ordered role binding. +The first wrapper receipts remain unchanged. The original derivation receipts +changed only by the 2026-09-23 unit-id redaction described above. + +| Population | Persons compared | Unresolved SPM units before → after | Wrapper seconds | Peak process RSS | +|---|---:|---:|---:|---:| +| Build P | 166,321 | 28 → 0 | 8.04 | 8.42 GiB | +| Phase-2 base-q3 | 907,382 | 222 → 0 | 9.07 | 13.28 GiB | + +Both signal gates pass, with zero unmatched persons or Census count +disagreements. Every role agrees with the original derivation; Build P's +evidence bytes also equal the pinned reference. Every existing table, +column, age, membership, weight, stratum and mass log is preserved. Input +frames and pinned source files remain unchanged. The checks write aggregate +receipts only; they do not run calibration, reform validation or publication. + +Receipts: +`experiments/893-spm-role-stage-wrapper-buildp-v2-receipt.json` and +`experiments/893-spm-role-stage-wrapper-base-q3-v2-receipt.json`. + +Earlier wrapper receipts without `v2` predate the final JSON-serialization and +provenance-binding hardening. The projection uses a task-owned temporary H5 +in a 0700 directory, deleted on exit; the receipts contain aggregate evidence. + +The first review iteration passed 936 relevant tests on the pinned +PolicyEngine-US 2.2.1 / spm-calculator 1.0.0 environment. Subsequent review +found nested frozen provenance could not be written as JSON. Recursive +conversion now fixes that failure, with a real gate-to-builder checkpoint +regression. The 75 stage tests and 10 focused builder tests pass after this +fix. Newer country-model versions require separate qualification. + +A second independent Fable source review closed its eight initial findings +and found no new high- or medium-severity defect. Its remaining limits were +dtype-sensitive bindings, historical pre-clone metadata and unsupported +set-valued metadata, scoped above. It did not run tests or inspect microdata; +the actual-wrapper receipts provide separate execution evidence. + +All nine selected spec-engine, ABI, bundle, release-input and pool-tool test +files pass across focused reruns after correcting stale stage/input counts. +The final three-file run passes 300 tests. Bundle generation `--check` passes; +the generated coverage accounts for all 42,174 fields and 41 inventory checks. +This remains local source qualification on the pinned dependency set. + +## 7. Unresolved stacked-pool qualification + +**Q1 — ACS-origin rows in the production stacked pool.** The stage refuses a +frame with any person lacking an ASEC origin, so this PR does not add it to +the pool operator order. With the role now a hard-required release input, a +stacked-pool release will fail the SPM role signal gate, before calibration +or terminal input-coverage checks, until the ACS side is +decided (a reviewed exclusion is not available: the anti-rot check fails an +exclusion whose column carries signal, and Build P's enriched artifact carries +it). Options: + +1. Deliver the role to ASEC-origin rows on the pool's raw-`PERIDNUM` + projection and give ACS-origin rows the engine's own fallback + (`is_household_head | is_household_spouse`, from their `RELSHIPP` + headship). This changes nothing about how the engine already classifies + them, but it stores a household-structure value under the source role's + name — the substitution the earlier note warned against. +2. Same, but leave ACS-origin rows null and declare them in the pool's + gap-fill schedule as a cross-origin fill. That is an imputation of the + role; the engine reads the column as source-delivered. +3. Refuse the role on stacked pools and let those releases fail closed until + an ACS-side source rule exists. This is what the branch does today. + +**Q2 — required, or reviewed exclusion.** The coverage manifest now lists the +role as `required` with no exclusion (the #368 pattern: red on any artifact +that lacks it). If you would rather the gate stay green on artifacts built +before the stage, the alternative is a `reviewed_exclusion` — but see Q1 for +why the anti-rot check makes that inconsistent with the certified default. diff --git a/experiments/893-spm-role-stage-base-q3-receipt.json b/experiments/893-spm-role-stage-base-q3-receipt.json new file mode 100644 index 0000000000..fe69cbf3b1 --- /dev/null +++ b/experiments/893-spm-role-stage-base-q3-receipt.json @@ -0,0 +1,217 @@ +{ + "receipt": "spm_role_stage_proof.base", + "base_h5": "/Users/maxghenis/PolicyEngine/_buildq-runtime/out/base-q3/base_populace_us_2024_puf_support.h5", + "base_sha256": "475ca33fcdbf60f107ba212c762e9e9ea9587e96b5a645750e61aaa2395b7822", + "base_sha256_sidecar": "475ca33fcdbf60f107ba212c762e9e9ea9587e96b5a645750e61aaa2395b7822", + "base_sha256_matches_sidecar": true, + "source_csvs": { + "2022": { + "path": "/Users/maxghenis/.cache/microcosm/cps/asec_education/pppub23.csv", + "pinned_sha256": "19b56537e50e7663f954361ef2bb5ce9cef8d9d45f156fe1a69a99b654198ffe", + "size_bytes": 281065733 + }, + "2023": { + "path": "/Users/maxghenis/.cache/microcosm/cps/asec_education/pppub24.csv", + "pinned_sha256": "21a2b9e0e4b08534563578a45acad77868af4ae9a7d46f23776b707d4a559aa7", + "size_bytes": 277250415 + }, + "2024": { + "path": "/Users/maxghenis/.cache/microcosm/cps/asec_education/pppub25.csv", + "pinned_sha256": "06921fe83fc66c907e6c7b86b82255dc70458ee7d76258fc48297cb34f0c06b5", + "size_bytes": 277882549 + } + }, + "environment": { + "python": "3.14.4", + "policyengine-us": "2.2.1", + "spm-calculator": "1.0.0", + "policyengine-core": "3.32.5", + "pandas": "3.0.3", + "numpy": "2.4.6", + "tables": "3.11.1" + }, + "frame": { + "households": 352932, + "persons": 907382, + "spm_units": 367306 + }, + "before": { + "status": "FAIL", + "summary": "222 of 367,306 spm_units in the base pool have no classified adult; the whole population's SPM measurement would raise SPM_COMPOSITION_REQUIRED", + "n_units": 367306, + "n_units_without_classified_adult": 222, + "n_units_without_member_aged_18_or_over": 238, + "role_source": "household_structure_fallback", + "fallback_columns_present": [ + "is_household_head" + ], + "n_offending_units_reported": 20 + }, + "derivation": { + "dataset_sha256": "475ca33fcdbf60f107ba212c762e9e9ea9587e96b5a645750e61aaa2395b7822", + "primitive_column": "is_spm_independent_minor_role", + "evidence_column": "is_spm_independence_role", + "primitive_rule": "SPM_HEAD == 1 OR (A_FAMTYP in {1,4} AND A_FAMREL in {1,2})", + "adult_rule": "age >= 18 OR (age >= 15 AND is_spm_independent_minor_role)", + "evidence_status": "Inference from documented primitive relationships, reconciled against every SPM count in pinned complete Census ASEC sources; Census production program not retrieved.", + "source_join": [ + "source_year (income year)", + "PERIDNUM (exact 22-digit string)" + ], + "source_checks": [ + { + "income_year": 2022, + "survey_year": 2023, + "csv_sha256": "19b56537e50e7663f954361ef2bb5ce9cef8d9d45f156fe1a69a99b654198ffe", + "csv_size_bytes": 281065733, + "official_archive_url": "https://www2.census.gov/programs-surveys/cps/datasets/2023/march/asecpub23csv.zip", + "archive_sha256": "d2e000250782adfbdd7f29c82b66d866591a30f0d330496698ec19f9c784ce11", + "member": "pppub23.csv", + "persons": 146133, + "units": 59181, + "adult_child_person_count_mismatch_units": 0, + "extra_independent_minor_people_vs_head_only": 0, + "extra_independent_minor_units_vs_head_only": 0 + }, + { + "income_year": 2023, + "survey_year": 2024, + "csv_sha256": "21a2b9e0e4b08534563578a45acad77868af4ae9a7d46f23776b707d4a559aa7", + "csv_size_bytes": 277250415, + "official_archive_url": "https://www2.census.gov/programs-surveys/cps/datasets/2024/march/asecpub24csv.zip", + "archive_sha256": "cdb39cdac34bef99dd0940ab28e306f692404c2eea44d85dfd634214872a0a09", + "member": "pppub24.csv", + "persons": 144265, + "units": 58711, + "adult_child_person_count_mismatch_units": 0, + "extra_independent_minor_people_vs_head_only": 1, + "extra_independent_minor_units_vs_head_only": 1 + }, + { + "income_year": 2024, + "survey_year": 2025, + "csv_sha256": "06921fe83fc66c907e6c7b86b82255dc70458ee7d76258fc48297cb34f0c06b5", + "csv_size_bytes": 277882549, + "official_archive_url": "https://www2.census.gov/programs-surveys/cps/datasets/2025/march/asecpub25csv.zip", + "archive_sha256": "318845a2b5e0034eb2973898de1738f4df0025727de38499e7669cb9c0deef0b", + "member": "pppub25.csv", + "persons": 142125, + "units": 58147, + "adult_child_person_count_mismatch_units": 0, + "extra_independent_minor_people_vs_head_only": 6, + "extra_independent_minor_units_vs_head_only": 5 + } + ], + "total_source_people": 432523, + "total_source_units": 176039, + "persons_joined": 907382, + "unmatched_persons": 0, + "all_rows_equal_source_columns": [ + "A_AGE", + "A_LINENO", + "P_SEQ", + "SPM_HAGE", + "SPM_NUMADULTS", + "SPM_NUMKIDS", + "SPM_NUMPER" + ], + "nonmissing_optional_raw_fields_checked": { + "A_FAMTYP": 300593, + "A_FAMREL": 300593, + "A_SPOUSE": 907382, + "PECOHAB": 300593 + }, + "native_spm_units": 367306, + "complete_source_membership_units": 367306, + "adult_child_person_count_mismatch_units": 0, + "independent_minor_persons": 681, + "classification_changed_units_vs_age_only": 677, + "minor_only_units_resolved": 238, + "true_role_persons": 546636, + "table_rows": 907382, + "table_key": [ + "person_id", + "person_spm_unit_id" + ], + "table_order": "exact original HDF person order; verified", + "weights_used": false, + "ages_changed": false, + "period_handling": "Store the role before the age gate; model age supplies the requested period." + }, + "after": { + "status": "PASS", + "summary": "all 367,306 spm_units in the base pool have a classified adult (role source: source_column)", + "n_units": 367306, + "n_units_without_classified_adult": 0, + "n_units_without_member_aged_18_or_over": 238, + "role_source": "source_column", + "fallback_columns_present": [], + "n_offending_units_reported": 0 + }, + "role": { + "persons": 907382, + "role_true": 546636, + "role_share": 0.602432051770919, + "persons_aged_15_to_17": 41434, + "role_true_aged_15_to_17": 681, + "role_share_aged_15_to_17": 0.01643577738089492, + "by_source_year": { + "2022": { + "persons": 304668, + "role_share": 0.6008277863116572, + "persons_aged_15_to_17": 13948, + "role_share_aged_15_to_17": 0.014912532262689992 + }, + "2023": { + "persons": 302121, + "role_share": 0.6031722389373794, + "persons_aged_15_to_17": 13702, + "role_share_aged_15_to_17": 0.017077798861480076 + }, + "2024": { + "persons": 300593, + "role_share": 0.6033141157645054, + "persons_aged_15_to_17": 13784, + "role_share_aged_15_to_17": 0.017338943702843876 + } + } + }, + "clones": { + "distinct_source_persons": 432523, + "source_persons_with_disagreeing_clone_roles": 0, + "person_support_channels": { + "puf_tax_detail": 474859, + "asec": 432523 + } + }, + "resolution": { + "persons_unchanged": true, + "person_ids_unchanged": true, + "spm_membership_unchanged": true, + "spm_unit_table_unchanged": true, + "ages_unchanged": true, + "persons_aged_18_or_over_unchanged": true, + "units_without_member_aged_18_or_over": 238, + "of_which_resolved_by_own_15_to_17_year_old_with_role": 238, + "of_which_still_unclassified": 0, + "resolving_persons_aged_15_to_17": 240 + }, + "timing_seconds": { + "frame_load": 7.13, + "derive_role": 10.68, + "total": 19.56 + }, + "base_sha256_after": "475ca33fcdbf60f107ba212c762e9e9ea9587e96b5a645750e61aaa2395b7822", + "base_unchanged": true, + "redaction": { + "date": "2026-09-23", + "fields": [ + "before.offending_unit_ids_reported", + "after.offending_unit_ids_reported" + ], + "replaced_by": "n_offending_units_reported (the number of units the check named)", + "reason": "The lists named internal spm_unit_id values of minor-only SPM units in gated populations. Aggregate receipts report counts only, as experiments/893-spm-composition-base-q3-receipt.json does. Nothing else in this receipt changed.", + "pre_redaction_sha256": "becfe4f4e9b45c4b7762730b583124712af28ff5c63239c5e4a76e176285c140", + "pre_redaction_sha256_note": "The historical_receipt_sha256 recorded by the 893-spm-role-stage-wrapper-* receipts names these pre-redaction bytes." + } +} diff --git a/experiments/893-spm-role-stage-buildp-agreement-receipt.json b/experiments/893-spm-role-stage-buildp-agreement-receipt.json new file mode 100644 index 0000000000..84555ac64d --- /dev/null +++ b/experiments/893-spm-role-stage-buildp-agreement-receipt.json @@ -0,0 +1,182 @@ +{ + "receipt": "spm_role_stage_proof.buildp", + "parent_build_id": "populace-us-2024-buildp-sparse-rmloss100-cae8640-20260728T011454Z", + "parent_h5": "/Users/maxghenis/.cache/huggingface/hub/datasets--policyengine--populace-us/blobs/48b9d479fb4fd1c3537f9383ce4697d130b6f618658409d74f6233c43b994c7e", + "parent_sha256": "48b9d479fb4fd1c3537f9383ce4697d130b6f618658409d74f6233c43b994c7e", + "reference_evidence_csv": "/Users/maxghenis/spm-rebuild-20260908/rollout/recertify-221-range-20260915/certified/releases/populace-us-2024-spm-20260915/source_spm_person_independence.csv", + "reference_evidence_sha256": "22b5968d90fecfeef7614583e493fe10cc16bda8b5be82e6f49a5bc2102d3ce5", + "reference_evidence_sha256_pinned": "22b5968d90fecfeef7614583e493fe10cc16bda8b5be82e6f49a5bc2102d3ce5", + "reference_matches_pin": true, + "environment": { + "python": "3.14.4", + "policyengine-us": "2.2.1", + "spm-calculator": "1.0.0", + "policyengine-core": "3.32.5", + "pandas": "3.0.3", + "numpy": "2.4.6", + "tables": "3.11.1" + }, + "derivation": { + "dataset_sha256": "48b9d479fb4fd1c3537f9383ce4697d130b6f618658409d74f6233c43b994c7e", + "primitive_column": "is_spm_independent_minor_role", + "evidence_column": "is_spm_independence_role", + "primitive_rule": "SPM_HEAD == 1 OR (A_FAMTYP in {1,4} AND A_FAMREL in {1,2})", + "adult_rule": "age >= 18 OR (age >= 15 AND is_spm_independent_minor_role)", + "evidence_status": "Inference from documented primitive relationships, reconciled against every SPM count in pinned complete Census ASEC sources; Census production program not retrieved.", + "source_join": [ + "source_year (income year)", + "PERIDNUM (exact 22-digit string)" + ], + "source_checks": [ + { + "income_year": 2022, + "survey_year": 2023, + "csv_sha256": "19b56537e50e7663f954361ef2bb5ce9cef8d9d45f156fe1a69a99b654198ffe", + "csv_size_bytes": 281065733, + "official_archive_url": "https://www2.census.gov/programs-surveys/cps/datasets/2023/march/asecpub23csv.zip", + "archive_sha256": "d2e000250782adfbdd7f29c82b66d866591a30f0d330496698ec19f9c784ce11", + "member": "pppub23.csv", + "persons": 146133, + "units": 59181, + "adult_child_person_count_mismatch_units": 0, + "extra_independent_minor_people_vs_head_only": 0, + "extra_independent_minor_units_vs_head_only": 0 + }, + { + "income_year": 2023, + "survey_year": 2024, + "csv_sha256": "21a2b9e0e4b08534563578a45acad77868af4ae9a7d46f23776b707d4a559aa7", + "csv_size_bytes": 277250415, + "official_archive_url": "https://www2.census.gov/programs-surveys/cps/datasets/2024/march/asecpub24csv.zip", + "archive_sha256": "cdb39cdac34bef99dd0940ab28e306f692404c2eea44d85dfd634214872a0a09", + "member": "pppub24.csv", + "persons": 144265, + "units": 58711, + "adult_child_person_count_mismatch_units": 0, + "extra_independent_minor_people_vs_head_only": 1, + "extra_independent_minor_units_vs_head_only": 1 + }, + { + "income_year": 2024, + "survey_year": 2025, + "csv_sha256": "06921fe83fc66c907e6c7b86b82255dc70458ee7d76258fc48297cb34f0c06b5", + "csv_size_bytes": 277882549, + "official_archive_url": "https://www2.census.gov/programs-surveys/cps/datasets/2025/march/asecpub25csv.zip", + "archive_sha256": "318845a2b5e0034eb2973898de1738f4df0025727de38499e7669cb9c0deef0b", + "member": "pppub25.csv", + "persons": 142125, + "units": 58147, + "adult_child_person_count_mismatch_units": 0, + "extra_independent_minor_people_vs_head_only": 6, + "extra_independent_minor_units_vs_head_only": 5 + } + ], + "total_source_people": 432523, + "total_source_units": 176039, + "persons_joined": 166321, + "unmatched_persons": 0, + "all_rows_equal_source_columns": [ + "A_AGE", + "A_LINENO", + "P_SEQ", + "SPM_HAGE", + "SPM_NUMADULTS", + "SPM_NUMKIDS", + "SPM_NUMPER" + ], + "nonmissing_optional_raw_fields_checked": { + "A_FAMTYP": 57203, + "A_FAMREL": 57203, + "A_SPOUSE": 166321, + "PECOHAB": 57203 + }, + "native_spm_units": 59900, + "complete_source_membership_units": 59900, + "adult_child_person_count_mismatch_units": 0, + "independent_minor_persons": 132, + "classification_changed_units_vs_age_only": 132, + "minor_only_units_resolved": 28, + "true_role_persons": 94224, + "table_rows": 166321, + "table_key": [ + "person_id", + "person_spm_unit_id" + ], + "table_order": "exact original HDF person order; verified", + "weights_used": false, + "ages_changed": false, + "period_handling": "Store the role before the age gate; model age supplies the requested period." + }, + "expected_counts": { + "persons_joined": 166321, + "native_spm_units": 59900, + "total_source_people": 432523, + "total_source_units": 176039, + "minor_only_units_resolved": 28, + "classification_changed_units_vs_age_only": 132 + }, + "expected_counts_match": { + "persons_joined": true, + "native_spm_units": true, + "total_source_people": true, + "total_source_units": true, + "minor_only_units_resolved": true, + "classification_changed_units_vs_age_only": true + }, + "agreement": { + "stage_evidence_sha256": "22b5968d90fecfeef7614583e493fe10cc16bda8b5be82e6f49a5bc2102d3ce5", + "stage_evidence_bytes_equal_reference": true, + "rows_stage": 166321, + "rows_certified": 166321, + "rows_in_both": 166321, + "rows_only_in_stage": 0, + "rows_only_in_certified": 0, + "roles_equal": 166321, + "roles_differ": 0 + }, + "frame": { + "households": 57240, + "persons": 166321, + "spm_units": 59900 + }, + "before": { + "status": "FAIL", + "summary": "28 of 59,900 spm_units in the base pool have no classified adult; the whole population's SPM measurement would raise SPM_COMPOSITION_REQUIRED", + "n_units": 59900, + "n_units_without_classified_adult": 28, + "n_units_without_member_aged_18_or_over": 28, + "role_source": "household_structure_fallback", + "fallback_columns_present": [ + "is_household_head" + ], + "n_offending_units_reported": 20 + }, + "after": { + "status": "PASS", + "summary": "all 59,900 spm_units in the base pool have a classified adult (role source: source_column)", + "n_units": 59900, + "n_units_without_classified_adult": 0, + "n_units_without_member_aged_18_or_over": 28, + "role_source": "source_column", + "fallback_columns_present": [], + "n_offending_units_reported": 0 + }, + "timing_seconds": { + "frame_load": 1.53, + "derive_role": 6.02, + "total": 7.92 + }, + "parent_sha256_after": "48b9d479fb4fd1c3537f9383ce4697d130b6f618658409d74f6233c43b994c7e", + "parent_unchanged": true, + "redaction": { + "date": "2026-09-23", + "fields": [ + "before.offending_unit_ids_reported", + "after.offending_unit_ids_reported" + ], + "replaced_by": "n_offending_units_reported (the number of units the check named)", + "reason": "The lists named internal spm_unit_id values of minor-only SPM units in gated populations. Aggregate receipts report counts only, as experiments/893-spm-composition-base-q3-receipt.json does. Nothing else in this receipt changed.", + "pre_redaction_sha256": "25ce2800568842eb7e02ea2b19b9740a5e82f0cc5143a52bd394f509a3d27ced", + "pre_redaction_sha256_note": "The historical_receipt_sha256 recorded by the 893-spm-role-stage-wrapper-* receipts names these pre-redaction bytes." + } +} diff --git a/experiments/893-spm-role-stage-wrapper-base-q3-receipt.json b/experiments/893-spm-role-stage-wrapper-base-q3-receipt.json new file mode 100644 index 0000000000..7ee0206b97 --- /dev/null +++ b/experiments/893-spm-role-stage-wrapper-base-q3-receipt.json @@ -0,0 +1,130 @@ +{ + "after": { + "n_units": 367306, + "n_units_without_classified_adult": 0, + "n_units_without_member_aged_18_or_over": 238, + "role_source": "source_column", + "status": "PASS" + }, + "agreement": { + "buildp_reference_bytes_equal": null, + "evidence_sha256": "92e6233a679749ade2facace92de8a70f45edce45caccc2b4793d864123a6ddb", + "persons_compared": 907382, + "roles_differ": 0 + }, + "before": { + "n_units": 367306, + "n_units_without_classified_adult": 222, + "n_units_without_member_aged_18_or_over": 238, + "role_source": "household_structure_fallback", + "status": "FAIL" + }, + "completed_at_utc": "2026-09-19T12:32:40.874549+00:00", + "environment": { + "microcosm-build": "0.1.0", + "microcosm-data": "0.1.0", + "microcosm-frame": "0.1.0", + "numpy": "2.4.6", + "pandas": "3.0.3", + "policyengine-core": "3.32.5", + "policyengine-us": "2.2.1", + "python": "3.14.4", + "spm-calculator": "1.0.0", + "tables": "3.11.1" + }, + "historical_receipt_sha256": "becfe4f4e9b45c4b7762730b583124712af28ff5c63239c5e4a76e176285c140", + "input_bytes_unchanged": true, + "input_frame_unchanged": true, + "inputs": { + "asec_2022": { + "sha256": "19b56537e50e7663f954361ef2bb5ce9cef8d9d45f156fe1a69a99b654198ffe", + "size_bytes": 281065733 + }, + "asec_2023": { + "sha256": "21a2b9e0e4b08534563578a45acad77868af4ae9a7d46f23776b707d4a559aa7", + "size_bytes": 277250415 + }, + "asec_2024": { + "sha256": "06921fe83fc66c907e6c7b86b82255dc70458ee7d76258fc48297cb34f0c06b5", + "size_bytes": 277882549 + }, + "population": { + "sha256": "475ca33fcdbf60f107ba212c762e9e9ea9587e96b5a645750e61aaa2395b7822", + "size_bytes": 2351269694 + } + }, + "peak_rss_bytes": 15632220160, + "preservation": { + "all_existing_tables_and_columns_equal": true, + "existing_metadata_preserved": true, + "person_order_ids_ages_and_memberships_equal": true, + "strata_and_mass_log_equal": true, + "tables": { + "family": { + "existing_columns": 4, + "rows": 394055 + }, + "household": { + "existing_columns": 15, + "rows": 352932 + }, + "marital_unit": { + "existing_columns": 4, + "rows": 722088 + }, + "person": { + "existing_columns": 289, + "rows": 907382 + }, + "spm_unit": { + "existing_columns": 11, + "rows": 367306 + }, + "tax_unit": { + "existing_columns": 20, + "rows": 477242 + } + }, + "weights_and_kinds_equal": true + }, + "receipt": "spm_role_stage_wrapper_proof.base", + "signal_gate": { + "adult_child_person_count_mismatch_units": 0, + "failure_count": 0, + "frame_projection_sha256": "a2f6920e7c7f26a16cf73d9d1dcfb10bd349bf20ff6368490eba512b351ad40b", + "independent_minor_persons": 681, + "minor_role_share": 0.018401503892826607, + "minor_role_share_band": [ + 0.003, + 0.06 + ], + "passed": true, + "persons_aged_15_to_17": 41434, + "role_missing_values": 0, + "role_share": 0.6268870430582791, + "role_share_band": [ + 0.4, + 0.75 + ], + "unmatched_persons": 0 + }, + "source": { + "dirty_source_digest": "d5740c0849df58759ffc23bc39d509f91bd5970db2ddcecf9d862205075f4642", + "head": "cff157729599c41f7ccfdadf32145d9679ffe796", + "original_proof_script_sha256": "67f722b871047cd60e97e3d7e1c1aa6764a3595ad92af43e9348e77a3e6599d5", + "proof_script_sha256": "def9d52eaf5726d14fda0e2f35cf7fe3014ad714447652687cfbc089a3230277", + "tracked_source_patch_sha256": "feb5539685677ab2156461c68d18eca1cd5b14e1dd66f0c0adcd6adefd94bf85", + "untracked_source_sha256": {} + }, + "stage_arguments": { + "seed": 0, + "time_period": 2024 + }, + "status": "PASS", + "timing_seconds": { + "load": 6.9, + "original_derivation": 10.5, + "total": 31.47, + "wrapper": 7.36 + } +} diff --git a/experiments/893-spm-role-stage-wrapper-base-q3-v2-receipt.json b/experiments/893-spm-role-stage-wrapper-base-q3-v2-receipt.json new file mode 100644 index 0000000000..a2827d8c23 --- /dev/null +++ b/experiments/893-spm-role-stage-wrapper-base-q3-v2-receipt.json @@ -0,0 +1,131 @@ +{ + "after": { + "n_units": 367306, + "n_units_without_classified_adult": 0, + "n_units_without_member_aged_18_or_over": 238, + "role_source": "source_column", + "status": "PASS" + }, + "agreement": { + "buildp_reference_bytes_equal": null, + "evidence_sha256": "92e6233a679749ade2facace92de8a70f45edce45caccc2b4793d864123a6ddb", + "persons_compared": 907382, + "roles_differ": 0 + }, + "before": { + "n_units": 367306, + "n_units_without_classified_adult": 222, + "n_units_without_member_aged_18_or_over": 238, + "role_source": "household_structure_fallback", + "status": "FAIL" + }, + "completed_at_utc": "2026-09-19T12:59:35.381820+00:00", + "environment": { + "microcosm-build": "0.1.0", + "microcosm-data": "0.1.0", + "microcosm-frame": "0.1.0", + "numpy": "2.4.6", + "pandas": "3.0.3", + "policyengine-core": "3.32.5", + "policyengine-us": "2.2.1", + "python": "3.14.4", + "spm-calculator": "1.0.0", + "tables": "3.11.1" + }, + "historical_receipt_sha256": "becfe4f4e9b45c4b7762730b583124712af28ff5c63239c5e4a76e176285c140", + "input_bytes_unchanged": true, + "input_frame_unchanged": true, + "inputs": { + "asec_2022": { + "sha256": "19b56537e50e7663f954361ef2bb5ce9cef8d9d45f156fe1a69a99b654198ffe", + "size_bytes": 281065733 + }, + "asec_2023": { + "sha256": "21a2b9e0e4b08534563578a45acad77868af4ae9a7d46f23776b707d4a559aa7", + "size_bytes": 277250415 + }, + "asec_2024": { + "sha256": "06921fe83fc66c907e6c7b86b82255dc70458ee7d76258fc48297cb34f0c06b5", + "size_bytes": 277882549 + }, + "population": { + "sha256": "475ca33fcdbf60f107ba212c762e9e9ea9587e96b5a645750e61aaa2395b7822", + "size_bytes": 2351269694 + } + }, + "peak_rss_bytes": 14254063616, + "preservation": { + "all_existing_tables_and_columns_equal": true, + "existing_metadata_preserved": true, + "person_order_ids_ages_and_memberships_equal": true, + "strata_and_mass_log_equal": true, + "tables": { + "family": { + "existing_columns": 4, + "rows": 394055 + }, + "household": { + "existing_columns": 15, + "rows": 352932 + }, + "marital_unit": { + "existing_columns": 4, + "rows": 722088 + }, + "person": { + "existing_columns": 289, + "rows": 907382 + }, + "spm_unit": { + "existing_columns": 11, + "rows": 367306 + }, + "tax_unit": { + "existing_columns": 20, + "rows": 477242 + } + }, + "weights_and_kinds_equal": true + }, + "receipt": "spm_role_stage_wrapper_proof.base", + "signal_gate": { + "adult_child_person_count_mismatch_units": 0, + "failure_count": 0, + "frame_projection_sha256": "5bd1764a48469e4cbcca0eac430094815d0bcaa5fb705cc9eed353d24459e43e", + "independent_minor_persons": 681, + "json_details_sha256": "d02efae88c7e08227eb768c8fe3947cef8c432a1c9f17277440fc05155bbce63", + "minor_role_share": 0.018401503892826607, + "minor_role_share_band": [ + 0.003, + 0.06 + ], + "passed": true, + "persons_aged_15_to_17": 41434, + "role_missing_values": 0, + "role_share": 0.6268870430582791, + "role_share_band": [ + 0.4, + 0.75 + ], + "unmatched_persons": 0 + }, + "source": { + "dirty_source_digest": "e00d05c480679ee6f9113c36727976df3266d82a1be61b228545126a39de46da", + "head": "6a6d53b2fb2cad7ac7b84634decc2a41125efa92", + "original_proof_script_sha256": "67f722b871047cd60e97e3d7e1c1aa6764a3595ad92af43e9348e77a3e6599d5", + "proof_script_sha256": "81a2f72e6b970865c6cac8683b851534a22d541801d46082b0ab6fb6543d5590", + "tracked_source_patch_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked_source_sha256": {} + }, + "stage_arguments": { + "seed": 0, + "time_period": 2024 + }, + "status": "PASS", + "timing_seconds": { + "load": 10.07, + "original_derivation": 12.81, + "total": 42.57, + "wrapper": 9.07 + } +} diff --git a/experiments/893-spm-role-stage-wrapper-buildp-receipt.json b/experiments/893-spm-role-stage-wrapper-buildp-receipt.json new file mode 100644 index 0000000000..c5d27f9faa --- /dev/null +++ b/experiments/893-spm-role-stage-wrapper-buildp-receipt.json @@ -0,0 +1,134 @@ +{ + "after": { + "n_units": 59900, + "n_units_without_classified_adult": 0, + "n_units_without_member_aged_18_or_over": 28, + "role_source": "source_column", + "status": "PASS" + }, + "agreement": { + "buildp_reference_bytes_equal": true, + "evidence_sha256": "22b5968d90fecfeef7614583e493fe10cc16bda8b5be82e6f49a5bc2102d3ce5", + "persons_compared": 166321, + "roles_differ": 0 + }, + "before": { + "n_units": 59900, + "n_units_without_classified_adult": 28, + "n_units_without_member_aged_18_or_over": 28, + "role_source": "household_structure_fallback", + "status": "FAIL" + }, + "completed_at_utc": "2026-09-19T12:31:13.267358+00:00", + "environment": { + "microcosm-build": "0.1.0", + "microcosm-data": "0.1.0", + "microcosm-frame": "0.1.0", + "numpy": "2.4.6", + "pandas": "3.0.3", + "policyengine-core": "3.32.5", + "policyengine-us": "2.2.1", + "python": "3.14.4", + "spm-calculator": "1.0.0", + "tables": "3.11.1" + }, + "historical_receipt_sha256": "25ce2800568842eb7e02ea2b19b9740a5e82f0cc5143a52bd394f509a3d27ced", + "input_bytes_unchanged": true, + "input_frame_unchanged": true, + "inputs": { + "asec_2022": { + "sha256": "19b56537e50e7663f954361ef2bb5ce9cef8d9d45f156fe1a69a99b654198ffe", + "size_bytes": 281065733 + }, + "asec_2023": { + "sha256": "21a2b9e0e4b08534563578a45acad77868af4ae9a7d46f23776b707d4a559aa7", + "size_bytes": 277250415 + }, + "asec_2024": { + "sha256": "06921fe83fc66c907e6c7b86b82255dc70458ee7d76258fc48297cb34f0c06b5", + "size_bytes": 277882549 + }, + "buildp_evidence": { + "sha256": "22b5968d90fecfeef7614583e493fe10cc16bda8b5be82e6f49a5bc2102d3ce5", + "size_bytes": 3370188 + }, + "population": { + "sha256": "48b9d479fb4fd1c3537f9383ce4697d130b6f618658409d74f6233c43b994c7e", + "size_bytes": 462915783 + } + }, + "peak_rss_bytes": 11733762048, + "preservation": { + "all_existing_tables_and_columns_equal": true, + "existing_metadata_preserved": true, + "person_order_ids_ages_and_memberships_equal": true, + "strata_and_mass_log_equal": true, + "tables": { + "family": { + "existing_columns": 4, + "rows": 65206 + }, + "household": { + "existing_columns": 21, + "rows": 57240 + }, + "marital_unit": { + "existing_columns": 4, + "rows": 130729 + }, + "person": { + "existing_columns": 317, + "rows": 166321 + }, + "spm_unit": { + "existing_columns": 11, + "rows": 59900 + }, + "tax_unit": { + "existing_columns": 18, + "rows": 79729 + } + }, + "weights_and_kinds_equal": true + }, + "receipt": "spm_role_stage_wrapper_proof.buildp", + "signal_gate": { + "adult_child_person_count_mismatch_units": 0, + "failure_count": 0, + "frame_projection_sha256": "cd4fc82bbd6037a5762822aa61179eece7cf699a865544d092438b51cb4b0d05", + "independent_minor_persons": 132, + "minor_role_share": 0.010868109828097293, + "minor_role_share_band": [ + 0.003, + 0.06 + ], + "passed": true, + "persons_aged_15_to_17": 8669, + "role_missing_values": 0, + "role_share": 0.6052072071523052, + "role_share_band": [ + 0.4, + 0.75 + ], + "unmatched_persons": 0 + }, + "source": { + "dirty_source_digest": "d5740c0849df58759ffc23bc39d509f91bd5970db2ddcecf9d862205075f4642", + "head": "cff157729599c41f7ccfdadf32145d9679ffe796", + "original_proof_script_sha256": "67f722b871047cd60e97e3d7e1c1aa6764a3595ad92af43e9348e77a3e6599d5", + "proof_script_sha256": "def9d52eaf5726d14fda0e2f35cf7fe3014ad714447652687cfbc089a3230277", + "tracked_source_patch_sha256": "feb5539685677ab2156461c68d18eca1cd5b14e1dd66f0c0adcd6adefd94bf85", + "untracked_source_sha256": {} + }, + "stage_arguments": { + "seed": 0, + "time_period": 2024 + }, + "status": "PASS", + "timing_seconds": { + "load": 1.5, + "original_derivation": 5.59, + "total": 14.52, + "wrapper": 5.51 + } +} diff --git a/experiments/893-spm-role-stage-wrapper-buildp-v2-receipt.json b/experiments/893-spm-role-stage-wrapper-buildp-v2-receipt.json new file mode 100644 index 0000000000..ff2ff5dc13 --- /dev/null +++ b/experiments/893-spm-role-stage-wrapper-buildp-v2-receipt.json @@ -0,0 +1,135 @@ +{ + "after": { + "n_units": 59900, + "n_units_without_classified_adult": 0, + "n_units_without_member_aged_18_or_over": 28, + "role_source": "source_column", + "status": "PASS" + }, + "agreement": { + "buildp_reference_bytes_equal": true, + "evidence_sha256": "22b5968d90fecfeef7614583e493fe10cc16bda8b5be82e6f49a5bc2102d3ce5", + "persons_compared": 166321, + "roles_differ": 0 + }, + "before": { + "n_units": 59900, + "n_units_without_classified_adult": 28, + "n_units_without_member_aged_18_or_over": 28, + "role_source": "household_structure_fallback", + "status": "FAIL" + }, + "completed_at_utc": "2026-09-19T12:58:05.371900+00:00", + "environment": { + "microcosm-build": "0.1.0", + "microcosm-data": "0.1.0", + "microcosm-frame": "0.1.0", + "numpy": "2.4.6", + "pandas": "3.0.3", + "policyengine-core": "3.32.5", + "policyengine-us": "2.2.1", + "python": "3.14.4", + "spm-calculator": "1.0.0", + "tables": "3.11.1" + }, + "historical_receipt_sha256": "25ce2800568842eb7e02ea2b19b9740a5e82f0cc5143a52bd394f509a3d27ced", + "input_bytes_unchanged": true, + "input_frame_unchanged": true, + "inputs": { + "asec_2022": { + "sha256": "19b56537e50e7663f954361ef2bb5ce9cef8d9d45f156fe1a69a99b654198ffe", + "size_bytes": 281065733 + }, + "asec_2023": { + "sha256": "21a2b9e0e4b08534563578a45acad77868af4ae9a7d46f23776b707d4a559aa7", + "size_bytes": 277250415 + }, + "asec_2024": { + "sha256": "06921fe83fc66c907e6c7b86b82255dc70458ee7d76258fc48297cb34f0c06b5", + "size_bytes": 277882549 + }, + "buildp_evidence": { + "sha256": "22b5968d90fecfeef7614583e493fe10cc16bda8b5be82e6f49a5bc2102d3ce5", + "size_bytes": 3370188 + }, + "population": { + "sha256": "48b9d479fb4fd1c3537f9383ce4697d130b6f618658409d74f6233c43b994c7e", + "size_bytes": 462915783 + } + }, + "peak_rss_bytes": 9041723392, + "preservation": { + "all_existing_tables_and_columns_equal": true, + "existing_metadata_preserved": true, + "person_order_ids_ages_and_memberships_equal": true, + "strata_and_mass_log_equal": true, + "tables": { + "family": { + "existing_columns": 4, + "rows": 65206 + }, + "household": { + "existing_columns": 21, + "rows": 57240 + }, + "marital_unit": { + "existing_columns": 4, + "rows": 130729 + }, + "person": { + "existing_columns": 317, + "rows": 166321 + }, + "spm_unit": { + "existing_columns": 11, + "rows": 59900 + }, + "tax_unit": { + "existing_columns": 18, + "rows": 79729 + } + }, + "weights_and_kinds_equal": true + }, + "receipt": "spm_role_stage_wrapper_proof.buildp", + "signal_gate": { + "adult_child_person_count_mismatch_units": 0, + "failure_count": 0, + "frame_projection_sha256": "d4b822448b5fe5aaada549eab31b1cf185d7f0a6ef9073994933e202fde6fedc", + "independent_minor_persons": 132, + "json_details_sha256": "0badc489902fff325906f1d4b729171b9c1ee51e9f0836c138afe0af9012da0b", + "minor_role_share": 0.010868109828097293, + "minor_role_share_band": [ + 0.003, + 0.06 + ], + "passed": true, + "persons_aged_15_to_17": 8669, + "role_missing_values": 0, + "role_share": 0.6052072071523052, + "role_share_band": [ + 0.4, + 0.75 + ], + "unmatched_persons": 0 + }, + "source": { + "dirty_source_digest": "e00d05c480679ee6f9113c36727976df3266d82a1be61b228545126a39de46da", + "head": "6a6d53b2fb2cad7ac7b84634decc2a41125efa92", + "original_proof_script_sha256": "67f722b871047cd60e97e3d7e1c1aa6764a3595ad92af43e9348e77a3e6599d5", + "proof_script_sha256": "81a2f72e6b970865c6cac8683b851534a22d541801d46082b0ab6fb6543d5590", + "tracked_source_patch_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked_source_sha256": {} + }, + "stage_arguments": { + "seed": 0, + "time_period": 2024 + }, + "status": "PASS", + "timing_seconds": { + "load": 2.11, + "original_derivation": 8.24, + "total": 20.69, + "wrapper": 8.04 + } +} diff --git a/experiments/spm_role_stage_proof.py b/experiments/spm_role_stage_proof.py new file mode 100644 index 0000000000..96930f4735 --- /dev/null +++ b/experiments/spm_role_stage_proof.py @@ -0,0 +1,438 @@ +#!/usr/bin/env python3 +"""Prove the SPM independence role on real populations, read-only. + +Two receipts behind ``docs/us-spm-role-stage.md``: + +``base`` + Derive the role for a base built from raw sources (the phase-2 base at + ``~/PolicyEngine/_buildq-runtime/out/base-q3/``) from the pinned complete + Census ASEC person CSVs, through the certified derivation + (``microcosm.build.us_runtime.spm_role_source.derive_spm_role_source``), + attach it to the base frame, and show ``check_spm_composition`` go from + its FAIL count to PASS with no unit re-grouped and no person invented. + +``buildp`` + Run the same derivation against the reviewed Build P parent and compare + the result person for person with the enrichment lane's pinned reference + evidence (``source_spm_person_independence.csv``, SHA-256 pinned in + ``microcosm.data.source_enrichment.SOURCE_EVIDENCE_SHA256``). + +Nothing is written except the JSON receipt. The H5 inputs are opened +read-only and their digests are checked before and after every read (the +derivation does this itself). Run: + + uv run python experiments/spm_role_stage_proof.py base \ + --base-h5 ~/PolicyEngine/_buildq-runtime/out/base-q3/base_populace_us_2024_puf_support.h5 \ + --out experiments/893-spm-role-stage-base-q3-receipt.json + + uv run python experiments/spm_role_stage_proof.py buildp \ + --parent-h5 ~/.cache/huggingface/hub/datasets--policyengine--populace-us/blobs/ \ + --reference-evidence-csv \ + --out experiments/893-spm-role-stage-buildp-agreement-receipt.json +""" + +from __future__ import annotations + +import argparse +import hashlib +import json +import sys +import tempfile +import time +from importlib.metadata import version +from pathlib import Path + +import numpy as np +import pandas as pd + +from microcosm.build.us_runtime.release_gate_preflight import check_spm_composition +from microcosm.build.us_runtime.spm_role_source import ( + ASEC_SPM_ROLE_SOURCES, + NATIVE_SPM_ROLE, + derive_spm_role_source, +) +from microcosm.frame import Frame + +REPOSITORY_ROOT = Path(__file__).resolve().parents[1] +DEFAULT_SOURCE_CACHE = Path.home() / ".cache" / "microcosm" / "cps" / "asec_education" + + +def _sha256(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as stream: + for chunk in iter(lambda: stream.read(8 * 1024 * 1024), b""): + digest.update(chunk) + return digest.hexdigest() + + +def _load_frame(path: Path): + """The release tool's own loader, so the check reads what a release reads. + + A Hugging Face cache blob is named by its digest with no suffix, and the + engine's dataset loader insists on ``.h5``; a symlink under a temporary + directory satisfies the loader without copying or touching the blob. + """ + + tools = REPOSITORY_ROOT / "tools" + if str(tools) not in sys.path: + sys.path.insert(0, str(tools)) + import build_us_fiscal_refresh_release as release # noqa: PLC0415 + + if path.suffix == ".h5": + return release._load_frame(path) + with tempfile.TemporaryDirectory(prefix="spm-role-proof-") as scratch: + alias = Path(scratch) / f"{path.name}.h5" + alias.symlink_to(path) + return release._load_frame(alias) + + +def _with_role(frame: Frame, role: np.ndarray) -> Frame: + tables = {entity: frame.table(entity).copy() for entity in frame.entities} + tables["person"][NATIVE_SPM_ROLE] = np.asarray(role, dtype=bool) + return 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, + ) + + +def _check(frame: Frame) -> dict: + result = check_spm_composition(frame) + return { + "status": result.status, + "summary": result.summary, + "n_units": result.details["n_units"], + "n_units_without_classified_adult": result.details[ + "n_units_without_classified_adult" + ], + "n_units_without_member_aged_18_or_over": result.details[ + "n_units_without_member_aged_18_or_over" + ], + "role_source": result.details["role_source"], + "fallback_columns_present": result.details["fallback_columns_present"], + # A count, never the unit ids: this is an aggregate receipt (the + # 2026-09-23 redaction of the two committed receipts). + "n_offending_units_reported": len(result.rows), + } + + +def _source_paths(cache: Path) -> dict[int, Path]: + return {year: cache / pin.member for year, pin in ASEC_SPM_ROLE_SOURCES.items()} + + +def _environment() -> dict: + return { + "python": sys.version.split()[0], + **{ + name: version(name) + for name in ( + "policyengine-us", + "spm-calculator", + "policyengine-core", + "pandas", + "numpy", + "tables", + ) + }, + } + + +def _role_shares(person: pd.DataFrame, role: np.ndarray) -> dict: + age = pd.to_numeric(person["age"], errors="coerce").to_numpy(dtype=np.float64) + minor = (age >= 15.0) & (age < 18.0) + years = pd.to_numeric(person["source_year"], errors="coerce").astype(int) + by_year = {} + for year in sorted(years.unique()): + mask = (years == year).to_numpy() + by_year[str(int(year))] = { + "persons": int(mask.sum()), + "role_share": float(role[mask].mean()), + "persons_aged_15_to_17": int((mask & minor).sum()), + "role_share_aged_15_to_17": float(role[mask & minor].mean()), + } + return { + "persons": int(len(person)), + "role_true": int(role.sum()), + "role_share": float(role.mean()), + "persons_aged_15_to_17": int(minor.sum()), + "role_true_aged_15_to_17": int((role & minor).sum()), + "role_share_aged_15_to_17": float(role[minor].mean()), + "by_source_year": by_year, + } + + +def _clone_agreement(person: pd.DataFrame, role: np.ndarray) -> dict: + """Support clones repeat a source person; their roles must agree.""" + + key = pd.DataFrame( + { + "source_year": person["source_year"].to_numpy(), + "source_person_id": person["source_person_id"].astype(str).to_numpy(), + "role": role, + } + ) + per_source = key.groupby(["source_year", "source_person_id"], sort=False)[ + "role" + ].nunique() + channels = ( + person["person_support_channel"].astype(str).value_counts().to_dict() + if "person_support_channel" in person + else {} + ) + return { + "distinct_source_persons": int(len(per_source)), + "source_persons_with_disagreeing_clone_roles": int((per_source > 1).sum()), + "person_support_channels": {str(k): int(v) for k, v in channels.items()}, + } + + +def _resolution_audit(before: Frame, after: Frame, role: np.ndarray) -> dict: + """Every offending unit is resolved by its own 15-to-17-year-old, not a new person.""" + + person_before = before.table("person") + person_after = after.table("person") + age = pd.to_numeric(person_after["age"], errors="coerce").to_numpy(np.float64) + membership = person_after["person_spm_unit_id"].to_numpy() + adult_18 = age >= 18.0 + classified = adult_18 | ((age >= 15.0) & role) + units = ( + pd.DataFrame( + {"unit": membership, "adult_18": adult_18, "classified": classified} + ) + .groupby("unit", sort=False)[["adult_18", "classified"]] + .sum() + ) + no_adult_18 = units.index[units["adult_18"] == 0] + member_of = np.isin(membership, no_adult_18.to_numpy()) + resolvers = member_of & (age >= 15.0) & (age < 18.0) & role + return { + "persons_unchanged": int(len(person_before)) == int(len(person_after)), + "person_ids_unchanged": bool( + np.array_equal( + person_before["person_id"].to_numpy(), + person_after["person_id"].to_numpy(), + ) + ), + "spm_membership_unchanged": bool( + np.array_equal( + person_before["person_spm_unit_id"].to_numpy(), + person_after["person_spm_unit_id"].to_numpy(), + ) + ), + "spm_unit_table_unchanged": before.table("spm_unit").equals( + after.table("spm_unit") + ), + "ages_unchanged": bool( + np.array_equal( + pd.to_numeric(person_before["age"], errors="coerce").to_numpy(), + pd.to_numeric(person_after["age"], errors="coerce").to_numpy(), + ) + ), + "persons_aged_18_or_over_unchanged": int(adult_18.sum()) + == int( + ( + pd.to_numeric(person_before["age"], errors="coerce").to_numpy( + np.float64 + ) + >= 18.0 + ).sum() + ), + "units_without_member_aged_18_or_over": int(len(no_adult_18)), + "of_which_resolved_by_own_15_to_17_year_old_with_role": int( + (units.loc[no_adult_18, "classified"] > 0).sum() + ), + "of_which_still_unclassified": int( + (units.loc[no_adult_18, "classified"] == 0).sum() + ), + "resolving_persons_aged_15_to_17": int(resolvers.sum()), + } + + +def prove_base(args: argparse.Namespace) -> dict: + base = args.base_h5.expanduser().resolve() + started = time.perf_counter() + sha = _sha256(base) + sidecar = base.with_name(base.name + ".sha256") + sidecar_sha = sidecar.read_text().split()[0] if sidecar.exists() else None + source_paths = _source_paths(args.source_cache.expanduser()) + + t0 = time.perf_counter() + frame = _load_frame(base) + load_seconds = time.perf_counter() - t0 + before = _check(frame) + + t0 = time.perf_counter() + result = derive_spm_role_source(base, source_paths, expected_parent_sha256=sha) + derive_seconds = time.perf_counter() - t0 + + person = frame.table("person") + order_preserved = bool( + np.array_equal( + result.evidence["person_id"].to_numpy(), person["person_id"].to_numpy() + ) + ) + if not order_preserved: + raise SystemExit("Derived role order does not match the frame's person order.") + enriched = _with_role(frame, result.role) + after = _check(enriched) + + receipt = { + "receipt": "spm_role_stage_proof.base", + "base_h5": str(base), + "base_sha256": sha, + "base_sha256_sidecar": sidecar_sha, + "base_sha256_matches_sidecar": sidecar_sha == sha, + "source_csvs": { + str(year): { + "path": str(path), + "pinned_sha256": ASEC_SPM_ROLE_SOURCES[year].csv_sha256, + "size_bytes": path.stat().st_size, + } + for year, path in sorted(source_paths.items()) + }, + "environment": _environment(), + "frame": { + "households": int(frame.n("household")), + "persons": int(frame.n("person")), + "spm_units": int(frame.n("spm_unit")), + }, + "before": before, + "derivation": result.provenance, + "after": after, + "role": _role_shares(person, result.role), + "clones": _clone_agreement(person, result.role), + "resolution": _resolution_audit(frame, enriched, result.role), + "timing_seconds": { + "frame_load": round(load_seconds, 2), + "derive_role": round(derive_seconds, 2), + "total": round(time.perf_counter() - started, 2), + }, + } + receipt["base_sha256_after"] = _sha256(base) + receipt["base_unchanged"] = receipt["base_sha256_after"] == sha + return receipt + + +def prove_buildp(args: argparse.Namespace) -> dict: + from microcosm.data.source_enrichment import ( + EXPECTED_COUNTS, + PARENT_BUILD_ID, + PARENT_DATASET_SHA256, + SOURCE_EVIDENCE_SHA256, + ) + + parent = args.parent_h5.expanduser().resolve() + reference = args.reference_evidence_csv.expanduser().resolve() + started = time.perf_counter() + parent_sha = _sha256(parent) + if parent_sha != PARENT_DATASET_SHA256: + raise SystemExit( + f"{parent} is not the reviewed Build P parent " + f"({parent_sha} != {PARENT_DATASET_SHA256})." + ) + reference_bytes = reference.read_bytes() + reference_sha = hashlib.sha256(reference_bytes).hexdigest() + source_paths = _source_paths(args.source_cache.expanduser()) + + t0 = time.perf_counter() + result = derive_spm_role_source( + parent, source_paths, expected_parent_sha256=PARENT_DATASET_SHA256 + ) + derive_seconds = time.perf_counter() - t0 + evidence_bytes = result.evidence.to_csv(index=False, lineterminator="\n").encode() + evidence_sha = hashlib.sha256(evidence_bytes).hexdigest() + + certified = pd.read_csv(reference) + merged = result.evidence.merge( + certified, + on=["person_id", "person_spm_unit_id"], + how="outer", + suffixes=("_stage", "_certified"), + indicator=True, + ) + role_column = [c for c in certified.columns if c.startswith("is_spm")][0] + both = merged["_merge"].eq("both") + equal = merged.loc[both, f"{role_column}_stage"].astype(bool) == merged.loc[ + both, f"{role_column}_certified" + ].astype(bool) + + t0 = time.perf_counter() + frame = _load_frame(parent) + load_seconds = time.perf_counter() - t0 + before = _check(frame) + after = _check(_with_role(frame, result.role)) + + receipt = { + "receipt": "spm_role_stage_proof.buildp", + "parent_build_id": PARENT_BUILD_ID, + "parent_h5": str(parent), + "parent_sha256": parent_sha, + "reference_evidence_csv": str(reference), + "reference_evidence_sha256": reference_sha, + "reference_evidence_sha256_pinned": SOURCE_EVIDENCE_SHA256, + "reference_matches_pin": reference_sha == SOURCE_EVIDENCE_SHA256, + "environment": _environment(), + "derivation": result.provenance, + "expected_counts": dict(EXPECTED_COUNTS), + "expected_counts_match": { + key: result.provenance.get(key) == value + for key, value in EXPECTED_COUNTS.items() + }, + "agreement": { + "stage_evidence_sha256": evidence_sha, + "stage_evidence_bytes_equal_reference": evidence_bytes == reference_bytes, + "rows_stage": int(len(result.evidence)), + "rows_certified": int(len(certified)), + "rows_in_both": int(both.sum()), + "rows_only_in_stage": int(merged["_merge"].eq("left_only").sum()), + "rows_only_in_certified": int(merged["_merge"].eq("right_only").sum()), + "roles_equal": int(equal.sum()), + "roles_differ": int((~equal).sum()), + }, + "frame": { + "households": int(frame.n("household")), + "persons": int(frame.n("person")), + "spm_units": int(frame.n("spm_unit")), + }, + "before": before, + "after": after, + "timing_seconds": { + "frame_load": round(load_seconds, 2), + "derive_role": round(derive_seconds, 2), + "total": round(time.perf_counter() - started, 2), + }, + } + receipt["parent_sha256_after"] = _sha256(parent) + receipt["parent_unchanged"] = receipt["parent_sha256_after"] == parent_sha + return receipt + + +def main(argv: list[str] | None = None) -> int: + parser = argparse.ArgumentParser(description=__doc__) + sub = parser.add_subparsers(dest="command", required=True) + base = sub.add_parser("base") + base.add_argument("--base-h5", type=Path, required=True) + base.add_argument("--source-cache", type=Path, default=DEFAULT_SOURCE_CACHE) + base.add_argument("--out", type=Path, required=True) + buildp = sub.add_parser("buildp") + buildp.add_argument("--parent-h5", type=Path, required=True) + buildp.add_argument("--reference-evidence-csv", type=Path, required=True) + buildp.add_argument("--source-cache", type=Path, default=DEFAULT_SOURCE_CACHE) + buildp.add_argument("--out", type=Path, required=True) + args = parser.parse_args(argv) + receipt = prove_base(args) if args.command == "base" else prove_buildp(args) + args.out.write_text(json.dumps(receipt, indent=2, sort_keys=False) + "\n") + print( + json.dumps( + {k: receipt[k] for k in ("before", "after") if k in receipt}, indent=2 + ) + ) + print(f"wrote {args.out}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/experiments/spm_role_stage_wrapper_proof.py b/experiments/spm_role_stage_wrapper_proof.py new file mode 100644 index 0000000000..3f0f86a1ab --- /dev/null +++ b/experiments/spm_role_stage_wrapper_proof.py @@ -0,0 +1,463 @@ +#!/usr/bin/env python3 +"""Run the real SPM role wrapper and gate against existing pinned populations. + +Preparation does not execute this pilot. Once the source and pins are ready: + + .venv/bin/python experiments/spm_role_stage_wrapper_proof.py base \ + --out experiments/893-spm-role-stage-wrapper-base-q3-receipt.json + .venv/bin/python experiments/spm_role_stage_wrapper_proof.py buildp \ + --out experiments/893-spm-role-stage-wrapper-buildp-receipt.json + +Input paths and hashes come from the historical receipts committed at HEAD. +All three Census CSVs must already exist locally and match the runtime pins. +No input is written, no model simulation runs, and no download is attempted. +Only a new aggregate JSON receipt is written, with exclusive creation. Existing +receipts are never replaced. Diagnostics suppress exception text and raw rows. +""" + +from __future__ import annotations + +import argparse +import contextlib +import hashlib +import json +import os +import resource +import socket +import subprocess +import sys +import time +from collections.abc import Iterator +from datetime import UTC, datetime +from pathlib import Path +from typing import Any + +ROOT = Path(__file__).resolve().parents[1] +HISTORICAL_RECEIPTS = { + "base": "experiments/893-spm-role-stage-base-q3-receipt.json", + "buildp": "experiments/893-spm-role-stage-buildp-agreement-receipt.json", +} +SOURCE_PATHS = ("packages", "tools", "pyproject.toml", "uv.lock") +SOURCE_SUFFIXES = {".py", ".json", ".yaml", ".yml", ".toml", ".lock"} + + +class ProofRefusalError(Exception): + """A named aggregate check failed; no row-bearing detail is emitted.""" + + +def _require(condition: bool, label: str) -> None: + if not condition: + raise ProofRefusalError(label) + + +def _sha256(path: Path) -> str: + with path.open("rb") as stream: + return hashlib.file_digest(stream, "sha256").hexdigest() + + +def _json_digest(value: Any) -> str: + payload = json.dumps(value, sort_keys=True, separators=(",", ":")).encode() + return hashlib.sha256(payload).hexdigest() + + +def _git(*args: str) -> bytes: + return subprocess.run( + ["git", *args], cwd=ROOT, check=True, capture_output=True + ).stdout + + +def _source_fingerprint() -> dict[str, Any]: + """Bind HEAD plus dirty runtime code without serializing the patch.""" + patch = _git("diff", "--binary", "HEAD", "--", *SOURCE_PATHS) + untracked = {} + for raw in _git( + "ls-files", "--others", "--exclude-standard", "-z", "--", *SOURCE_PATHS + ).split(b"\0"): + if not raw: + continue + relative = os.fsdecode(raw) + path = ROOT / relative + if path.is_file() and path.suffix in SOURCE_SUFFIXES: + untracked[relative] = _sha256(path) + payload = { + "head": _git("rev-parse", "HEAD").decode().strip(), + "tracked_source_patch_sha256": hashlib.sha256(patch).hexdigest(), + "untracked_source_sha256": untracked, + "proof_script_sha256": _sha256(Path(__file__).resolve()), + "original_proof_script_sha256": _sha256( + ROOT / "experiments/spm_role_stage_proof.py" + ), + } + return {**payload, "dirty_source_digest": _json_digest(payload)} + + +def _historical_receipt(mode: str) -> dict[str, Any]: + relative = HISTORICAL_RECEIPTS[mode] + committed = _git("show", f"HEAD:{relative}") + _require((ROOT / relative).read_bytes() == committed, "historical_receipt_changed") + return json.loads(committed) + + +@contextlib.contextmanager +def _offline() -> Iterator[None]: + """Reject accidental Python socket connections, including source fetches.""" + original_connect = socket.socket.connect + original_connect_ex = socket.socket.connect_ex + + def refuse(*_args: Any, **_kwargs: Any) -> None: + raise ProofRefusalError("network_connection_attempted") + + socket.socket.connect = refuse + socket.socket.connect_ex = refuse + try: + yield + finally: + socket.socket.connect = original_connect + socket.socket.connect_ex = original_connect_ex + + +@contextlib.contextmanager +def _quiet_diagnostics() -> Iterator[None]: + """Suppress Python and native-library diagnostics while touching populations.""" + sys.stdout.flush() + sys.stderr.flush() + originals = [os.dup(descriptor) for descriptor in (1, 2)] + try: + with open(os.devnull, "w") as quiet: + for descriptor in (1, 2): + os.dup2(quiet.fileno(), descriptor) + with contextlib.redirect_stdout(quiet), contextlib.redirect_stderr(quiet): + yield + finally: + for descriptor, original in zip((1, 2), originals, strict=True): + os.dup2(original, descriptor) + os.close(original) + + +def _table_digest(table: Any) -> str: + import pandas as pd + + schema = [(str(name), repr(dtype)) for name, dtype in table.dtypes.items()] + digest = hashlib.sha256(_json_digest(schema).encode()) + digest.update(pd.util.hash_pandas_object(table, index=True).to_numpy().tobytes()) + return digest.hexdigest() + + +def _frame_snapshot(frame: Any) -> dict[str, Any]: + import pandas as pd + + return { + "tables": { + entity: _table_digest(frame.table(entity)) for entity in frame.entities + }, + "links": {name: _table_digest(frame.link(name)) for name in frame.links}, + "weights": { + entity: { + "kind": frame.weights_for(entity).kind.value, + "sha256": hashlib.sha256( + frame.weights_for(entity).values.tobytes() + ).hexdigest(), + } + for entity in frame.weighted_entities + }, + "strata_sha256": hashlib.sha256( + pd.util.hash_pandas_object(frame.strata, index=True).to_numpy().tobytes() + ).hexdigest(), + } + + +def _preservation(before: Any, after: Any, role_name: str) -> dict[str, Any]: + import numpy as np + import pandas as pd + + from microcosm.build.us_runtime.spm_independence_role import ( + US_SPM_INDEPENDENCE_ROLE_PROVENANCE_KEY, + ) + + _require(before.schema == after.schema, "schema_changed") + _require(before.entities == after.entities, "entities_changed") + _require(before.links == after.links, "links_changed") + tables = {} + for entity in before.entities: + original = before.table(entity) + output = after.table(entity) + additions = [column for column in output if column not in original] + expected_additions = ( + [role_name] if entity == "person" and role_name not in original else [] + ) + _require(additions == expected_additions, "unexpected_output_columns") + pd.testing.assert_frame_equal( + original, output.loc[:, original.columns], check_exact=True + ) + tables[entity] = { + "rows": len(original), + "existing_columns": len(original.columns), + } + for name in before.links: + pd.testing.assert_frame_equal( + before.link(name), after.link(name), check_exact=True + ) + _require( + before.weighted_entities == after.weighted_entities, "weight_entities_changed" + ) + for entity in before.weighted_entities: + old, new = before.weights_for(entity), after.weights_for(entity) + _require(old.kind == new.kind, "weight_kind_changed") + _require(np.array_equal(old.values, new.values), "weight_values_changed") + pd.testing.assert_series_equal(before.strata, after.strata, check_exact=True) + _require(before.mass_log == after.mass_log, "mass_log_changed") + for key, value in before.metadata.items(): + if key != US_SPM_INDEPENDENCE_ROLE_PROVENANCE_KEY: + _require(after.metadata.get(key) == value, "existing_metadata_changed") + return { + "all_existing_tables_and_columns_equal": True, + "person_order_ids_ages_and_memberships_equal": True, + "weights_and_kinds_equal": True, + "strata_and_mass_log_equal": True, + "existing_metadata_preserved": True, + "tables": tables, + } + + +def _composition(frame: Any) -> dict[str, Any]: + from microcosm.build.us_runtime.spm_composition import check_spm_composition + + check = check_spm_composition(frame) + return { + "status": check.status, + **{ + key: check.details[key] + for key in ( + "n_units", + "n_units_without_classified_adult", + "n_units_without_member_aged_18_or_over", + "role_source", + ) + }, + } + + +def prove(mode: str, state: dict[str, str], source: dict[str, Any]) -> dict[str, Any]: + from importlib.metadata import version + + import numpy as np + from spm_role_stage_proof import _environment, _load_frame + + from microcosm.build.us_runtime.spm_independence_role import ( + US_SPM_INDEPENDENCE_ROLE_PROVENANCE_KEY, + us_spm_independence_role_signal_gate, + with_us_spm_independence_role, + ) + from microcosm.build.us_runtime.spm_role_source import ( + ASEC_SPM_ROLE_SOURCES, + EVIDENCE_SPM_ROLE, + NATIVE_SPM_ROLE, + derive_spm_role_source, + ) + from microcosm.data.source_enrichment import ( + PARENT_DATASET_SHA256, + SOURCE_EVIDENCE_SHA256, + ) + + started = time.perf_counter() + historical = _historical_receipt(mode) + base_receipt = _historical_receipt("base") + input_path = Path(historical["base_h5" if mode == "base" else "parent_h5"]) + input_sha = historical["base_sha256" if mode == "base" else "parent_sha256"] + if mode == "buildp": + _require(input_sha == PARENT_DATASET_SHA256, "buildp_parent_pin_drift") + source_paths = {} + inputs = {"population": (input_path, input_sha)} + for year, pin in ASEC_SPM_ROLE_SOURCES.items(): + recorded = base_receipt["source_csvs"][str(year)] + _require(recorded["pinned_sha256"] == pin.csv_sha256, "source_pin_drift") + _require(recorded["size_bytes"] == pin.csv_size_bytes, "source_size_pin_drift") + path = Path(recorded["path"]) + source_paths[year] = path + inputs[f"asec_{year}"] = (path, pin.csv_sha256) + _require(set(source_paths) == {2022, 2023, 2024}, "unexpected_source_years") + if mode == "buildp": + reference_sha = historical["reference_evidence_sha256"] + _require(reference_sha == SOURCE_EVIDENCE_SHA256, "buildp_evidence_pin_drift") + inputs["buildp_evidence"] = ( + Path(historical["reference_evidence_csv"]), + reference_sha, + ) + state["phase"] = "verify_input_pins" + for path, expected in inputs.values(): + _require(path.is_file(), "required_local_input_missing") + _require(_sha256(path) == expected, "input_digest_mismatch") + + state["phase"] = "load_population" + checkpoint = time.perf_counter() + frame = _load_frame(input_path) + load_seconds = time.perf_counter() - checkpoint + snapshot = _frame_snapshot(frame) + before = _composition(frame) + state["phase"] = "actual_stage_wrapper" + checkpoint = time.perf_counter() + enriched = with_us_spm_independence_role( + frame, seed=0, time_period=2024, asec_spm_role_source_paths=source_paths + ) + wrapper_seconds = time.perf_counter() - checkpoint + state["phase"] = "actual_stage_signal_gate" + gate = us_spm_independence_role_signal_gate(enriched) + gate_details_sha256 = _json_digest(gate.details) + _require(gate.passed, "actual_stage_signal_gate_failed") + _require( + US_SPM_INDEPENDENCE_ROLE_PROVENANCE_KEY in enriched.metadata, + "stage_provenance_missing", + ) + state["phase"] = "original_derivation_agreement" + checkpoint = time.perf_counter() + reference = derive_spm_role_source( + input_path, source_paths, expected_parent_sha256=input_sha + ) + derivation_seconds = time.perf_counter() - checkpoint + person = enriched.table("person") + for column in ("person_id", "person_spm_unit_id"): + _require( + np.array_equal( + person[column].to_numpy(), reference.evidence[column].to_numpy() + ), + "derivation_identity_order_disagreement", + ) + role = person[NATIVE_SPM_ROLE].to_numpy(dtype=bool) + _require(np.array_equal(role, reference.role), "wrapper_derivation_disagreement") + for key in ( + "persons_joined", + "native_spm_units", + "unmatched_persons", + "total_source_people", + "total_source_units", + "adult_child_person_count_mismatch_units", + "independent_minor_persons", + "true_role_persons", + "minor_only_units_resolved", + "classification_changed_units_vs_age_only", + ): + _require( + reference.provenance[key] == historical["derivation"][key], + "historical_derivation_count_drift", + ) + evidence = person[["person_id", "person_spm_unit_id"]].copy() + evidence[EVIDENCE_SPM_ROLE] = role + evidence_bytes = evidence.to_csv(index=False, lineterminator="\n").encode() + evidence_sha = hashlib.sha256(evidence_bytes).hexdigest() + if mode == "buildp": + _require( + evidence_bytes == inputs["buildp_evidence"][0].read_bytes(), + "buildp_evidence_disagreement", + ) + state["phase"] = "preservation_audit" + preservation = _preservation(frame, enriched, NATIVE_SPM_ROLE) + _require(_frame_snapshot(frame) == snapshot, "wrapper_mutated_input_frame") + after = _composition(enriched) + for label, measured in (("before", before), ("after", after)): + for key, value in measured.items(): + _require(value == historical[label][key], "historical_composition_drift") + state["phase"] = "verify_unchanged_input_bytes" + for path, expected in inputs.values(): + _require(_sha256(path) == expected, "input_bytes_changed") + _require(_source_fingerprint() == source, "source_changed_during_proof") + _historical_receipt(mode) + _historical_receipt("base") + details = gate.details + provenance = enriched.metadata[US_SPM_INDEPENDENCE_ROLE_PROVENANCE_KEY] + return { + "receipt": f"spm_role_stage_wrapper_proof.{mode}", + "status": "PASS", + "completed_at_utc": datetime.now(UTC).isoformat(), + "source": source, + "environment": { + **_environment(), + **{ + name: version(name) + for name in ("microcosm-build", "microcosm-frame", "microcosm-data") + }, + }, + "stage_arguments": {"seed": 0, "time_period": 2024}, + "historical_receipt_sha256": _sha256(ROOT / HISTORICAL_RECEIPTS[mode]), + "inputs": { + label: {"sha256": expected, "size_bytes": path.stat().st_size} + for label, (path, expected) in inputs.items() + }, + "input_bytes_unchanged": True, + "input_frame_unchanged": True, + "before": before, + "after": after, + "agreement": { + "persons_compared": len(role), + "roles_differ": 0, + "evidence_sha256": evidence_sha, + "buildp_reference_bytes_equal": True if mode == "buildp" else None, + }, + "preservation": preservation, + "signal_gate": { + "passed": gate.passed, + "failure_count": len(gate.failures), + "json_details_sha256": gate_details_sha256, + **{ + key: details[key] + for key in ( + "role_share", + "role_share_band", + "minor_role_share", + "minor_role_share_band", + "persons_aged_15_to_17", + "independent_minor_persons", + "role_missing_values", + ) + }, + "frame_projection_sha256": provenance["frame_projection_sha256"], + "unmatched_persons": provenance["unmatched_persons"], + "adult_child_person_count_mismatch_units": provenance[ + "adult_child_person_count_mismatch_units" + ], + }, + "timing_seconds": { + "load": round(load_seconds, 2), + "wrapper": round(wrapper_seconds, 2), + "original_derivation": round(derivation_seconds, 2), + "total": round(time.perf_counter() - started, 2), + }, + "peak_rss_bytes": int( + resource.getrusage(resource.RUSAGE_SELF).ru_maxrss + * (1 if sys.platform == "darwin" else 1024) + ), + } + + +def main(argv: list[str] | None = None) -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("mode", choices=tuple(HISTORICAL_RECEIPTS)) + parser.add_argument("--out", type=Path, required=True) + args = parser.parse_args(argv) + state = {"phase": "prepare"} + try: + _require(not args.out.exists(), "output_already_exists") + _require(args.out.parent.is_dir(), "output_directory_missing") + with _quiet_diagnostics(), _offline(): + source = _source_fingerprint() + receipt = prove(args.mode, state, source) + state["phase"] = "write_new_aggregate_receipt" + payload = json.dumps(receipt, indent=2, sort_keys=True, allow_nan=False) + "\n" + with args.out.open("x") as stream: + stream.write(payload) + except BaseException as error: + # Exception messages and tracebacks can contain microdata values. + failure = { + "status": "FAIL", + "phase": state["phase"], + "error_type": type(error).__name__, + } + if isinstance(error, ProofRefusalError): + failure["check"] = str(error) + print(json.dumps(failure), file=sys.stderr) + return 1 + print(json.dumps({"status": "PASS", "mode": args.mode, "receipt": str(args.out)})) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/packages/microcosm-build/src/microcosm/build/frame_serializer_registry.py b/packages/microcosm-build/src/microcosm/build/frame_serializer_registry.py index b80541bb1f..00ddd7612a 100644 --- a/packages/microcosm-build/src/microcosm/build/frame_serializer_registry.py +++ b/packages/microcosm-build/src/microcosm/build/frame_serializer_registry.py @@ -155,6 +155,21 @@ class HdfWriteExclusion: version_owner="TARGET_FRAME_CHECKPOINT_SCHEMA_VERSION", nullable_boolean_storage="bool_values_optional_uint8_mask", ), + FrameSerializerSpec( + serializer_id="spm_role_derivation_projection", + writer=HdfWriteSite( + "packages/microcosm-build/src/microcosm/build/us_runtime/" + "spm_independence_role.py", + "_write_role_projection", + ), + backend="pandas.HDFStore fixed", + routes=( + "US SPM independence role stage: scratch parent H5 handed to the " + "certified derive_spm_role_source", + ), + version_owner="derive_spm_role_source parent person/spm_unit contract", + nullable_boolean_storage="numpy_bool_or_object_pd_na_v1", + ), ) diff --git a/packages/microcosm-build/src/microcosm/build/source_manifest.py b/packages/microcosm-build/src/microcosm/build/source_manifest.py index c8476167d1..7cd08657a7 100644 --- a/packages/microcosm-build/src/microcosm/build/source_manifest.py +++ b/packages/microcosm-build/src/microcosm/build/source_manifest.py @@ -87,6 +87,7 @@ "derive_prior_year_income", "derive_snap_abawd_discretionary_exemption", "derive_snap_take_up", + "derive_spm_independence_role", "derive_puf_policyengine_variables", "derive_mortgage_balance_hints", "derive_ons_household_composition", 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 24a78e50ba..c70675d908 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_390 -EXPECTED_RESOLVED_BINDING_FIELD_COUNT = 9_772 -EXPECTED_CONFIGURATION_FIELD_COUNT = 42_162 +EXPECTED_AUTHORED_FIELD_COUNT = 32_400 +EXPECTED_RESOLVED_BINDING_FIELD_COUNT = 9_780 +EXPECTED_CONFIGURATION_FIELD_COUNT = 42_180 class FieldUsageError(AssertionError): @@ -377,8 +377,8 @@ def _path_inventory(rows: Sequence[tuple[str, object]]) -> tuple[int, str]: "8a186065f5b8ffc59bc3f62fe927975e6f36bc1e913aa61761652c9a8aa67988", ), "generated_authorities": ( - 8_606, - "3f20975597d93f7313583a944eeb9d6437651c4ff20e67628bf6bf4c5aa9f004", + 8_614, + "66eec1216f404e43f7605fba0016d1cd666e71ebe3e35278d14a944d8b48b619", ), "geography_assignment": ( 28, @@ -485,8 +485,8 @@ def _path_inventory(rows: Sequence[tuple[str, object]]) -> tuple[int, str]: "d6782c5de5bbed1bdc6bf653c4a6d4aadcad4ccc72d35e1092e130fcb04680a3", ), "source_stages": ( - 1_702, - "be3e24b53955b9dabccfc7e779212b1e97daf0c0992be3c183e391bf695ed4ee", + 1_712, + "a46d5e657d919db23ee7752d844bd8bbe59c15321dec07102837452d7994d8dd", ), "spine_assembly_household_mass_shares": ( 2, 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 2f08ec4e38..6228dd7295 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 @@ -350,18 +350,18 @@ "acs_person_predictors": "878c788a6f037d7aca12b3586ea034eff04f3034ffa11935a736493042551f25", "authority": "9d4a9672a0f03039b1fe874b9fe21ed575be0d29f14afc396d03cdf5c809bdd2", "early_families": "4aa9f736fd76e83955477ad1667e58f48f264783f05bdc7f0102cd32d61323bd", - "full_checkpoint": "c66844ca246fb0277e648691a91fe7bea2a21c26980b398017af90f3128521c5", + "full_checkpoint": "25d41aa00362261774ec88bd87f65a1c72c24eb407fcf2c517b8795c7220bdb2", "gap_fill_schedule": "1c31f9868f7884347cc19cf1ff65da43f950b9114941a715bab168246db414a7", "graph_nodes": "40cd51ffdfe2e9d9d08d48c08e8ded9de1e4b134783bab05c4abc6ad5c72ca1e", "geography_assignment": "f49425ca8734ac559c73cf44f6458d86d3162a48956b98a27e6e758959361585", "late_families": "d91f9ff0eb52f43e7b6eed3d5c58c37abe1620c3a11021da15dae9c10e16d382", - "late_resource_semantics": "895ffd419de464a761669a5c3bf68db66e3d1a273c47631de80778a6c7f73b57", + "late_resource_semantics": "2c51a57c2265a41503e048c2acecd2ae84871e870f2b7e84d46c13129041e551", "late_schedule": "e59c019d3d454eac99ac0ac209b6c5b6faaf9bdfcaeee18c36a25be19bf7da2f", "ownership": "5f64f0aac49e2313177564f71876bffc8c81b3ded4df701e70930e60e9c98356", "primary_tuples": "987b501c695e31f45521c4a178528f75ab3df22c09bc407b182213b2de99ee57", - "seed_map": "2db648c8740ce0713f52e34b46e764056f91c59c1754b8d553998f41ba831a6b", - "seed_protocol": "0f6c58a987c54f7a129c325d4ddef449890f0f73cb140ec859dff806ccbe4f1a", - "source_manifest": "d6849714bb9d6f64c000193a871c324b6b82850100db6cb3196f5f6e417dc494", + "seed_map": "a6feafaf62ed99b4f3fa9fee32e986f83919aed7335848df6470db6ecd17987d", + "seed_protocol": "45f82554869c7a966b3c12b71edab43a6c887806b0fc6e70cd7598e62f375922", + "source_manifest": "a87278445d928ea20e15935a8cc07312d6e819e34409b04e8c814f17910d828f", "take_up": "9522ce40f7dea569312dd7a7beb474e5a5afadd2f1e10cb5876534c3ef623d35", "tail": "ac92829c88a1a4fb6460d61190918d5d99c6c377fc8dd8f62f02b332d09bf59c", } @@ -439,7 +439,7 @@ "seed_sites": 53, "seed_streams": 14, "source_operators": 16, - "source_stages": 37, + "source_stages": 38, "stacked_checkpoint_full_components": 13, "stacked_checkpoint_pool_code_components": 19, "stacked_checkpoint_static_components": 10, @@ -1188,7 +1188,7 @@ def add( "source manifest digest differs": sha256_json(source_manifest) == EXPECTED_HASHES["source_manifest"], "stage count differs": len(_array(sources["stages"], "source stages")) - == 37, + == 38, }, homes=("/sources/stage_manifest", "/sources/stages"), consumers=( diff --git a/packages/microcosm-build/src/microcosm/build/spec_engine/schema/sources.schema.json b/packages/microcosm-build/src/microcosm/build/spec_engine/schema/sources.schema.json index 11abb21818..ec5d121779 100644 --- a/packages/microcosm-build/src/microcosm/build/spec_engine/schema/sources.schema.json +++ b/packages/microcosm-build/src/microcosm/build/spec_engine/schema/sources.schema.json @@ -1921,6 +1921,18 @@ "kind" ] }, + { + "type": "object", + "additionalProperties": false, + "properties": { + "kind": { + "const": "derive_spm_independence_role" + } + }, + "required": [ + "kind" + ] + }, { "type": "object", "additionalProperties": false, 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 95b4b0accf..65c22eecef 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":925,"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":"5a209930880c1dd03caba90feee358b1057aeed55b99b26b6ebee47d530689ee","engine_version_ref":{"kind":"engine_abi_lock","pointer":"/engine/version"},"input_count":925,"sha256":"d0f660fdbe3ae839dc5e68b3b4887ff07013ccfe321a3bf7ea99fc6de3a9af4f"},"entry_count":1058,"manifest_sha256":"df42a6d95e4b98ce158334014dc9524de8f7791757eeaf3c6392d8d9b8469edf","schema_version":1,"sha256":"79255de7b063763bca4cd63102b970510090459dfaefee3f4fea68ebbafe0b57","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":991}},"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":"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_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"}]}} diff --git a/packages/microcosm-build/src/microcosm/build/us/release_input_coverage_manifest.json b/packages/microcosm-build/src/microcosm/build/us/release_input_coverage_manifest.json index 180786a8a3..79218461f1 100644 --- a/packages/microcosm-build/src/microcosm/build/us/release_input_coverage_manifest.json +++ b/packages/microcosm-build/src/microcosm/build/us/release_input_coverage_manifest.json @@ -243,6 +243,10 @@ "is_separated": { "status": "required" }, + "is_spm_independent_minor_role": { + "note": "The one dataset source input policyengine_us.spm.DATASET_SOURCE_INPUTS declares: the measured Census SPM independence role, stored before any age gate, that lets spm-calculator classify a 15-to-17-year-old SPM unit head or spouse as an adult. Without it one such unit refuses the whole population's SPM measurement (SPM_COMPOSITION_REQUIRED) and the 104 state SPM poverty rows cannot be validated. Written by the spm_independence_role base-builder stage from the SHA-pinned complete Census ASEC person files through the certified derive_spm_role_source; the certified default carries it through the Build P source enrichment. Required with NO reviewed exclusion: the anti-rot check would fail an exclusion whose column carries signal, and the certified default's does.", + "status": "required" + }, "is_surviving_spouse": { "status": "required" }, @@ -546,11 +550,11 @@ } }, "counts": { - "required": 166, + "required": 167, "reviewed_exclusion": 7, - "total": 173 + "total": 174 }, - "derivation": "Required surface = input columns in the pinned, sha-verified ecps_parity_reference.json populated layers, plus the documented post-reference fsla_overtime_premium, qualified_passenger_vehicle_loan_interest, five desired retirement-contribution inputs, meets_ssi_disability_criteria required by shipped validation probes, the #282 Schedule-D capital-gain-distributions route leg schedule_d_capital_gain_distributions (PolicyEngine/microcosm#462), and the three ASEC reported-receipt inputs receives_wic, receives_snap, receives_tanf that the ACS local-area transfer requires in its donor (PolicyEngine/microcosm#978 option 1). status='reviewed_exclusion' for ecps_parity_known_gaps.json entries (reason+issue from that register); EXCEPT every primary-source restoration pinned by RESTORED_REFERENCE_ECPS_REQUIRED_INPUTS (including the Section 199A QBI family), and the SSI countable-resource asset inputs (bank_account_assets, stock_assets, bond_assets), which are status='required' with NO exclusion per PolicyEngine/microcosm#368 so the gate fails on today's artifacts and asset restoration (Deliverable 2) turns it green. All other populated layers are 'required'. Regenerate with tools/build_us_release_input_coverage_manifest.py.", + "derivation": "Required surface = input columns in the pinned, sha-verified ecps_parity_reference.json populated layers, plus the documented post-reference fsla_overtime_premium, qualified_passenger_vehicle_loan_interest, five desired retirement-contribution inputs, meets_ssi_disability_criteria required by shipped validation probes, the #282 Schedule-D capital-gain-distributions route leg schedule_d_capital_gain_distributions (PolicyEngine/microcosm#462), the three ASEC reported-receipt inputs receives_wic, receives_snap, receives_tanf that the ACS local-area transfer requires in its donor (PolicyEngine/microcosm#978 option 1), and the engine's declared dataset source input is_spm_independent_minor_role (the spm_independence_role base-builder stage; PolicyEngine/microcosm#893). status='reviewed_exclusion' for ecps_parity_known_gaps.json entries (reason+issue from that register); EXCEPT every primary-source restoration pinned by RESTORED_REFERENCE_ECPS_REQUIRED_INPUTS (including the Section 199A QBI family), and the SSI countable-resource asset inputs (bank_account_assets, stock_assets, bond_assets), which are status='required' with NO exclusion per PolicyEngine/microcosm#368 so the gate fails on today's artifacts and asset restoration (Deliverable 2) turns it green. All other populated layers are 'required'. Regenerate with tools/build_us_release_input_coverage_manifest.py.", "description": "Declared full-coverage contract for a US release: every input column the reference eCPS exports must be persisted as a key with non-default signal, or carry a reviewed exclusion. Enforced as a hard release gate (microcosm.build.us_runtime.release_input_coverage) that generalizes assert_required_us_release_source_columns from 5 columns to the full eCPS input surface.", "issue": "PolicyEngine/microcosm#368", "reference": { diff --git a/packages/microcosm-build/src/microcosm/build/us/source_stages.json b/packages/microcosm-build/src/microcosm/build/us/source_stages.json index 07fd9d9c93..8b5d06c0c8 100644 --- a/packages/microcosm-build/src/microcosm/build/us/source_stages.json +++ b/packages/microcosm-build/src/microcosm/build/us/source_stages.json @@ -2064,6 +2064,33 @@ ], "notes": "Exact measured ASEC mappings from archived commit 42ed5d45c56df80d754fbe24cce21cfeb8d05cbe datasets/cps/cps.py lines 1069-1075 and 1209-1221: is_household_head <- P_SEQ == 1; is_separated <- A_MARITL == 6; is_surviving_spouse <- A_MARITL == 4. Nothing is imputed. The stage fails unless every frame household has exactly one P_SEQ == 1 record (PH_SEQ before support cloning, person_household_id after cloning)." }, + { + "stage": "spm_independence_role", + "survey": "Census CPS ASEC", + "source": "https://www.census.gov/programs-surveys/cps.html", + "grain": "person", + "artifacts": [ + { + "kind": "public_microdata", + "format": "census_asec", + "vintage": "2022-2024 pooled", + "locator": "SHA-pinned complete Census CPS ASEC public-use person files pppub23.csv, pppub24.csv and pppub25.csv (survey years 2023-2025, income years 2022-2024): SPM unit head flag (SPM_HEAD), family type (A_FAMTYP) and family relationship (A_FAMREL), joined to each pooled person by income year and exact 22-digit PERIDNUM" + } + ], + "operations": [ + { + "kind": "read_table", + "table": "person" + }, + { + "kind": "derive_spm_independence_role" + } + ], + "outputs": [ + "is_spm_independent_minor_role" + ], + "notes": "The one dataset source input policyengine_us.spm.DATASET_SOURCE_INPUTS declares. No frozen census_cps input carries SPM_HEAD and only the 2024 vintage carries A_FAMTYP/A_FAMREL, so the role is restored from the pinned complete Census person CSVs through microcosm.build.us_runtime.spm_role_source.derive_spm_role_source: is_spm_independent_minor_role <- SPM_HEAD == 1 OR (A_FAMTYP in {1,4} AND A_FAMREL in {1,2}), stored before any age gate. The stage fails unless every person joins exactly one pinned Census row, every native SPM unit is one complete source unit with exactly one SPM_HEAD, derived adult/child/person counts reproduce SPM_NUMADULTS/SPM_NUMKIDS/SPM_NUMPER, and no SPM unit is left without a classified adult (age >= 18 OR (age >= 15 AND role)). Nothing is imputed; no weight is used; no age is changed." + }, { "stage": "medicare_take_up_input", "survey": "Census CPS ASEC", diff --git a/packages/microcosm-build/src/microcosm/build/us/spec/sources.yaml b/packages/microcosm-build/src/microcosm/build/us/spec/sources.yaml index a67ee2a18b..b952fd60e4 100644 --- a/packages/microcosm-build/src/microcosm/build/us/spec/sources.yaml +++ b/packages/microcosm-build/src/microcosm/build/us/spec/sources.yaml @@ -99,7 +99,7 @@ sources: stage_asset: id: source_stages path: microcosm.build.us/source_stages.json - sha256: 7935d891ed16eac618f04813a7b8a3ceb9a971c8b4c4273683594ba61e7dd631 + sha256: 9f4f983091fb18dea8f4524cc100be20f9fca2b006435461592f8edf53c9a5d8 stage_manifest: version: 1 country: us @@ -2060,6 +2060,32 @@ stages: lines 1069-1075 and 1209-1221: is_household_head <- P_SEQ == 1; is_separated <- A_MARITL == 6; is_surviving_spouse <- A_MARITL == 4. Nothing is imputed. The stage fails unless every frame household has exactly one P_SEQ == 1 record (PH_SEQ before support cloning, person_household_id after cloning).' +- stage: spm_independence_role + survey: Census CPS ASEC + source: https://www.census.gov/programs-surveys/cps.html + grain: person + artifacts: + - kind: public_microdata + format: census_asec + vintage: 2022-2024 pooled + locator: 'SHA-pinned complete Census CPS ASEC public-use person files pppub23.csv, pppub24.csv and + pppub25.csv (survey years 2023-2025, income years 2022-2024): SPM unit head flag (SPM_HEAD), family + type (A_FAMTYP) and family relationship (A_FAMREL), joined to each pooled person by income year + and exact 22-digit PERIDNUM' + operations: + - kind: read_table + table: person + - kind: derive_spm_independence_role + outputs: + - is_spm_independent_minor_role + notes: 'The one dataset source input policyengine_us.spm.DATASET_SOURCE_INPUTS declares. No frozen census_cps + input carries SPM_HEAD and only the 2024 vintage carries A_FAMTYP/A_FAMREL, so the role is restored + from the pinned complete Census person CSVs through microcosm.build.us_runtime.spm_role_source.derive_spm_role_source: + is_spm_independent_minor_role <- SPM_HEAD == 1 OR (A_FAMTYP in {1,4} AND A_FAMREL in {1,2}), stored + before any age gate. The stage fails unless every person joins exactly one pinned Census row, every + native SPM unit is one complete source unit with exactly one SPM_HEAD, derived adult/child/person + counts reproduce SPM_NUMADULTS/SPM_NUMKIDS/SPM_NUMPER, and no SPM unit is left without a classified + adult (age >= 18 OR (age >= 15 AND role)). Nothing is imputed; no weight is used; no age is changed.' - stage: medicare_take_up_input survey: Census CPS ASEC source: https://www.census.gov/programs-surveys/cps.html diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/__init__.py b/packages/microcosm-build/src/microcosm/build/us_runtime/__init__.py index 30f13f47f4..b742ee0831 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/__init__.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/__init__.py @@ -913,6 +913,18 @@ validate_spine_agreement_registry, ) from microcosm.build.us_runtime.spine_assembly import assemble_spines +from microcosm.build.us_runtime.spm_independence_role import ( + US_SPM_INDEPENDENCE_ROLE_NONCONSTANT_PERSON_COLUMNS, + US_SPM_INDEPENDENCE_ROLE_OUTPUT_COLUMNS, + US_SPM_INDEPENDENCE_ROLE_REQUIRED_SOURCE_COLUMNS, + US_SPM_INDEPENDENCE_ROLE_STAGE_NAME, + derive_us_spm_independence_role_from_manifest, + resolve_asec_spm_role_source_paths, + us_spm_independence_role_signal_gate, + us_spm_independence_role_stage_spec, + us_spm_independence_role_summary, + with_us_spm_independence_role, +) from microcosm.build.us_runtime.ssi_disability_criteria import ( SIPP_2023_SSI_DISABILITY_DONOR_REVISION, SIPP_2023_SSI_DISABILITY_DONOR_SHA256, @@ -1244,11 +1256,21 @@ "US_RELATIONSHIP_INPUTS_OUTPUT_COLUMNS", "US_RELATIONSHIP_INPUTS_REQUIRED_SOURCE_COLUMNS", "US_RELATIONSHIP_INPUTS_STAGE_NAME", + "US_SPM_INDEPENDENCE_ROLE_NONCONSTANT_PERSON_COLUMNS", + "US_SPM_INDEPENDENCE_ROLE_OUTPUT_COLUMNS", + "US_SPM_INDEPENDENCE_ROLE_REQUIRED_SOURCE_COLUMNS", + "US_SPM_INDEPENDENCE_ROLE_STAGE_NAME", "derive_us_relationship_inputs_from_manifest", + "derive_us_spm_independence_role_from_manifest", + "resolve_asec_spm_role_source_paths", "us_relationship_inputs_signal_gate", + "us_spm_independence_role_signal_gate", + "us_spm_independence_role_stage_spec", + "us_spm_independence_role_summary", "us_relationship_inputs_stage_spec", "us_relationship_inputs_summary", "with_us_relationship_inputs", + "with_us_spm_independence_role", "ALIMONY_ASEC_ARCHIVED_DERIVATION_URL", "ALIMONY_PUF_ARCHIVED_DERIVATION_URL", "STRIKE_BENEFITS_ASEC_ARCHIVED_DERIVATION_URL", @@ -2219,6 +2241,18 @@ def to_manifest(self) -> dict[str, object]: "from P_SEQ and A_MARITL; nothing is imputed." ), ), + US_SPM_INDEPENDENCE_ROLE_STAGE_NAME: DonorSpec( + survey="Census CPS ASEC", + source="https://www.census.gov/programs-surveys/cps.html", + notes=( + "Measured SPM independence role (the engine's one declared dataset " + "source input) restored from the SHA-pinned complete Census ASEC " + "person files by exact income-year/PERIDNUM identity through the " + "certified derive_spm_role_source: SPM_HEAD == 1 OR (A_FAMTYP in " + "{1,4} AND A_FAMREL in {1,2}); reconciled against Census's own " + "SPM_NUMADULTS/SPM_NUMKIDS/SPM_NUMPER; nothing is imputed." + ), + ), US_MEDICARE_TAKE_UP_STAGE_NAME: DonorSpec( survey="Census CPS ASEC", source="https://www.census.gov/programs-surveys/cps.html", @@ -2433,6 +2467,7 @@ def to_manifest(self) -> dict[str, object]: US_HOURS_WORKED_STAGE_NAME, US_SNAP_TAKE_UP_STAGE_NAME, US_RELATIONSHIP_INPUTS_STAGE_NAME, + US_SPM_INDEPENDENCE_ROLE_STAGE_NAME, US_MEDICARE_TAKE_UP_STAGE_NAME, US_HOUSING_INPUTS_STAGE_NAME, US_RETIREMENT_DISTRIBUTION_STAGE_NAME, diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/l0_refit_export.py b/packages/microcosm-build/src/microcosm/build/us_runtime/l0_refit_export.py index 7d31c47e0e..ce76b43846 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/l0_refit_export.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/l0_refit_export.py @@ -127,6 +127,9 @@ from microcosm.build.us_runtime.snap_discretionary_exemption import ( US_SNAP_DISCRETIONARY_EXEMPTION_NONCONSTANT_PERSON_COLUMNS, ) +from microcosm.build.us_runtime.spm_independence_role import ( + US_SPM_INDEPENDENCE_ROLE_NONCONSTANT_PERSON_COLUMNS, +) from microcosm.build.us_runtime.ssi_disability_criteria import ( US_SSI_DISABILITY_CRITERIA_NONCONSTANT_PERSON_COLUMNS, ) @@ -161,6 +164,7 @@ *US_HOURS_WORKED_NONCONSTANT_PERSON_COLUMNS, *US_ELIGIBILITY_INPUTS_NONCONSTANT_PERSON_COLUMNS, *US_RELATIONSHIP_INPUTS_NONCONSTANT_PERSON_COLUMNS, + *US_SPM_INDEPENDENCE_ROLE_NONCONSTANT_PERSON_COLUMNS, *US_MEDICARE_TAKE_UP_NONCONSTANT_PERSON_COLUMNS, *US_PREGNANCY_NONCONSTANT_PERSON_COLUMNS, *US_PRIOR_YEAR_INCOME_NONCONSTANT_PERSON_COLUMNS, 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 21ffbd870a..5397a2d9f1 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 @@ -97,6 +97,9 @@ spine_agreement_gate, ) from microcosm.build.us_runtime.spine_assembly import assemble_spines +from microcosm.build.us_runtime.spm_independence_role import ( + US_SPM_INDEPENDENCE_ROLE_OUTPUT_COLUMNS, +) from microcosm.build.us_runtime.support_provenance import ( SPINE_ASSEMBLY_MANIFEST_KEY, spine_assembly_receipt, @@ -339,10 +342,10 @@ class PoolEngineInputProjectionContract: POOL_ENGINE_INPUT_PROJECTION_CONTRACT = PoolEngineInputProjectionContract( engine_version="2.2.1", - input_count=925, + input_count=926, default_count=925, - sha256="d0f660fdbe3ae839dc5e68b3b4887ff07013ccfe321a3bf7ea99fc6de3a9af4f", - defaults_sha256="5a209930880c1dd03caba90feee358b1057aeed55b99b26b6ebee47d530689ee", + sha256="cefb137f164c6629589a887bbb56831ebc463cd46909a72ead4dbe0557961e61", + defaults_sha256="f938af6506623f453ca55922cf4a8ba6443d5f780f85e4381b777083a90396a0", ) """Exact installed input registry scanned by the disposable projection.""" @@ -370,6 +373,7 @@ class PoolEngineInputProjectionContract: ("materialized_pool_input_surface", 122), ("preserved_stacked_engine_input", 4), ("seed_stage_program_contract", 17), + ("unprovisioned_source_input", 1), ) """How every installed engine input is provisioned, by count. @@ -378,9 +382,9 @@ class PoolEngineInputProjectionContract: """ POOL_REMAINING_STAGE_INPUT_MANIFEST_SHA256 = ( - "df42a6d95e4b98ce158334014dc9524de8f7791757eeaf3c6392d8d9b8469edf" + "0a84565a659a6404cb17715dda36f094a87431c713c7a37bf65a936b16937325" ) -"""Pinned content digest of all 1,058 post-transfer consumer/input rows.""" +"""Pinned content digest of all 1,059 post-transfer consumer/input rows.""" @dataclass(frozen=True) @@ -894,9 +898,8 @@ def _resolve_take_up_program_bindings( for program in load_take_up_contract().programs ) for index, binding in enumerate(bindings): - if ( - len(binding) != 3 - or not all(isinstance(value, str) and value for value in binding) + if len(binding) != 3 or not all( + isinstance(value, str) and value for value in binding ): raise ValueError( "Take-up manifest program binding must contain three non-empty " @@ -1086,7 +1089,7 @@ def _pool_engine_input_projection( def pool_engine_input_projection_receipt( engine: _PoolRulesEngine | None = None, ) -> dict[str, object]: - """Validate every installed simulation input and its declared default.""" + """Validate defaults, keeping required source observations without a default.""" rules_engine = engine if rules_engine is None: @@ -1095,18 +1098,26 @@ def pool_engine_input_projection_receipt( rules_engine = PolicyEngineUSEngine() variables = list(rules_engine.variables()) defaults = dict(rules_engine.default_values(variables)) - missing_defaults = sorted(set(variables) - set(defaults)) + required_source_inputs = set(US_SPM_INDEPENDENCE_ROLE_OUTPUT_COLUMNS) + missing_defaults = sorted(set(variables) - set(defaults) - required_source_inputs) extra_defaults = sorted(set(defaults) - set(variables)) - if missing_defaults or extra_defaults: + defaulted_sources = sorted(required_source_inputs & set(defaults)) + missing_sources = sorted(required_source_inputs - set(variables)) + if missing_defaults or extra_defaults or defaulted_sources or missing_sources: raise ValueError( "PolicyEngine-US simulation input default surface is not exact; " - f"missing={missing_defaults}, extra={extra_defaults}." + f"missing={missing_defaults}, extra={extra_defaults}, " + f"defaulted_sources={defaulted_sources}, missing_sources={missing_sources}." ) rows = [ { "entity": rules_engine.variable_metadata(variable).entity, "variable": variable, - "default": defaults[variable], + **( + {"source_required": True} + if variable in required_source_inputs + else {"default": defaults[variable]} + ), } for variable in variables ] @@ -1366,9 +1377,7 @@ def surface_provision(variable: str) -> str: variable, execution_scope="whole_pool", provision=provision, - available_by=( - "transferred" if variable in transfer_owned else "seeded" - ), + available_by=("transferred" if variable in transfer_owned else "seeded"), fallback=fallback, ) @@ -1553,7 +1562,11 @@ def surface_provision(variable: str) -> str: fallback: str | None = ( "ephemeral_simulation_projection_engine_default_if_present_null" ) - if variable in POOL_DEFERRED_TRANSFER_INPUTS: + if variable in US_SPM_INDEPENDENCE_ROLE_OUTPUT_COLUMNS: + provision = "unprovisioned_source_input" + available_by = "release" + fallback = "refuse_null_if_present_no_default" + elif variable in POOL_DEFERRED_TRANSFER_INPUTS: provision = "declared_deferred_null_input" available_by = "transferred" fallback = "ephemeral_simulation_projection_engine_default" 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 e3e18961e5..9452473527 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 @@ -87,6 +87,9 @@ US_SCF_FINANCIAL_ASSET_OUTPUT_COLUMNS, US_SCF_NET_WORTH_OUTPUT_COLUMNS, ) +from microcosm.build.us_runtime.spm_independence_role import ( + US_SPM_INDEPENDENCE_ROLE_OUTPUT_COLUMNS, +) from microcosm.build.us_runtime.weeks_unemployed import ( US_WEEKS_UNEMPLOYED_OUTPUT_COLUMNS, ) @@ -261,6 +264,9 @@ "relationship_inputs": { "person": frozenset(US_RELATIONSHIP_INPUTS_OUTPUT_COLUMNS), }, + "spm_independence_role": { + "person": frozenset(US_SPM_INDEPENDENCE_ROLE_OUTPUT_COLUMNS), + }, "medicare_take_up": { "person": frozenset(US_MEDICARE_TAKE_UP_OUTPUT_COLUMNS), }, diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/release_gate_preflight.py b/packages/microcosm-build/src/microcosm/build/us_runtime/release_gate_preflight.py index ceaeca08a5..ce72155044 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/release_gate_preflight.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/release_gate_preflight.py @@ -87,7 +87,7 @@ from collections.abc import Iterable, Mapping, Sequence from dataclasses import dataclass, field from pathlib import Path -from typing import Any, Literal +from typing import Any import numpy as np import pandas as pd @@ -107,6 +107,15 @@ ReformCoverageProbe, us_release_reform_coverage_probes, ) +from microcosm.build.us_runtime.spm_composition import ( + _MAX_REPORTED_SPM_UNITS, + MAX_REPORTED_SPM_UNITS_HARD_CAP, + SPM_COMPOSITION_REMEDY, + CheckResult, + PreflightStatus, + check_spm_composition, + spm_independence_role, +) from microcosm.build.us_runtime.warm_start_selection import ( SelectionSource, load_selection_source_from_manifest, @@ -133,8 +142,6 @@ "spm_independence_role", ] -#: A check's verdict. -PreflightStatus = Literal["PASS", "FAIL", "AT_RISK", "SKIPPED"] #: An estimate at or below this absolute value is treated as zero support — #: the same magnitude the release ``zero_support`` gate uses for a target's @@ -153,40 +160,6 @@ #: one-signed deduction leaf (e.g. a refund amount) is never a false positive. _CANCELLATION_LEG_RATIO = 0.15 -#: The person columns the SPM measurement composition rule reads, named exactly -#: as ``spm-calculator`` names them on a microcosm Frame -#: (``spm_calculator/microcosm_adapter.py`` ``PERSON_COLUMNS`` maps these frame -#: column names onto the engine variables) and as policyengine-us registers them. -_SPM_AGE_COLUMN = "age" -_SPM_ROLE_COLUMN = "is_spm_independent_minor_role" -_SPM_HEAD_COLUMN = "is_household_head" -_SPM_SPOUSE_COLUMN = "is_household_spouse" - -#: How many offending SPM units the composition check names in its failure line -#: and its rows. The failure line reports the full count either way. -_MAX_REPORTED_SPM_UNITS = 20 - -#: The ceiling on that cap, whatever an operator asks for. The rows travel to -#: preflight stdout and ``--json-out``; a diagnosis needs a handful of examples, -#: not every offending unit dumped into a CI log. The failure line's full count -#: is the number that matters at any volume, and it is never capped. -MAX_REPORTED_SPM_UNITS_HARD_CAP = 100 - -#: The single-sourced remedy for a zero-classified-adult SPM unit. The release -#: tool raises with this same text, so an operator who skipped preflight reads -#: the identical instruction. -SPM_COMPOSITION_REMEDY = ( - "Remedy: supply the SPM independence role. Either (a) carry " - "is_spm_independent_minor_role for these persons — for a Build P descendant, " - "tools/build_us_spm_role_enrichment.py derives it from the raw ASEC role " - "rule (microcosm.build.us_runtime.spm_role_source.SPM_ROLE_RULE) — or (b) " - "carry is_household_head / is_household_spouse through to the export so the " - "engine's fallback formula classifies a 15-to-17-year-old head or spouse. " - "Re-grouping child-only SPM units into another unit is NOT a remedy: it " - "changes the poverty measurement the 104 state SPM poverty levels exist to " - "check. Inventing an adult is not a remedy either." -) - #: The export-mass parity gate defaults, matching the release tool CLI #: (``--input-mass-relative-tolerance`` / ``--input-mass-minimum-reference-total``). _DEFAULT_RELATIVE_TOLERANCE = 0.5 @@ -207,40 +180,6 @@ ) -@dataclass(frozen=True) -class CheckResult: - """One preflight check's verdict and the numbers behind it. - - Attributes: - name: Stable check id. - status: ``PASS`` / ``FAIL`` / ``AT_RISK`` / ``SKIPPED``. - summary: One-line human summary with the headline number. - failures: Hard-failure lines (drive exit 1). - at_risks: Advisory lines (drive exit 2 when no failure). - rows: Per-item measured numbers, JSON-ready, for the report table. - details: Extra machine-readable context. - """ - - name: str - status: PreflightStatus - summary: str - failures: tuple[str, ...] = () - at_risks: tuple[str, ...] = () - rows: tuple[Mapping[str, Any], ...] = () - details: Mapping[str, Any] = field(default_factory=dict) - - def to_dict(self) -> dict[str, Any]: - return { - "name": self.name, - "status": self.status, - "summary": self.summary, - "failures": list(self.failures), - "at_risks": list(self.at_risks), - "rows": [dict(row) for row in self.rows], - "details": dict(self.details), - } - - @dataclass(frozen=True) class PreflightReport: """Every check's verdict plus the run's inputs, and the process exit code.""" @@ -943,358 +882,6 @@ def check_smoke_probe_support( # --------------------------------------------------------------------------- -def _boolean_column(series: pd.Series) -> np.ndarray: - """A role column as plain bool; a missing value reads False, as an absent - engine input does.""" - return series.fillna(False).to_numpy(dtype=bool) - - -def spm_independence_role(person: pd.DataFrame) -> tuple[np.ndarray, str, dict]: - """Each person's SPM independence role, and the source the engine would use. - - Reproduces ``is_spm_independent_minor_role`` resolution exactly. The - variable carries a *formula* (``is_household_head | is_household_spouse``, - ``spm_calculator/policyengine_adapter.py``) but is also the one declared - dataset source input (``policyengine_us.spm.DATASET_SOURCE_INPUTS``), so a - supplied column wins and the formula runs only when none is supplied — the - behaviour ``policyengine_us/tests/core/test_spm_source_input_contract.py`` - pins. - - With no column supplied, ``is_household_head`` and ``is_household_spouse`` - are themselves input-only bools with no formula of their own, so an absent - one contributes False rather than a computed value. Absent role *and* absent - structure therefore leave everyone unclassified and the rule collapses to - ``age >= 18``. - - Returns the role vector, the source label - (``source_column`` / ``household_structure_fallback`` / ``unclassified``), - and the provenance detail for the report. - """ - if _SPM_ROLE_COLUMN in person.columns: - column = person[_SPM_ROLE_COLUMN] - return ( - _boolean_column(column), - "source_column", - { - "role_column": _SPM_ROLE_COLUMN, - "role_column_present": True, - "fallback_columns_present": [], - "role_missing_values_read_as_false": int(column.isna().sum()), - }, - ) - present = [ - name - for name in (_SPM_HEAD_COLUMN, _SPM_SPOUSE_COLUMN) - if name in person.columns - ] - role = np.zeros(len(person), dtype=bool) - for name in present: - role |= _boolean_column(person[name]) - return ( - role, - "household_structure_fallback" if present else "unclassified", - { - "role_column": None, - "role_column_present": False, - "fallback_columns_present": present, - "role_missing_values_read_as_false": 0, - }, - ) - - -def _person_ages(person: pd.DataFrame) -> np.ndarray: - """The person table's ``age`` as float64; unreadable values become NaN. - - NaN never satisfies ``>= 18`` or ``>= 15``, which is how the engine's - comparison treats a missing age too — such a person is simply never counted - as an adult, so an all-missing-age unit surfaces here as offending. - """ - if _SPM_AGE_COLUMN not in person.columns: - raise ValueError( - f"The person table carries no {_SPM_AGE_COLUMN!r} column, so the " - "SPM measurement composition rule cannot be evaluated." - ) - return pd.to_numeric(person[_SPM_AGE_COLUMN], errors="coerce").to_numpy( - dtype=np.float64 - ) - - -def _assert_membership_joins( - membership: np.ndarray, - unit_ids: np.ndarray, - *, - unit_entity: str, - membership_column: str, -) -> None: - """Refuse to classify when the person→unit join does not actually join. - - :func:`_sum_by_unit` joins by index *label*, so a membership value that - matches no unit id contributes to nothing: the person's flags are dropped - and the unit they belong to reads zero adults. When the two columns come - back from an H5 with dtypes pandas will not match — ``bytes`` against - ``str`` is the realistic case — *every* value fails to match and the check - reports 100% of units as offending. That is a loud false refusal - indistinguishable from a catastrophic real defect, so it must not be - reported as a verdict at all: raise the "cannot be evaluated" ``ValueError`` - that :func:`run_preflight` turns into SKIPPED instead. - """ - unmatched = ~pd.Index(membership).isin(pd.Index(unit_ids)) - n_unmatched = int(unmatched.sum()) - if n_unmatched == 0: - return - examples = ", ".join( - repr(value) for value in pd.unique(np.asarray(membership)[unmatched])[:5] - ) - raise ValueError( - f"{n_unmatched} of {len(membership)} person rows carry a " - f"{membership_column!r} value matching no {unit_entity} id " - f"(person column dtype {pd.Series(membership).dtype}, " - f"{unit_entity} id dtype {pd.Series(unit_ids).dtype}; unmatched: " - f"{examples}). The person→{unit_entity} join would silently drop them " - "and report their units as having no classified adult, so the SPM " - "measurement composition rule cannot be evaluated." - ) - - -def _sum_by_unit( - flags: np.ndarray, membership: np.ndarray, unit_ids: np.ndarray -) -> np.ndarray: - """``unit.sum(flags)`` over the declared membership column. - - Reindexed onto the unit table, so a unit with no member rows reads as zero - — which is what ``unit.sum`` over no members gives, and which the engine - refuses just the same. Every membership value is known to match a unit id - by this point (:func:`_assert_membership_joins`), so the only zeros the - reindex introduces are genuinely memberless units. - """ - return ( - pd.Series(np.asarray(flags).astype(np.int64), index=membership) - .groupby(level=0) - .sum() - .reindex(unit_ids, fill_value=0) - .to_numpy(dtype=np.int64) - ) - - -@dataclass(frozen=True) -class _SPMComposition: - """One frame's SPM measurement classification, as the engine would compute it.""" - - unit_ids: np.ndarray - adults: np.ndarray - offending: np.ndarray - membership: np.ndarray - age: np.ndarray - role: np.ndarray - role_source: str - role_details: dict[str, Any] - n_units_without_member_18_plus: int - - -def _spm_composition(frame: Frame, *, unit_entity: str) -> _SPMComposition: - """Classify one frame under ``adult = (age >= 18) | ((age >= 15) & role)``.""" - schema = frame.schema - person = frame.table("person") - unit_ids = frame.table(unit_entity)[schema.id_column(unit_entity)].to_numpy() - membership_column = schema.membership_column(unit_entity) - membership = person[membership_column].to_numpy() - _assert_membership_joins( - membership, - unit_ids, - unit_entity=unit_entity, - membership_column=membership_column, - ) - - age = _person_ages(person) - role, role_source, role_details = spm_independence_role(person) - with np.errstate(invalid="ignore"): - adult = (age >= 18.0) | ((age >= 15.0) & role) - age_18_plus = age >= 18.0 - - adults = _sum_by_unit(adult, membership, unit_ids) - return _SPMComposition( - unit_ids=unit_ids, - adults=adults, - offending=adults < 1, - membership=membership, - age=age, - role=role, - role_source=role_source, - role_details={ - **role_details, - "role_source": role_source, - "ages_unreadable_as_numbers": int(np.isnan(age).sum()), - }, - n_units_without_member_18_plus=int( - (_sum_by_unit(age_18_plus, membership, unit_ids) < 1).sum() - ), - ) - - -def _age_band(value: float) -> str: - """One member's age as a band, never as an exact age. - - Exact ages are not needed to diagnose a zero-classified-adult unit, and the - rows travel to preflight stdout and ``--json-out`` — an age per member is - easier never to emit than to retract. The four bands are the rule's own - thresholds: ``18_plus`` is an adult outright, - ``15_to_17`` is an adult only with the independence role, ``under_15`` can - never be one, and ``unknown`` is an age that did not read as a number (which - the comparison treats as not an adult). - """ - if np.isnan(value): - return "unknown" - if value >= 18.0: - return "18_plus" - if value >= 15.0: - return "15_to_17" - return "under_15" - - -def _clamped_report_cap(max_reported: int) -> int: - """``max_reported`` confined to ``[0, MAX_REPORTED_SPM_UNITS_HARD_CAP]``. - - A negative value would reach a bare ``[:max_reported]`` slice and silently - mean "every offending unit except the last |N|" — the opposite of a cap — - and an arbitrarily large one would dump a row per offending unit into - preflight stdout and ``--json-out``. Neither is a report an operator asked - for, so both are clamped here rather than trusted from the caller. - """ - return max(0, min(int(max_reported), MAX_REPORTED_SPM_UNITS_HARD_CAP)) - - -def _offending_unit_rows( - composition: _SPMComposition, *, unit_entity: str, max_reported: int -) -> tuple[dict[str, Any], ...]: - """Up to ``max_reported`` offending units with their members' bands and roles.""" - rows: list[dict[str, Any]] = [] - for unit_id in composition.unit_ids[composition.offending][:max_reported]: - members = composition.membership == unit_id - ages = composition.age[members] - rows.append( - { - f"{unit_entity}_id": unit_id.item() - if hasattr(unit_id, "item") - else unit_id, - "n_members": int(members.sum()), - "member_age_bands": [_age_band(float(value)) for value in ages], - "member_independence_roles": [ - bool(value) for value in composition.role[members] - ], - } - ) - return tuple(rows) - - -def check_spm_composition( - base_frame: Frame, - selected_frame: Frame | None = None, - *, - unit_entity: str = "spm_unit", - max_reported: int = _MAX_REPORTED_SPM_UNITS, -) -> CheckResult: - """Does every SPM unit have a classified adult (no solve, no engine)? - - The release's 104 state SPM poverty levels are measured on one whole-dataset - ``Microsimulation`` (``reform_validation.default_simulate_factory``), and in - ``spm-calculator`` 1.0.0 a *single* SPM unit with no classified adult raises - ``SPMInputError("SPM_COMPOSITION_REQUIRED")`` for the **whole population's** - measurement (``spm_calculator/policyengine_adapter.py`` ``policyengine_amount``: - ``if np.any(adults < 1): raise``), naming neither the offending unit nor a - remedy. The release tool runs this same classification on its calibrated - export frame as a batched pre-export gate, so a build refuses by name before - the H5 and NPZ writes — but only after paying for the calibration that frame - comes from. Run pre-solve, this is the same verdict in seconds. - - This reproduces the engine's classification exactly — - ``adult = (age >= 18) | ((age >= 15) & role)`` with ``role`` resolved by - :func:`spm_independence_role` — over frame columns, in seconds. - - ``base_frame`` is the pool. ``selected_frame``, when given, is the population - the release calibrates, exports and measures; the verdict is graded on it, - because a pool unit the selection drops never reaches the engine. The pool - count is still reported, since it is what a *future* selection must keep - avoiding. - - ``max_reported`` bounds how many offending units are named individually, and - is clamped to ``[0, MAX_REPORTED_SPM_UNITS_HARD_CAP]`` - (:func:`_clamped_report_cap`) — the effective value rides the details - as ``max_reported_units``. The full offending count is reported at any cap. - """ - graded = selected_frame if selected_frame is not None else base_frame - scope = "selected pool" if selected_frame is not None else "base pool" - - composition = _spm_composition(graded, unit_entity=unit_entity) - n_offending = int(composition.offending.sum()) - n_units = int(len(composition.unit_ids)) - - details: dict[str, Any] = { - "graded_scope": scope, - "unit_entity": unit_entity, - "n_units": n_units, - "n_units_without_classified_adult": n_offending, - "n_units_without_member_aged_18_or_over": ( - composition.n_units_without_member_18_plus - ), - **composition.role_details, - } - if selected_frame is not None: - pool = _spm_composition(base_frame, unit_entity=unit_entity) - details["base_pool_n_units"] = int(len(pool.unit_ids)) - details["base_pool_n_units_without_classified_adult"] = int( - pool.offending.sum() - ) - details["base_pool_n_units_without_member_aged_18_or_over"] = ( - pool.n_units_without_member_18_plus - ) - - report_cap = _clamped_report_cap(max_reported) - rows = _offending_unit_rows( - composition, unit_entity=unit_entity, max_reported=report_cap - ) - details["max_reported_units"] = report_cap - details["n_units_reported"] = len(rows) - - if n_offending == 0: - return CheckResult( - name="spm_composition", - status="PASS", - summary=( - f"all {n_units:,} {unit_entity}s in the {scope} have a " - f"classified adult (role source: {composition.role_source})" - ), - rows=rows, - details=details, - ) - - elided = n_offending - len(rows) - # ``--max-reported-spm-units 0`` names none of them; the count still stands. - named = ( - f"{unit_entity}_id(s): " - + ", ".join(str(row[f"{unit_entity}_id"]) for row in rows) - + (f" (+{elided} more)" if elided > 0 else "") - if rows - else f"no {unit_entity}_id named (report cap {report_cap})" - ) - return CheckResult( - name="spm_composition", - status="FAIL", - summary=( - f"{n_offending:,} of {n_units:,} {unit_entity}s in the {scope} have " - "no classified adult; the whole population's SPM measurement would " - "raise SPM_COMPOSITION_REQUIRED" - ), - failures=( - f"{n_offending} {unit_entity}(s) have no member aged 18 or over and " - "no member aged 15-17 carrying an SPM independence role (role " - f"source: {composition.role_source}). " + named + ".", - SPM_COMPOSITION_REMEDY, - ), - rows=rows, - details=details, - ) - - # --------------------------------------------------------------------------- # Runbook orchestrator (loads real artifacts; reuses the release tool register) # --------------------------------------------------------------------------- diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/release_input_coverage.py b/packages/microcosm-build/src/microcosm/build/us_runtime/release_input_coverage.py index 83e700f4f1..74db6ee253 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/release_input_coverage.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/release_input_coverage.py @@ -99,6 +99,9 @@ US_SIPP_HEAD_START_OUTPUT_COLUMNS, ) from microcosm.build.us_runtime.sipp_vehicles import US_SIPP_VEHICLE_OUTPUT_COLUMNS +from microcosm.build.us_runtime.spm_independence_role import ( + US_SPM_INDEPENDENCE_ROLE_OUTPUT_COLUMNS, +) from microcosm.build.us_runtime.ssi_disability_criteria import ( US_SSI_DISABILITY_CRITERIA_OUTPUT_COLUMNS, ) @@ -175,6 +178,14 @@ "receives_wic", "receives_snap", "receives_tanf", + # The engine's one declared dataset source input + # (policyengine_us.spm.DATASET_SOURCE_INPUTS): without it a 15-to-17- + # year-old heading an SPM unit is unclassified and the whole + # population's SPM measurement refuses (SPM_COMPOSITION_REQUIRED). + # Written by the spm_independence_role base-builder stage from the + # pinned Census ASEC person files; the certified default carries it + # through the Build P source enrichment. + *US_SPM_INDEPENDENCE_ROLE_OUTPUT_COLUMNS, } ) @@ -673,12 +684,8 @@ def _ecps_populated_layers() -> frozenset[str]: f"{_ECPS_PARITY_REFERENCE_RESOURCE}: 'nonzero_shares' must be a " "non-empty JSON object." ) - historical = { - str(name) for name, share in shares.items() if float(share) > 0.0 - } - projected = { - REFERENCE_ECPS_LAYER_RENAMES.get(name, name) for name in historical - } + historical = {str(name) for name, share in shares.items() if float(share) > 0.0} + projected = {REFERENCE_ECPS_LAYER_RENAMES.get(name, name) for name in historical} if len(projected) != len(historical): raise ValueError( f"{_ECPS_PARITY_REFERENCE_RESOURCE}: reference-layer rename " diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/source_runtime.py b/packages/microcosm-build/src/microcosm/build/us_runtime/source_runtime.py index fd0374c962..a67869a0e8 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/source_runtime.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/source_runtime.py @@ -85,6 +85,9 @@ from microcosm.build.us_runtime.snap_take_up import ( derive_us_snap_take_up_from_manifest, ) +from microcosm.build.us_runtime.spm_independence_role import ( + derive_us_spm_independence_role_from_manifest, +) from microcosm.build.us_runtime.weeks_unemployed import ( derive_us_weeks_unemployed_from_manifest, impute_us_weeks_unemployed_to_puf_support_from_manifest, @@ -318,6 +321,7 @@ def us_source_operation_handlers() -> Mapping[str, SourceOperationHandler]: "derive_pregnancy": derive_us_pregnancy_from_manifest, "derive_prior_year_income": derive_us_prior_year_income_from_manifest, "derive_relationship_inputs": derive_us_relationship_inputs_from_manifest, + "derive_spm_independence_role": (derive_us_spm_independence_role_from_manifest), "derive_retirement_distributions": ( derive_us_retirement_distributions_from_manifest ), diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/spm_composition.py b/packages/microcosm-build/src/microcosm/build/us_runtime/spm_composition.py new file mode 100644 index 0000000000..088682ca43 --- /dev/null +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/spm_composition.py @@ -0,0 +1,466 @@ +"""The SPM measurement composition check, as a pure frame check. + +spm-calculator 1.0.0 classifies an SPM unit's adults as +``unit.sum((age >= 18) | ((age >= 15) & role))`` with ``role`` the engine's +one declared dataset source input, ``is_spm_independent_minor_role``, and +refuses the **whole population's** SPM measurement +(``SPMInputError("SPM_COMPOSITION_REQUIRED")``) when a single unit has none. +:func:`check_spm_composition` reproduces that classification over frame +columns, in seconds and without an engine, naming the offending units and the +remedy. + +This module is deliberately free of build-tool imports so that build stages +(``spm_independence_role``) and the primary-QRF worker's static import +closure can reach the check; the release-gate preflight runbook re-exports +everything here and adds the checks that need the release tool. +""" + +from __future__ import annotations + +from collections.abc import Mapping +from dataclasses import dataclass, field +from typing import Any, Literal + +import numpy as np +import pandas as pd + +from microcosm.frame import Frame + +__all__ = [ + "MAX_REPORTED_SPM_UNITS_HARD_CAP", + "SPM_COMPOSITION_REMEDY", + "CheckResult", + "PreflightStatus", + "check_spm_composition", + "spm_independence_role", +] + +#: A check's verdict. +PreflightStatus = Literal["PASS", "FAIL", "AT_RISK", "SKIPPED"] + +#: The person columns the SPM measurement composition rule reads, named exactly +#: as ``spm-calculator`` names them on a microcosm Frame +#: (``spm_calculator/microcosm_adapter.py`` ``PERSON_COLUMNS`` maps these frame +#: column names onto the engine variables) and as policyengine-us registers them. +_SPM_AGE_COLUMN = "age" +_SPM_ROLE_COLUMN = "is_spm_independent_minor_role" +_SPM_HEAD_COLUMN = "is_household_head" +_SPM_SPOUSE_COLUMN = "is_household_spouse" + +#: How many offending SPM units the composition check names in its failure line +#: and its rows. The failure line reports the full count either way. +_MAX_REPORTED_SPM_UNITS = 20 + +#: The ceiling on that cap, whatever an operator asks for. The rows travel to +#: preflight stdout and ``--json-out``; a diagnosis needs a handful of examples, +#: not every offending unit dumped into a CI log. The failure line's full count +#: is the number that matters at any volume, and it is never capped. +MAX_REPORTED_SPM_UNITS_HARD_CAP = 100 + +#: The single-sourced remedy for a zero-classified-adult SPM unit. The release +#: tool raises with this same text, so an operator who skipped preflight reads +#: the identical instruction. +SPM_COMPOSITION_REMEDY = ( + "Remedy: supply the measured SPM independence role, " + "is_spm_independent_minor_role, for these persons. For a base built from " + "raw sources, the spm_independence_role build stage " + "(microcosm.build.us_runtime.spm_independence_role) restores it from the " + "pinned Census ASEC person files; for a Build P descendant, " + "tools/build_us_spm_role_enrichment.py derives it from the same raw ASEC " + "role rule (microcosm.build.us_runtime.spm_role_source.SPM_ROLE_RULE). " + "Carrying only is_household_head / is_household_spouse lets the engine's " + "fallback formula classify a 15-to-17-year-old head or spouse, but it is " + "not a release remedy: a US release requires the source role itself " + "(release input coverage, the export's required person source columns and " + "the SPM independence role signal gate), and the fallback measures " + "household headship, not SPM-unit independence. " + "Re-grouping child-only SPM units into another unit is NOT a remedy: it " + "changes the poverty measurement the 104 state SPM poverty levels exist to " + "check. Inventing an adult is not a remedy either." +) + + +@dataclass(frozen=True) +class CheckResult: + """One preflight check's verdict and the numbers behind it. + + Attributes: + name: Stable check id. + status: ``PASS`` / ``FAIL`` / ``AT_RISK`` / ``SKIPPED``. + summary: One-line human summary with the headline number. + failures: Hard-failure lines (drive exit 1). + at_risks: Advisory lines (drive exit 2 when no failure). + rows: Per-item measured numbers, JSON-ready, for the report table. + details: Extra machine-readable context. + """ + + name: str + status: PreflightStatus + summary: str + failures: tuple[str, ...] = () + at_risks: tuple[str, ...] = () + rows: tuple[Mapping[str, Any], ...] = () + details: Mapping[str, Any] = field(default_factory=dict) + + def to_dict(self) -> dict[str, Any]: + return { + "name": self.name, + "status": self.status, + "summary": self.summary, + "failures": list(self.failures), + "at_risks": list(self.at_risks), + "rows": [dict(row) for row in self.rows], + "details": dict(self.details), + } + + +def _boolean_column(series: pd.Series) -> np.ndarray: + """A role column as plain bool; a missing value reads False, as an absent + engine input does.""" + return series.fillna(False).to_numpy(dtype=bool) + + +def spm_independence_role(person: pd.DataFrame) -> tuple[np.ndarray, str, dict]: + """Each person's SPM independence role, and the source the engine would use. + + Reproduces ``is_spm_independent_minor_role`` resolution exactly. The + variable carries a *formula* (``is_household_head | is_household_spouse``, + ``spm_calculator/policyengine_adapter.py``) but is also the one declared + dataset source input (``policyengine_us.spm.DATASET_SOURCE_INPUTS``), so a + supplied column wins and the formula runs only when none is supplied — the + behaviour ``policyengine_us/tests/core/test_spm_source_input_contract.py`` + pins. + + With no column supplied, ``is_household_head`` and ``is_household_spouse`` + are themselves input-only bools with no formula of their own, so an absent + one contributes False rather than a computed value. Absent role *and* absent + structure therefore leave everyone unclassified and the rule collapses to + ``age >= 18``. + + Returns the role vector, the source label + (``source_column`` / ``household_structure_fallback`` / ``unclassified``), + and the provenance detail for the report. + """ + if _SPM_ROLE_COLUMN in person.columns: + column = person[_SPM_ROLE_COLUMN] + return ( + _boolean_column(column), + "source_column", + { + "role_column": _SPM_ROLE_COLUMN, + "role_column_present": True, + "fallback_columns_present": [], + "role_missing_values_read_as_false": int(column.isna().sum()), + }, + ) + present = [ + name + for name in (_SPM_HEAD_COLUMN, _SPM_SPOUSE_COLUMN) + if name in person.columns + ] + role = np.zeros(len(person), dtype=bool) + for name in present: + role |= _boolean_column(person[name]) + return ( + role, + "household_structure_fallback" if present else "unclassified", + { + "role_column": None, + "role_column_present": False, + "fallback_columns_present": present, + "role_missing_values_read_as_false": 0, + }, + ) + + +def _person_ages(person: pd.DataFrame) -> np.ndarray: + """The person table's ``age`` as float64; unreadable values become NaN. + + NaN never satisfies ``>= 18`` or ``>= 15``, which is how the engine's + comparison treats a missing age too — such a person is simply never counted + as an adult, so an all-missing-age unit surfaces here as offending. + """ + if _SPM_AGE_COLUMN not in person.columns: + raise ValueError( + f"The person table carries no {_SPM_AGE_COLUMN!r} column, so the " + "SPM measurement composition rule cannot be evaluated." + ) + return pd.to_numeric(person[_SPM_AGE_COLUMN], errors="coerce").to_numpy( + dtype=np.float64 + ) + + +def _assert_membership_joins( + membership: np.ndarray, + unit_ids: np.ndarray, + *, + unit_entity: str, + membership_column: str, +) -> None: + """Refuse to classify when the person→unit join does not actually join. + + :func:`_sum_by_unit` joins by index *label*, so a membership value that + matches no unit id contributes to nothing: the person's flags are dropped + and the unit they belong to reads zero adults. When the two columns come + back from an H5 with dtypes pandas will not match — ``bytes`` against + ``str`` is the realistic case — *every* value fails to match and the check + reports 100% of units as offending. That is a loud false refusal + indistinguishable from a catastrophic real defect, so it must not be + reported as a verdict at all: raise the "cannot be evaluated" ``ValueError`` + that :func:`run_preflight` turns into SKIPPED instead. + """ + unmatched = ~pd.Index(membership).isin(pd.Index(unit_ids)) + n_unmatched = int(unmatched.sum()) + if n_unmatched == 0: + return + examples = ", ".join( + repr(value) for value in pd.unique(np.asarray(membership)[unmatched])[:5] + ) + raise ValueError( + f"{n_unmatched} of {len(membership)} person rows carry a " + f"{membership_column!r} value matching no {unit_entity} id " + f"(person column dtype {pd.Series(membership).dtype}, " + f"{unit_entity} id dtype {pd.Series(unit_ids).dtype}; unmatched: " + f"{examples}). The person→{unit_entity} join would silently drop them " + "and report their units as having no classified adult, so the SPM " + "measurement composition rule cannot be evaluated." + ) + + +def _sum_by_unit( + flags: np.ndarray, membership: np.ndarray, unit_ids: np.ndarray +) -> np.ndarray: + """``unit.sum(flags)`` over the declared membership column. + + Reindexed onto the unit table, so a unit with no member rows reads as zero + — which is what ``unit.sum`` over no members gives, and which the engine + refuses just the same. Every membership value is known to match a unit id + by this point (:func:`_assert_membership_joins`), so the only zeros the + reindex introduces are genuinely memberless units. + """ + return ( + pd.Series(np.asarray(flags).astype(np.int64), index=membership) + .groupby(level=0) + .sum() + .reindex(unit_ids, fill_value=0) + .to_numpy(dtype=np.int64) + ) + + +@dataclass(frozen=True) +class _SPMComposition: + """One frame's SPM measurement classification, as the engine would compute it.""" + + unit_ids: np.ndarray + adults: np.ndarray + offending: np.ndarray + membership: np.ndarray + age: np.ndarray + role: np.ndarray + role_source: str + role_details: dict[str, Any] + n_units_without_member_18_plus: int + + +def _spm_composition(frame: Frame, *, unit_entity: str) -> _SPMComposition: + """Classify one frame under ``adult = (age >= 18) | ((age >= 15) & role)``.""" + schema = frame.schema + person = frame.table("person") + unit_ids = frame.table(unit_entity)[schema.id_column(unit_entity)].to_numpy() + membership_column = schema.membership_column(unit_entity) + membership = person[membership_column].to_numpy() + _assert_membership_joins( + membership, + unit_ids, + unit_entity=unit_entity, + membership_column=membership_column, + ) + + age = _person_ages(person) + role, role_source, role_details = spm_independence_role(person) + with np.errstate(invalid="ignore"): + adult = (age >= 18.0) | ((age >= 15.0) & role) + age_18_plus = age >= 18.0 + + adults = _sum_by_unit(adult, membership, unit_ids) + return _SPMComposition( + unit_ids=unit_ids, + adults=adults, + offending=adults < 1, + membership=membership, + age=age, + role=role, + role_source=role_source, + role_details={ + **role_details, + "role_source": role_source, + "ages_unreadable_as_numbers": int(np.isnan(age).sum()), + }, + n_units_without_member_18_plus=int( + (_sum_by_unit(age_18_plus, membership, unit_ids) < 1).sum() + ), + ) + + +def _age_band(value: float) -> str: + """One member's age as a band, never as an exact age. + + Exact ages are not needed to diagnose a zero-classified-adult unit, and the + rows travel to preflight stdout and ``--json-out`` — an age per member is + easier never to emit than to retract. The four bands are the rule's own + thresholds: ``18_plus`` is an adult outright, + ``15_to_17`` is an adult only with the independence role, ``under_15`` can + never be one, and ``unknown`` is an age that did not read as a number (which + the comparison treats as not an adult). + """ + if np.isnan(value): + return "unknown" + if value >= 18.0: + return "18_plus" + if value >= 15.0: + return "15_to_17" + return "under_15" + + +def _clamped_report_cap(max_reported: int) -> int: + """``max_reported`` confined to ``[0, MAX_REPORTED_SPM_UNITS_HARD_CAP]``. + + A negative value would reach a bare ``[:max_reported]`` slice and silently + mean "every offending unit except the last |N|" — the opposite of a cap — + and an arbitrarily large one would dump a row per offending unit into + preflight stdout and ``--json-out``. Neither is a report an operator asked + for, so both are clamped here rather than trusted from the caller. + """ + return max(0, min(int(max_reported), MAX_REPORTED_SPM_UNITS_HARD_CAP)) + + +def _offending_unit_rows( + composition: _SPMComposition, *, unit_entity: str, max_reported: int +) -> tuple[dict[str, Any], ...]: + """Up to ``max_reported`` offending units with their members' bands and roles.""" + rows: list[dict[str, Any]] = [] + for unit_id in composition.unit_ids[composition.offending][:max_reported]: + members = composition.membership == unit_id + ages = composition.age[members] + rows.append( + { + f"{unit_entity}_id": unit_id.item() + if hasattr(unit_id, "item") + else unit_id, + "n_members": int(members.sum()), + "member_age_bands": [_age_band(float(value)) for value in ages], + "member_independence_roles": [ + bool(value) for value in composition.role[members] + ], + } + ) + return tuple(rows) + + +def check_spm_composition( + base_frame: Frame, + selected_frame: Frame | None = None, + *, + unit_entity: str = "spm_unit", + max_reported: int = _MAX_REPORTED_SPM_UNITS, +) -> CheckResult: + """Does every SPM unit have a classified adult (no solve, no engine)? + + The release's 104 state SPM poverty levels are measured on one whole-dataset + ``Microsimulation`` (``reform_validation.default_simulate_factory``), and in + ``spm-calculator`` 1.0.0 a *single* SPM unit with no classified adult raises + ``SPMInputError("SPM_COMPOSITION_REQUIRED")`` for the **whole population's** + measurement (``spm_calculator/policyengine_adapter.py`` ``policyengine_amount``: + ``if np.any(adults < 1): raise``), naming neither the offending unit nor a + remedy. The release tool runs this same classification on its calibrated + export frame as a batched pre-export gate, so a build refuses by name before + the H5 and NPZ writes — but only after paying for the calibration that frame + comes from. Run pre-solve, this is the same verdict in seconds. + + This reproduces the engine's classification exactly — + ``adult = (age >= 18) | ((age >= 15) & role)`` with ``role`` resolved by + :func:`spm_independence_role` — over frame columns, in seconds. + + ``base_frame`` is the pool. ``selected_frame``, when given, is the population + the release calibrates, exports and measures; the verdict is graded on it, + because a pool unit the selection drops never reaches the engine. The pool + count is still reported, since it is what a *future* selection must keep + avoiding. + + ``max_reported`` bounds how many offending units are named individually, and + is clamped to ``[0, MAX_REPORTED_SPM_UNITS_HARD_CAP]`` + (:func:`_clamped_report_cap`) — the effective value rides the details + as ``max_reported_units``. The full offending count is reported at any cap. + """ + graded = selected_frame if selected_frame is not None else base_frame + scope = "selected pool" if selected_frame is not None else "base pool" + + composition = _spm_composition(graded, unit_entity=unit_entity) + n_offending = int(composition.offending.sum()) + n_units = int(len(composition.unit_ids)) + + details: dict[str, Any] = { + "graded_scope": scope, + "unit_entity": unit_entity, + "n_units": n_units, + "n_units_without_classified_adult": n_offending, + "n_units_without_member_aged_18_or_over": ( + composition.n_units_without_member_18_plus + ), + **composition.role_details, + } + if selected_frame is not None: + pool = _spm_composition(base_frame, unit_entity=unit_entity) + details["base_pool_n_units"] = int(len(pool.unit_ids)) + details["base_pool_n_units_without_classified_adult"] = int( + pool.offending.sum() + ) + details["base_pool_n_units_without_member_aged_18_or_over"] = ( + pool.n_units_without_member_18_plus + ) + + report_cap = _clamped_report_cap(max_reported) + rows = _offending_unit_rows( + composition, unit_entity=unit_entity, max_reported=report_cap + ) + details["max_reported_units"] = report_cap + details["n_units_reported"] = len(rows) + + if n_offending == 0: + return CheckResult( + name="spm_composition", + status="PASS", + summary=( + f"all {n_units:,} {unit_entity}s in the {scope} have a " + f"classified adult (role source: {composition.role_source})" + ), + rows=rows, + details=details, + ) + + elided = n_offending - len(rows) + # ``--max-reported-spm-units 0`` names none of them; the count still stands. + named = ( + f"{unit_entity}_id(s): " + + ", ".join(str(row[f"{unit_entity}_id"]) for row in rows) + + (f" (+{elided} more)" if elided > 0 else "") + if rows + else f"no {unit_entity}_id named (report cap {report_cap})" + ) + return CheckResult( + name="spm_composition", + status="FAIL", + summary=( + f"{n_offending:,} of {n_units:,} {unit_entity}s in the {scope} have " + "no classified adult; the whole population's SPM measurement would " + "raise SPM_COMPOSITION_REQUIRED" + ), + failures=( + f"{n_offending} {unit_entity}(s) have no member aged 18 or over and " + "no member aged 15-17 carrying an SPM independence role (role " + f"source: {composition.role_source}). " + named + ".", + SPM_COMPOSITION_REMEDY, + ), + rows=rows, + details=details, + ) diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/spm_independence_role.py b/packages/microcosm-build/src/microcosm/build/us_runtime/spm_independence_role.py new file mode 100644 index 0000000000..0bcd6b39ff --- /dev/null +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/spm_independence_role.py @@ -0,0 +1,608 @@ +"""Measured Census SPM independence role as a person input leaf. + +``is_spm_independent_minor_role`` is the one dataset source input the engine +declares (``policyengine_us.spm.DATASET_SOURCE_INPUTS``): a Boolean the +producer must deliver from the source, never synthesize. spm-calculator's +measurement classifies a 15-to-17-year-old as an adult only when it is True, +and one SPM unit with no classified adult refuses the whole population's SPM +measurement (``SPM_COMPOSITION_REQUIRED``). + +None of the frozen ``census_cps_*.h5`` inputs carries ``SPM_HEAD``, and only the +2024 vintage carries ``A_FAMTYP``/``A_FAMREL``, so the role cannot be read off +the pooled frame. This stage restores it the way ``LKWEEKS``, ``ED_VAL`` and +``PAW_TYP`` are restored: from the pinned complete Census ASEC person CSVs +(read from the official archive or its extracted member) by +exact ``(source_year, PERIDNUM)`` identity, through the certified derivation +:func:`~microcosm.build.us_runtime.spm_role_source.derive_spm_role_source`, +unchanged. That derivation refuses a person with no ASEC origin, a native SPM +unit that repeats a source person or mixes two source units, a unit with more +or fewer than one ``SPM_HEAD``, a unit left with no classified adult after the +role, and any disagreement with Census's own ``SPM_NUMADULTS`` / +``SPM_NUMKIDS`` / ``SPM_NUMPER``. Nothing is imputed, no weight is used, and no +age is changed. + +The stage projects the frame's identity, age and Census count columns into a +temporary H5 solely so the derivation can hash and read its input the way it +does for a published parent; the projection's digest is recorded in the +provenance as ``frame_projection_sha256``. +""" + +from __future__ import annotations + +import hashlib +import tempfile +from collections.abc import Mapping +from importlib.resources import files +from pathlib import Path +from typing import Any + +import numpy as np +import pandas as pd + +from microcosm.build.gates import GateResult +from microcosm.build.source_manifest import ( + SourceOperationSpec, + SourceStageSpec, + load_source_manifest, +) +from microcosm.build.source_runtime import ( + SourceRuntimeConfig, + SourceRuntimeContext, + SourceRuntimeError, + run_source_stage, +) +from microcosm.build.us_runtime.education_assistance_source import ( + ASEC_EDUCATION_ASSISTANCE_INCOME_YEARS, + fetch_asec_education_assistance_source, +) +from microcosm.build.us_runtime.spm_composition import check_spm_composition +from microcosm.build.us_runtime.spm_role_source import ( + _OPTIONAL_RAW_CHECKS, + _REQUIRED_RAW_CHECKS, + ASEC_SPM_ROLE_SOURCES, + NATIVE_SPM_ROLE, + AsecSpmRoleSource, + derive_spm_role_source, +) +from microcosm.frame import Frame, put_frame_table +from microcosm.frame.units import US_SCHEMA + +__all__ = [ + "US_SPM_INDEPENDENCE_ROLE_NONCONSTANT_PERSON_COLUMNS", + "US_SPM_INDEPENDENCE_ROLE_OPERATION_KIND", + "US_SPM_INDEPENDENCE_ROLE_OPTIONAL_SOURCE_COLUMNS", + "US_SPM_INDEPENDENCE_ROLE_OUTPUT_COLUMNS", + "US_SPM_INDEPENDENCE_ROLE_PROVENANCE_KEY", + "US_SPM_INDEPENDENCE_ROLE_REQUIRED_SOURCE_COLUMNS", + "US_SPM_INDEPENDENCE_ROLE_SOURCE_PATHS_KEY", + "US_SPM_INDEPENDENCE_ROLE_SOURCE_PINS_KEY", + "US_SPM_INDEPENDENCE_ROLE_STAGE_NAME", + "derive_us_spm_independence_role_from_manifest", + "resolve_asec_spm_role_source_paths", + "us_spm_independence_role_signal_gate", + "us_spm_independence_role_stage_spec", + "us_spm_independence_role_summary", + "with_us_spm_independence_role", +] + +US_SPM_INDEPENDENCE_ROLE_STAGE_NAME = "spm_independence_role" +US_SPM_INDEPENDENCE_ROLE_OPERATION_KIND = "derive_spm_independence_role" + +US_SPM_INDEPENDENCE_ROLE_OUTPUT_COLUMNS: tuple[str, ...] = (NATIVE_SPM_ROLE,) +US_SPM_INDEPENDENCE_ROLE_NONCONSTANT_PERSON_COLUMNS = ( + US_SPM_INDEPENDENCE_ROLE_OUTPUT_COLUMNS +) + +#: The person columns :func:`derive_spm_role_source` requires of its parent: +#: frame identity, the source join key, the model age, the ASEC identity the +#: source join is verified against, and the raw age/count fields it reconciles +#: against the pinned Census CSV. The tail is imported from the derivation so +#: the two lists cannot drift; a test pins that the derivation refuses each. +US_SPM_INDEPENDENCE_ROLE_REQUIRED_SOURCE_COLUMNS: tuple[str, ...] = ( + "person_id", + "person_spm_unit_id", + "source_year", + "PERIDNUM", + "age", + "source_household_id", + "source_person_id", + "source_row_id", + *_REQUIRED_RAW_CHECKS, +) + +#: Raw fields the derivation verifies against the pinned CSV *when the frame +#: carries them*. They are projected through when present and never required. +US_SPM_INDEPENDENCE_ROLE_OPTIONAL_SOURCE_COLUMNS: tuple[str, ...] = _OPTIONAL_RAW_CHECKS + +#: ``SourceRuntimeConfig.extra`` keys the handler reads: income year -> pinned +#: complete Census ASEC person source path (the official archive or its +#: extracted person CSV), and (tests only) income year -> +#: :class:`AsecSpmRoleSource` pins for a synthetic CSV. +US_SPM_INDEPENDENCE_ROLE_SOURCE_PATHS_KEY = "asec_spm_role_source_paths" +US_SPM_INDEPENDENCE_ROLE_SOURCE_PINS_KEY = "asec_spm_role_source_pins" + +#: Frame metadata key under which :func:`with_us_spm_independence_role` records +#: the derivation's provenance (reconciliation counts, pinned CSV digests). +US_SPM_INDEPENDENCE_ROLE_PROVENANCE_KEY = "spm_independence_role" + +_PROVENANCE_ATTR = "spm_independence_role_provenance" +_SPM_UNIT_TABLE = "spm_unit" +_SPM_UNIT_ID = "spm_unit_id" +_DERIVE_PARAMETER_KEYS = frozenset() + +#: Plausibility bands, measured on the three pinned vintages: the role share +#: among all persons (the SPM head plus spouses; 0.601-0.603 per vintage on the +#: phase-2 base, 0.567 on Build P) and among 15-to-17-year-olds (1.49 %-1.73 % +#: per vintage). See ``docs/us-spm-role-stage.md`` §2 and the committed +#: receipts under ``experiments/``. +_ROLE_SHARE_BAND = (0.40, 0.75) +_MINOR_ROLE_SHARE_BAND = (0.003, 0.06) + + +def us_spm_independence_role_stage_spec() -> SourceStageSpec: + """Load the packaged ``spm_independence_role`` stage declaration.""" + + manifest = load_source_manifest( + files("microcosm.build.us").joinpath("source_stages.json") + ) + stage_map = manifest.stage_map() + if US_SPM_INDEPENDENCE_ROLE_STAGE_NAME not in stage_map: + raise ValueError( + "US source manifest declares no " + f"{US_SPM_INDEPENDENCE_ROLE_STAGE_NAME!r} stage." + ) + spec = stage_map[US_SPM_INDEPENDENCE_ROLE_STAGE_NAME] + if tuple(spec.outputs) != US_SPM_INDEPENDENCE_ROLE_OUTPUT_COLUMNS: + raise ValueError( + f"{US_SPM_INDEPENDENCE_ROLE_STAGE_NAME!r} manifest outputs do not " + "match the runtime-owned SPM independence role." + ) + return spec + + +def resolve_asec_spm_role_source_paths( + paths: Mapping[int, str | Path] | None, + *, + income_years: tuple[int, ...] = ASEC_EDUCATION_ASSISTANCE_INCOME_YEARS, +) -> dict[int, Path]: + """Return one pinned complete person source path per pooled income year. + + ``paths`` uses the ``--asec-education-source INCOME_YEAR=PATH`` vocabulary: + each path is the pinned official Census survey archive or the person CSV + extracted from it. An income year without a path is fetched from the + official Census archive, verified against the same pins and extracted, + exactly as the education sidecar is; the returned path is then the CSV. + The derivation re-verifies every source itself: a CSV's size and SHA-256, + or an archive's SHA-256 and its one pinned member's size and SHA-256. + """ + + provided = ( + {} if paths is None else {int(year): Path(p) for year, p in paths.items()} + ) + unknown = sorted(set(provided) - set(ASEC_SPM_ROLE_SOURCES)) + if unknown: + raise ValueError( + "No pinned ASEC SPM role source covers income year(s) " + f"{unknown}; pinned income years: {sorted(ASEC_SPM_ROLE_SOURCES)}." + ) + unpinned = sorted(set(income_years) - set(ASEC_SPM_ROLE_SOURCES)) + if unpinned: + raise ValueError( + "The pooled income year(s) " + f"{unpinned} have no pinned ASEC SPM role source; pinned income " + f"years: {sorted(ASEC_SPM_ROLE_SOURCES)}." + ) + return { + year: ( + provided[year].expanduser() + if year in provided + else fetch_asec_education_assistance_source(year) + ) + for year in sorted(income_years) + } + + +def _sha256(path: Path) -> str: + with path.open("rb") as stream: + return hashlib.file_digest(stream, "sha256").hexdigest() + + +def _write_role_projection( + path: Path, + person: pd.DataFrame, + spm_unit: pd.DataFrame, +) -> str: + """Write the certified derivation's parent H5 and return its SHA-256. + + :func:`derive_spm_role_source` reads its parent with ``pd.read_hdf`` and + binds it by digest, so the stage hands it a fixed-format projection of + the frame. The projection carries Frame columns, so it is a registered + serializer (``spm_role_derivation_projection`` in + :mod:`microcosm.build.frame_serializer_registry`) and writes through the + shared nullable-boolean boundary rather than a bare ``DataFrame.to_hdf``. + """ + + with pd.HDFStore(path, mode="w") as store: + put_frame_table(store, "person", person, preferred_format="fixed") + put_frame_table(store, _SPM_UNIT_TABLE, spm_unit, preferred_format="fixed") + return _sha256(path) + + +def _role_binding_sha256(person: pd.DataFrame) -> str: + """Bind the gate receipt to the ordered person/age/unit/role surface.""" + + columns = ["person_id", "person_spm_unit_id", "age", NATIVE_SPM_ROLE] + hashes = pd.util.hash_pandas_object(person[columns], index=False) + return hashlib.sha256(hashes.to_numpy(dtype=" pd.DataFrame: + """Attach the source role through the certified derivation, or fail closed. + + The person table is the stage's primary table; the ``spm_unit`` table and + the pinned CSV paths come from the runtime context. Every refusal of + :func:`derive_spm_role_source` surfaces as a :class:`SourceRuntimeError` + naming this stage; nothing is defaulted. + """ + + if operation.kind != US_SPM_INDEPENDENCE_ROLE_OPERATION_KIND: + raise SourceRuntimeError( + "US SPM independence role derivation received unexpected operation " + f"{operation.kind!r}." + ) + if frame is None: + raise SourceRuntimeError( + "US SPM independence role derivation requires the person table to " + "be read first." + ) + unexpected = sorted(set(operation.parameters) - _DERIVE_PARAMETER_KEYS) + if unexpected: + raise SourceRuntimeError( + "US SPM independence role derivation received unsupported " + f"parameter(s): {unexpected}." + ) + if context is None: + raise SourceRuntimeError( + "US SPM independence role derivation requires the runtime context " + "(the spm_unit table and the pinned Census ASEC person CSV paths)." + ) + missing = [ + column + for column in US_SPM_INDEPENDENCE_ROLE_REQUIRED_SOURCE_COLUMNS + if column not in frame.columns + ] + if missing: + raise SourceRuntimeError( + f"US SPM independence role derivation requires person column(s): {missing}." + ) + spm_unit = context.read_table(_SPM_UNIT_TABLE) + if _SPM_UNIT_ID not in spm_unit.columns: + raise SourceRuntimeError( + "US SPM independence role derivation requires the spm_unit table to " + f"carry {_SPM_UNIT_ID!r}." + ) + paths = context.config.extra.get(US_SPM_INDEPENDENCE_ROLE_SOURCE_PATHS_KEY) + if not isinstance(paths, Mapping) or not paths: + raise SourceRuntimeError( + "US SPM independence role derivation requires the pinned complete " + "Census ASEC person CSV paths under config.extra" + f"[{US_SPM_INDEPENDENCE_ROLE_SOURCE_PATHS_KEY!r}] (income year -> path)." + ) + pins = context.config.extra.get(US_SPM_INDEPENDENCE_ROLE_SOURCE_PINS_KEY) + if pins is not None and ( + not isinstance(pins, Mapping) + or not all(isinstance(pin, AsecSpmRoleSource) for pin in pins.values()) + ): + raise SourceRuntimeError( + "US SPM independence role derivation source pins must map income " + "years to AsecSpmRoleSource." + ) + + columns = [ + *US_SPM_INDEPENDENCE_ROLE_REQUIRED_SOURCE_COLUMNS, + *( + column + for column in US_SPM_INDEPENDENCE_ROLE_OPTIONAL_SOURCE_COLUMNS + if column in frame.columns + ), + ] + with tempfile.TemporaryDirectory(prefix="spm-independence-role-") as scratch: + projection = Path(scratch) / "frame_projection.h5" + digest = _write_role_projection( + projection, frame[columns], spm_unit[[_SPM_UNIT_ID]] + ) + try: + result = derive_spm_role_source( + projection, + {int(year): Path(path) for year, path in paths.items()}, + expected_parent_sha256=digest, + source_pins=None if pins is None else dict(pins), + ) + except (ValueError, OSError) as error: + raise SourceRuntimeError( + f"US SPM independence role derivation refused: {error}" + ) from error + + if not np.array_equal( + result.evidence["person_id"].to_numpy(), frame["person_id"].to_numpy() + ): + raise SourceRuntimeError( + "US SPM independence role derivation returned roles out of person order." + ) + role = np.asarray(result.role, dtype=bool) + if role.shape != (len(frame),): + raise SourceRuntimeError( + "US SPM independence role derivation did not cover every person." + ) + output = frame.copy(deep=True) + output[NATIVE_SPM_ROLE] = role + output.attrs[_PROVENANCE_ATTR] = { + **result.provenance, + "frame_projection_sha256": digest, + "frame_projection_columns": list(columns), + "person_role_binding_sha256": _role_binding_sha256(output), + } + return output + + +def _frame_income_years(person: pd.DataFrame) -> tuple[int, ...]: + years = pd.to_numeric(person["source_year"], errors="coerce") + if years.isna().any() or (years != np.floor(years)).any(): + raise ValueError("US SPM independence role requires integer source_year.") + return tuple(sorted(int(year) for year in years.unique())) + + +def with_us_spm_independence_role( + frame: Frame, + *, + seed: int, + time_period: int, + asec_spm_role_source_paths: Mapping[int, str | Path] | None = None, + source_pins: Mapping[int, AsecSpmRoleSource] | None = None, +) -> Frame: + """Materialize the measured SPM independence role on a US frame. + + An existing role is checked against the pinned source again, never treated + as evidence that source reconciliation has already happened. + ``asec_spm_role_source_paths`` maps income years to the pinned official + Census ASEC archives or their extracted person CSVs; years without a path + are fetched and verified. + ``source_pins`` exists for synthetic tests and defaults to the certified + pins of the frame's own income years. + """ + + if frame.schema != US_SCHEMA: + raise ValueError("US SPM independence role requires the US schema.") + person = frame.table("person") + existing_role = ( + person[NATIVE_SPM_ROLE] if NATIVE_SPM_ROLE in person.columns else None + ) + if existing_role is not None and ( + existing_role.isna().any() + or pd.api.types.infer_dtype(existing_role, skipna=False) != "boolean" + ): + raise ValueError( + "US SPM independence role requires an existing role to contain " + "only non-null Boolean observations." + ) + if "source_year" not in person: + raise ValueError( + "US SPM independence role requires the person table to carry source_year." + ) + income_years = _frame_income_years(person) + if source_pins is None: + paths = resolve_asec_spm_role_source_paths( + asec_spm_role_source_paths, income_years=income_years + ) + pins = {year: ASEC_SPM_ROLE_SOURCES[year] for year in income_years} + else: + if asec_spm_role_source_paths is None: + raise ValueError( + "US SPM independence role requires explicit CSV paths when " + "source pins are supplied." + ) + paths = { + int(year): Path(path).expanduser() + for year, path in asec_spm_role_source_paths.items() + } + pins = dict(source_pins) + + output = run_source_stage( + us_spm_independence_role_stage_spec(), + tables={ + "person": person.copy(deep=True), + _SPM_UNIT_TABLE: frame.table(_SPM_UNIT_TABLE).copy(deep=True), + }, + operation_handlers={ + US_SPM_INDEPENDENCE_ROLE_OPERATION_KIND: ( + derive_us_spm_independence_role_from_manifest + ) + }, + config=SourceRuntimeConfig( + seed=int(seed), + target_year=int(time_period), + extra={ + US_SPM_INDEPENDENCE_ROLE_SOURCE_PATHS_KEY: paths, + US_SPM_INDEPENDENCE_ROLE_SOURCE_PINS_KEY: pins, + }, + ), + ) + aligned = output.set_index("person_id").reindex(person["person_id"]) + if aligned[NATIVE_SPM_ROLE].isna().any(): + raise ValueError( + "US SPM independence role stage output does not cover every person " + f"for {NATIVE_SPM_ROLE!r}." + ) + if existing_role is not None and not np.array_equal( + existing_role.to_numpy(dtype=bool), + aligned[NATIVE_SPM_ROLE].to_numpy(dtype=bool), + ): + raise ValueError( + "US SPM independence role disagrees with the pinned Census source; " + "refusing to overwrite existing observations." + ) + provenance = output.attrs.get(_PROVENANCE_ATTR) + if not isinstance(provenance, Mapping): + raise ValueError( + "US SPM independence role stage returned no derivation provenance." + ) + + tables = {entity: frame.table(entity).copy() for entity in frame.entities} + tables["person"][NATIVE_SPM_ROLE] = aligned[NATIVE_SPM_ROLE].to_numpy(dtype=bool) + return 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, + US_SPM_INDEPENDENCE_ROLE_PROVENANCE_KEY: _json_ready(provenance), + }, + ) + + +def _json_ready(value: Any) -> Any: + """Frame metadata must be plain, hashable-friendly builtins.""" + + if isinstance(value, Mapping): + return {str(key): _json_ready(nested) for key, nested in value.items()} + if isinstance(value, list | tuple): + return [_json_ready(item) for item in value] + if isinstance(value, np.generic): + return value.item() + return value + + +def us_spm_independence_role_summary(frame: Frame) -> dict[str, object]: + """Return role shares, the composition verdict, and the recorded provenance.""" + + person = frame.table("person") + weights = np.asarray(frame.resolve_weights("person").values, dtype=np.float64) + total_weight = float(weights.sum()) + role = person[NATIVE_SPM_ROLE].fillna(False).astype(bool).to_numpy() + age = pd.to_numeric(person["age"], errors="coerce").to_numpy(dtype=np.float64) + minor = (age >= 15.0) & (age < 18.0) + minor_weight = float(weights[minor].sum()) + + composition = check_spm_composition(frame) + provenance = frame.metadata.get(US_SPM_INDEPENDENCE_ROLE_PROVENANCE_KEY) + return { + "role_share": ( + float(weights[role].sum()) / total_weight if total_weight else 0.0 + ), + "role_share_band": list(_ROLE_SHARE_BAND), + "minor_role_share": ( + float(weights[role & minor].sum()) / minor_weight if minor_weight else 0.0 + ), + "minor_role_share_band": list(_MINOR_ROLE_SHARE_BAND), + "persons_aged_15_to_17": int(minor.sum()), + "independent_minor_persons": int((role & minor).sum()), + "role_missing_values": int(person[NATIVE_SPM_ROLE].isna().sum()), + "unique_counts": { + NATIVE_SPM_ROLE: int(person[NATIVE_SPM_ROLE].dropna().nunique()) + }, + "spm_composition": { + "status": composition.status, + "role_source": composition.details["role_source"], + "n_units": composition.details["n_units"], + "n_units_without_classified_adult": composition.details[ + "n_units_without_classified_adult" + ], + "n_units_without_member_aged_18_or_over": composition.details[ + "n_units_without_member_aged_18_or_over" + ], + }, + "derivation": ( + _json_ready(provenance) if isinstance(provenance, Mapping) else None + ), + } + + +def us_spm_independence_role_signal_gate(frame: Frame) -> GateResult: + """Require a source-delivered, non-degenerate role that classifies every unit.""" + + person = frame.table("person") + missing = [name for name in (NATIVE_SPM_ROLE, "age") if name not in person] + if missing: + return GateResult( + name="spm_independence_role_signal", + passed=False, + failures=(f"person columns missing: {missing!r}.",), + details={"missing": missing}, + ) + + values = person[NATIVE_SPM_ROLE].dropna() + if len(values) and pd.api.types.infer_dtype(values, skipna=False) != "boolean": + return GateResult( + name="spm_independence_role_signal", + passed=False, + failures=(f"{NATIVE_SPM_ROLE} carries non-Boolean values.",), + details={"role_dtype": str(person[NATIVE_SPM_ROLE].dtype)}, + ) + + summary = us_spm_independence_role_summary(frame) + failures: list[str] = [] + provenance = summary["derivation"] + if provenance is None: + failures.append("SPM independence role has no source derivation provenance.") + else: + counts = { + "persons_joined": len(person), + "table_rows": len(person), + "native_spm_units": frame.n(_SPM_UNIT_TABLE), + "true_role_persons": int(values.sum()), + } + for key, expected in counts.items(): + if provenance.get(key) != expected: + failures.append(f"SPM role provenance {key} differs from the frame.") + if provenance.get("person_role_binding_sha256") != _role_binding_sha256(person): + failures.append( + "SPM role provenance does not match the person/age/unit/role surface." + ) + missing_values = int(summary["role_missing_values"]) + if missing_values: + failures.append( + f"{NATIVE_SPM_ROLE} is missing for {missing_values} person(s); the " + "engine reads a stored role, never a default." + ) + if int(summary["unique_counts"][NATIVE_SPM_ROLE]) < 2: + failures.append( + f"{NATIVE_SPM_ROLE} is degenerate with " + f"{summary['unique_counts'][NATIVE_SPM_ROLE]} distinct value(s)." + ) + composition = summary["spm_composition"] + if composition["role_source"] != "source_column": + failures.append( + "SPM composition is not classified from the source column " + f"(role source: {composition['role_source']})." + ) + unresolved = int(composition["n_units_without_classified_adult"]) + if unresolved: + failures.append( + f"{unresolved} SPM unit(s) have no classified adult after the role; " + "the whole population's SPM measurement would raise " + "SPM_COMPOSITION_REQUIRED." + ) + for share_key, band_key, label in ( + ("role_share", "role_share_band", "SPM independence role weighted share"), + ( + "minor_role_share", + "minor_role_share_band", + "SPM independence role weighted share among 15-to-17-year-olds", + ), + ): + share = float(summary[share_key]) + lower, upper = summary[band_key] + if not lower <= share <= upper: + failures.append(f"{label} {share:.6f} outside [{lower:.6f}, {upper:.6f}].") + return GateResult( + name="spm_independence_role_signal", + passed=not failures, + failures=tuple(failures), + details=summary, + ) diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/spm_role_source.py b/packages/microcosm-build/src/microcosm/build/us_runtime/spm_role_source.py index 0842e34aec..03cc5c2777 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/spm_role_source.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/spm_role_source.py @@ -9,6 +9,7 @@ from __future__ import annotations import hashlib +import zipfile from collections.abc import Mapping from dataclasses import dataclass from pathlib import Path @@ -152,6 +153,51 @@ def _reconcile_units(persons: pd.DataFrame, key: str, label: str) -> pd.DataFram return units +def _read_source_columns(source: Path | Any) -> pd.DataFrame: + return pd.read_csv( + source, + usecols=list(_SOURCE_COLUMNS), + dtype={"PERIDNUM": str, "SPM_ID": str}, + low_memory=False, + ) + + +def _read_archive_member( + path: Path, pin: AsecSpmRoleSource, label: str +) -> pd.DataFrame: + """Read the pinned person CSV from inside the official Census archive. + + ``--asec-education-source`` names either that archive or its extracted + person CSV (``education_assistance_source._load_one_source`` accepts both), + so the role stage accepts both too. The archive must be the pinned one and + hold exactly one pinned member whose size and SHA-256 equal the CSV pins; + the archive is re-hashed after reading. + """ + + _require(_sha256(path) == pin.archive_sha256, f"{label} archive SHA-256 mismatch.") + with zipfile.ZipFile(path) as archive: + members = [info for info in archive.infolist() if info.filename == pin.member] + _require( + len(members) == 1, + f"{label} archive must contain exactly one {pin.member!r} member.", + ) + info = members[0] + _require( + info.file_size == pin.csv_size_bytes, f"{label} CSV byte length mismatch." + ) + digest = hashlib.sha256() + with archive.open(info) as member: + for chunk in iter(lambda: member.read(8 * 1024 * 1024), b""): + digest.update(chunk) + _require(digest.hexdigest() == pin.csv_sha256, f"{label} CSV SHA-256 mismatch.") + with archive.open(info) as member: + source = _read_source_columns(member) + _require( + _sha256(path) == pin.archive_sha256, f"{label} archive changed while reading." + ) + return source + + def _load_source( path: Path, pin: AsecSpmRoleSource ) -> tuple[pd.DataFrame, dict[str, Any]]: @@ -159,17 +205,16 @@ def _load_source( _require( pin.survey_year == pin.income_year + 1, f"{label} income/survey year mismatch." ) - _require( - path.stat().st_size == pin.csv_size_bytes, f"{label} CSV byte length mismatch." - ) - _require(_sha256(path) == pin.csv_sha256, f"{label} CSV SHA-256 mismatch.") - source = pd.read_csv( - path, - usecols=list(_SOURCE_COLUMNS), - dtype={"PERIDNUM": str, "SPM_ID": str}, - low_memory=False, - ) - _require(_sha256(path) == pin.csv_sha256, f"{label} CSV changed while reading.") + if zipfile.is_zipfile(path): + source = _read_archive_member(path, pin, label) + else: + _require( + path.stat().st_size == pin.csv_size_bytes, + f"{label} CSV byte length mismatch.", + ) + _require(_sha256(path) == pin.csv_sha256, f"{label} CSV SHA-256 mismatch.") + source = _read_source_columns(path) + _require(_sha256(path) == pin.csv_sha256, f"{label} CSV changed while reading.") _require(len(source) == pin.persons, f"{label} CSV person count mismatch.") source["PERIDNUM"] = _exact_person_keys(source.PERIDNUM, label) _require(bool(source.PERIDNUM.is_unique), f"{label} has duplicate PERIDNUM keys.") @@ -225,12 +270,16 @@ def derive_spm_role_source( expected_parent_sha256: str, source_pins: Mapping[int, AsecSpmRoleSource] | None = None, ) -> SpmRoleSourceResult: - """Derive and reconcile from complete pinned CSVs; never trust a sidecar. - - Local CSV paths are mandatory; the existing education-assistance Census - fetcher can obtain their pinned archives separately. The default pins cover - all three certified BuildP source years. Alternate pins support explicit - review of other populations and small synthetic tests. + """Derive and reconcile from complete pinned sources; never trust a sidecar. + + Local source paths are mandatory. Each is either the pinned official + Census survey archive or the complete person CSV extracted from it (the + ``--asec-education-source`` vocabulary); the archive must be the pinned + one and hold exactly one pinned member that matches the CSV pins. The + existing education-assistance Census fetcher can obtain the pinned + archives, and extract their person CSVs, separately. The default pins + cover all three certified BuildP source years. Alternate pins support + explicit review of other populations and small synthetic tests. Support clones may repeat a source person across native units. Within every native unit, the source members must be unique and exhaust one complete diff --git a/packages/microcosm-build/tests/test_frame_serializer_registry.py b/packages/microcosm-build/tests/test_frame_serializer_registry.py index 46bf4ca796..73fa004805 100644 --- a/packages/microcosm-build/tests/test_frame_serializer_registry.py +++ b/packages/microcosm-build/tests/test_frame_serializer_registry.py @@ -25,6 +25,9 @@ _write_uk_single_year_tables, ) from microcosm.build.us_runtime.h5_io import write_nullable_us_h5 +from microcosm.build.us_runtime.spm_independence_role import ( + _write_role_projection, +) from microcosm.frame import ( US_SCHEMA, EntitySchema, @@ -374,6 +377,21 @@ def _round_trip_us_annual_static_aging( return _semantic_observation(source, before, loaded) +def _round_trip_spm_role_projection( + tmp_path: Path, nullable_case: str +) -> BooleanRoundTrip: + pytest.importorskip("tables") + source = _dtype_family_table(nullable_case) + before = source.copy(deep=True) + spm_unit = pd.DataFrame({"spm_unit_id": np.asarray([1, 2, 3], dtype=np.int64)}) + path = tmp_path / "spm-role-projection.h5" + digest = _write_role_projection(path, source, spm_unit) + assert len(digest) == 64 + with pd.HDFStore(path, mode="r") as store: + loaded = read_frame_table(store, "person") + return _semantic_observation(source, before, loaded) + + ROUND_TRIP_ADAPTERS: dict[str, RoundTripAdapter] = { "frame_checkpoint": _round_trip_frame_checkpoint, "nullable_us_h5": _round_trip_nullable_us_h5, @@ -384,6 +402,7 @@ def _round_trip_us_annual_static_aging( "legacy_us_two_spine": _round_trip_legacy_us, "acs_local_lean_checkpoint": _round_trip_acs_lean, "fiscal_target_frame_checkpoint": _round_trip_fiscal_checkpoint, + "spm_role_derivation_projection": _round_trip_spm_role_projection, } @@ -453,10 +472,10 @@ def test_registry_classifies_every_writable_production_hdf_site() -> None: assert _discover_writable_hdf_sites() == classified -def test_registry_has_exactly_nine_unique_frame_table_serializers() -> None: - assert len(FRAME_TABLE_SERIALIZERS) == 9 - assert len({spec.serializer_id for spec in FRAME_TABLE_SERIALIZERS}) == 9 - assert len({spec.writer.key for spec in FRAME_TABLE_SERIALIZERS}) == 9 +def test_registry_has_exactly_ten_unique_frame_table_serializers() -> None: + assert len(FRAME_TABLE_SERIALIZERS) == 10 + assert len({spec.serializer_id for spec in FRAME_TABLE_SERIALIZERS}) == 10 + assert len({spec.writer.key for spec in FRAME_TABLE_SERIALIZERS}) == 10 def test_round_trip_adapter_registry_exactly_matches_serializer_registry() -> None: diff --git a/packages/microcosm-build/tests/test_spec_engine_coverage_tool.py b/packages/microcosm-build/tests/test_spec_engine_coverage_tool.py index 006580bd5b..b6f65a195a 100644 --- a/packages/microcosm-build/tests/test_spec_engine_coverage_tool.py +++ b/packages/microcosm-build/tests/test_spec_engine_coverage_tool.py @@ -88,21 +88,21 @@ 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_162 - assert fields["authored_normative_field_count"] == 32_390 - assert fields["resolved_binding_field_count"] == 9_772 - assert fields["consumed_field_count"] == 42_162 + assert fields["configuration_field_count"] == 42_180 + assert fields["authored_normative_field_count"] == 32_400 + assert fields["resolved_binding_field_count"] == 9_780 + assert fields["consumed_field_count"] == 42_180 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": 13_988, + "legacy_behavior": 14_006, "compiler_semantic": 27_717, "front_end_validation": 354, "identity_only": 103, } assert fields["generation0_effect_counts"] == { - "legacy_behavior": 38_476, + "legacy_behavior": 38_494, "no_generation0_effect": 3_686, } diff --git a/packages/microcosm-build/tests/test_spec_engine_engine_abi.py b/packages/microcosm-build/tests/test_spec_engine_engine_abi.py index 134cec19cc..90a1a1397f 100644 --- a/packages/microcosm-build/tests/test_spec_engine_engine_abi.py +++ b/packages/microcosm-build/tests/test_spec_engine_engine_abi.py @@ -362,15 +362,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"]) == 1058 - assert remaining["receipt"]["entry_count"] == 1058 + assert len(remaining["rows"]) == 1059 + assert remaining["receipt"]["entry_count"] == 1059 assert remaining["receipt"]["stage_counts"] == { "derive": 34, "seed": 33, - "simulate": 991, + "simulate": 992, } assert remaining["receipt"]["manifest_sha256"] == ( - "df42a6d95e4b98ce158334014dc9524de8f7791757eeaf3c6392d8d9b8469edf" + "0a84565a659a6404cb17715dda36f094a87431c713c7a37bf65a936b16937325" ) assert ( remaining["receipt"]["ssi_dependency_contract"]["engine_version_ref"] @@ -431,9 +431,7 @@ def absent(package: str) -> str: monkeypatch.setattr(engine_abi, "_installed_engine_version", absent) registry = load_schema_registry() - us_root = ( - Path(__file__).resolve().parents[1] / "src" / "microcosm" / "build" / "us" - ) + us_root = Path(__file__).resolve().parents[1] / "src" / "microcosm" / "build" / "us" spec_dir = us_root / "spec" lock_path = tmp_path / engine_abi.ENGINE_ABI_LOCK_FILENAME parsed = json_module.loads( diff --git a/packages/microcosm-build/tests/test_spec_engine_field_usage.py b/packages/microcosm-build/tests/test_spec_engine_field_usage.py index 2ec60e9be8..4d468b5135 100644 --- a/packages/microcosm-build/tests/test_spec_engine_field_usage.py +++ b/packages/microcosm-build/tests/test_spec_engine_field_usage.py @@ -92,22 +92,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_162 + assert len(field_ledger.fields) == EXPECTED_CONFIGURATION_FIELD_COUNT == 42_180 assert field_ledger.source_counts == { - "authored": 32_390, - "resolved_bindings": 9_772, + "authored": 32_400, + "resolved_bindings": 9_780, } assert field_ledger.mode_counts == { - "legacy_behavior": 13_988, + "legacy_behavior": 14_006, "compiler_semantic": 27_717, "front_end_validation": 354, "identity_only": 103, } assert field_ledger.generation0_effect_counts == { - "legacy_behavior": 38_476, + "legacy_behavior": 38_494, "no_generation0_effect": 3_686, } - assert len({field.pointer for field in field_ledger.fields}) == 42_162 + assert len({field.pointer for field in field_ledger.fields}) == 42_180 def test_eligibility_concepts_are_validation_not_generation0_behavior( diff --git a/packages/microcosm-build/tests/test_spec_engine_inventory_coverage.py b/packages/microcosm-build/tests/test_spec_engine_inventory_coverage.py index 3aebb7ac8f..b8557addd4 100644 --- a/packages/microcosm-build/tests/test_spec_engine_inventory_coverage.py +++ b/packages/microcosm-build/tests/test_spec_engine_inventory_coverage.py @@ -127,7 +127,7 @@ def binding() -> dict[str, object]: "seed_sites": 53, "seed_streams": 14, "source_operators": 16, - "source_stages": 37, + "source_stages": 38, "stacked_checkpoint_full_components": 13, "stacked_checkpoint_pool_code_components": 19, "stacked_checkpoint_static_components": 10, diff --git a/packages/microcosm-build/tests/test_spec_engine_loader.py b/packages/microcosm-build/tests/test_spec_engine_loader.py index 38ab6f5162..8abeb60861 100644 --- a/packages/microcosm-build/tests/test_spec_engine_loader.py +++ b/packages/microcosm-build/tests/test_spec_engine_loader.py @@ -236,7 +236,7 @@ def test_semantic_hash_has_golden_vector_and_surface_separation(tmp_path) -> Non # Pin the domain separator, normalization rules, schema-set receipt, and # exact normative projection as one reviewable golden vector. assert first.spec_sha256 == ( - "a6cac1ed963cba8b459b47dcb41c99afd26f1eedec11cb034df89762d4ee3fbb" + "a2f0b3cd33fbd16e7f9ab44099de2abc579c71f0700137d949c9299f6ca335cd" ) second_root = _rich_minimal(tmp_path / "xy", note="second", store="local:b") diff --git a/packages/microcosm-build/tests/test_us_asec_checkpoint.py b/packages/microcosm-build/tests/test_us_asec_checkpoint.py index aa2a1338a6..c011233609 100644 --- a/packages/microcosm-build/tests/test_us_asec_checkpoint.py +++ b/packages/microcosm-build/tests/test_us_asec_checkpoint.py @@ -24,6 +24,7 @@ load_asec_raw_stage_checkpoint, load_take_up_contract, ) +from microcosm.build.us_runtime.spm_role_source import NATIVE_SPM_ROLE from microcosm.frame import US_SCHEMA, EntitySchema, Frame, WeightKind, Weights _OUTER_STAGE_ARTIFACT_KIND = "populace_outer_stage_frame" @@ -381,6 +382,24 @@ def test_operator_boundary_enumerates_full_take_up_contract() -> None: } +def test_raw_loader_rejects_prefilled_spm_independence_role(tmp_path: Path) -> None: + source = _raw_us_frame() + tables = {entity: source.table(entity).copy() for entity in source.entities} + # A nonconstant role would otherwise bypass the source stage's derivation. + tables["person"][NATIVE_SPM_ROLE] = [True, False] + contaminated = Frame( + tables, + source.schema, + {entity: source.weights_for(entity) for entity in source.weighted_entities}, + source.strata, + ) + path = tmp_path / "prefilled-spm-role.checkpoint.h5" + _write_checkpoint(path, contaminated, metadata=_raw_binding(contaminated)) + + with pytest.raises(ValueError, match="spm_independence_role:person"): + load_asec_raw_stage_checkpoint(path) + + def test_operator_boundary_accepts_only_receipted_acs_native_exception() -> None: source = _us_frame(include_age=False) tables = {entity: source.table(entity).copy() for entity in source.entities} diff --git a/packages/microcosm-build/tests/test_us_bundle_core_contracts.py b/packages/microcosm-build/tests/test_us_bundle_core_contracts.py index 02597f63c8..66569c76ad 100644 --- a/packages/microcosm-build/tests/test_us_bundle_core_contracts.py +++ b/packages/microcosm-build/tests/test_us_bundle_core_contracts.py @@ -129,7 +129,7 @@ def test_source_surface_classification_is_complete() -> None: } assert normative["stage_asset"] == { "id": "source_stages", - "sha256": "7935d891ed16eac618f04813a7b8a3ceb9a971c8b4c4273683594ba61e7dd631", + "sha256": "9f4f983091fb18dea8f4524cc100be20f9fca2b006435461592f8edf53c9a5d8", } assert operational["stage_asset"] == { "path": "microcosm.build.us/source_stages.json" diff --git a/packages/microcosm-build/tests/test_us_fiscal_refresh_builder.py b/packages/microcosm-build/tests/test_us_fiscal_refresh_builder.py index 62822fe1ec..668f3ac35d 100644 --- a/packages/microcosm-build/tests/test_us_fiscal_refresh_builder.py +++ b/packages/microcosm-build/tests/test_us_fiscal_refresh_builder.py @@ -5414,7 +5414,15 @@ def test_release_calibration_diagnostics_writes_nan_final_loss_as_null( @pytest.mark.parametrize( "terminal_mode", - ["merge", "integrity", "retirement", "crash", "telemetry", "puf_tail"], + [ + "merge", + "integrity", + "retirement", + "crash", + "telemetry", + "puf_tail", + "spm_missing_pool", + ], ) def test_main_writes_diagnostics_before_post_calibration_gate_failure( monkeypatch, tmp_path, terminal_mode @@ -5442,11 +5450,16 @@ def test_main_writes_diagnostics_before_post_calibration_gate_failure( ``puf_tail``: exact-k selection loses the original PUF capital-gains tail; the failure is batched while diagnostics and final-weight evidence remain, every later terminal group runs, and release artifacts stay suppressed. + ``spm_missing_pool``: a prepared pool without the source role fails at + the real SPM signal gate before calibration or terminal coverage checks. """ builder = _load_builder_module() + prepared_pool = terminal_mode in {"puf_tail", "spm_missing_pool"} release_id = ( "populace-us-2024-k2-gate-failure-test" if terminal_mode == "puf_tail" + else "populace-us-2024-k4-gate-failure-test" + if terminal_mode == "spm_missing_pool" else "populace-us-2024-gate-failure-test" ) base_h5 = tmp_path / "base.h5" @@ -5485,6 +5498,7 @@ def test_main_writes_diagnostics_before_post_calibration_gate_failure( "health_stage_events": [], "source_stage_events": [], "terminal_gate_events": [], + "spm_stage_calls": [], } retirement_missing_failure = ( "person columns missing: ['taxable_403b_distributions', 'keogh_distributions']." @@ -5503,6 +5517,10 @@ def n(self, entity): return 2 if terminal_mode == "puf_tail" else 4 def table(self, entity): + if terminal_mode == "spm_missing_pool" and entity == "person": + return pd.DataFrame( + {"person_id": [1, 2, 3, 4], "age": [30, 40, 16, 17]} + ) if entity != "household": raise ValueError( f"Unknown entity {entity!r}; schema declares " @@ -5547,7 +5565,7 @@ def table(self, entity): ) return pd.DataFrame({"household_id": np.asarray([10, 20], dtype="int64")}) - if terminal_mode == "puf_tail": + if prepared_pool: loss_basis = builder._fiscal_target_loss_basis(registry, np.ones(1)) incumbent = tmp_path / "incumbent.json" incumbent.write_text( @@ -5611,7 +5629,7 @@ def table(self, entity): str(weeks_source), "--no-target-frame-checkpoint", ] - if terminal_mode not in {"telemetry", "puf_tail"}: + if terminal_mode != "telemetry" and not prepared_pool: argv.append("--no-staging") argv += [ "--acs-person-zip", @@ -5635,7 +5653,7 @@ def table(self, entity): monkeypatch.setattr(builder, "_git_dirty", lambda: False) def fake_sha256(path): - if terminal_mode == "puf_tail" and Path(path) == pool_manifest: + if prepared_pool and Path(path) == pool_manifest: return "a" * 64 if Path(path) == weeks_source: return "weeks-source-sha" @@ -5693,7 +5711,13 @@ def complete(self): "_staging_telemetry", lambda *args, **kwargs: live_telemetry, ) - if terminal_mode in {"integrity", "retirement", "telemetry", "puf_tail"}: + if terminal_mode in { + "integrity", + "retirement", + "telemetry", + "puf_tail", + "spm_missing_pool", + }: monkeypatch.setattr( builder, "PolicyEngineUSEngine", @@ -5817,7 +5841,7 @@ def fake_load_frame(path, *, expected_sha256=None): return FakeFrame() monkeypatch.setattr(builder, "_load_frame", fake_load_frame) - if terminal_mode == "puf_tail": + if prepared_pool: def fake_load_pool(path, *, expected_manifest_sha256): assert path == pool_manifest @@ -6195,6 +6219,16 @@ def fake_energy_subsidy_signal_gate(frame): "with_us_relationship_inputs", lambda frame, *, seed, time_period: frame, ) + + def fake_with_spm_independence_role(frame, *, seed, time_period): + # The release wrapper deliberately resolves the pinned local cache; + # source-path overrides belong to the base builder's CLI. + captured["spm_stage_calls"].append({"seed": seed, "time_period": time_period}) + return frame + + monkeypatch.setattr( + builder, "with_us_spm_independence_role", fake_with_spm_independence_role + ) monkeypatch.setattr( builder, "with_us_medicare_take_up_input", @@ -6280,6 +6314,27 @@ def fake_energy_subsidy_signal_gate(frame): details={"checked": True}, ), ) + if terminal_mode == "spm_missing_pool": + real_spm_gate = builder.us_spm_independence_role_signal_gate + + def recording_spm_gate(frame): + gate = real_spm_gate(frame) + captured["spm_signal_gate"] = gate + return gate + + monkeypatch.setattr( + builder, "us_spm_independence_role_signal_gate", recording_spm_gate + ) + else: + monkeypatch.setattr( + builder, + "us_spm_independence_role_signal_gate", + lambda frame: builder.GateResult( + name="spm_independence_role_signal", + passed=True, + details={"checked": True}, + ), + ) monkeypatch.setattr( builder, "us_medicare_take_up_signal_gate", @@ -7190,6 +7245,22 @@ def fake_release_gate_failures(*args, **kwargs): # coverage/parity evaluation errors on the fake frame may append # further lines after them. message = str(exc) + if terminal_mode == "spm_missing_pool": + assert message == ( + "Release gates failed: SPM independence role signal failed: " + "person columns missing: ['is_spm_independent_minor_role']." + ) + assert not captured["spm_signal_gate"].passed + assert captured["spm_signal_gate"].details == { + "missing": ["is_spm_independent_minor_role"] + } + assert captured["spm_stage_calls"] == [] + assert captured["terminal_gate_events"] == [] + assert not captured.get("sipp_scf_wealth_blend_called", False) + return + assert captured["spm_stage_calls"] == ( + [] if prepared_pool else [{"seed": 0, "time_period": builder.PERIOD}] + ) if terminal_mode == "puf_tail": assert message.startswith( "Release gates failed: Exact-k PUF capital-gains tail failed: " @@ -10775,6 +10846,7 @@ def call_name(call: ast.Call) -> str | None: "with_us_take_up_inputs", "with_us_hours_worked_inputs", "with_us_relationship_inputs", + "with_us_spm_independence_role", "with_us_medicare_take_up_input", "with_us_retirement_distribution_inputs", "with_us_eligibility_inputs", diff --git a/packages/microcosm-build/tests/test_us_l0_refit_export.py b/packages/microcosm-build/tests/test_us_l0_refit_export.py index cfb3e56633..ce708331ae 100644 --- a/packages/microcosm-build/tests/test_us_l0_refit_export.py +++ b/packages/microcosm-build/tests/test_us_l0_refit_export.py @@ -35,6 +35,7 @@ def _us_frame(**person_extra: object) -> Frame: "weeks_worked": [52.0, 26.0, 0.0], "weeks_unemployed": [0.0, 12.0, 4.0], "is_household_head": [True, True, False], + "is_spm_independent_minor_role": [True, True, False], "is_separated": [False, False, True], "is_surviving_spouse": [False, True, False], "is_disabled": [False, True, False], diff --git a/packages/microcosm-build/tests/test_us_multispine_pool.py b/packages/microcosm-build/tests/test_us_multispine_pool.py index 84e5fb61ef..7df7242449 100644 --- a/packages/microcosm-build/tests/test_us_multispine_pool.py +++ b/packages/microcosm-build/tests/test_us_multispine_pool.py @@ -1588,9 +1588,7 @@ def test_remaining_stage_manifest_enumerates_every_simulation_projection_input() entry for entry in manifest if entry.consumer == "_simulation_projection" ] - assert ( - len(projection) == POOL_ENGINE_INPUT_PROJECTION_CONTRACT.input_count == 925 - ) + assert len(projection) == POOL_ENGINE_INPUT_PROJECTION_CONTRACT.input_count == 926 assert {(entry.entity, entry.variable) for entry in projection} == { (index.variable_metadata(variable).entity, variable) for variable in index.variables() @@ -1605,6 +1603,7 @@ def test_remaining_stage_manifest_enumerates_every_simulation_projection_input() "preserved_stacked_engine_input": 4, "derived_schedule_d_input": 1, "declared_absent_engine_input": 763, + "unprovisioned_source_input": 1, } ) preserved = { @@ -1643,7 +1642,7 @@ def test_simulation_projection_defaults_match_pinned_engine_surface() -> None: assert receipt == { "engine_version": "2.2.1", - "input_count": 925, + "input_count": 926, "default_count": 925, "defaults_sha256": (POOL_ENGINE_INPUT_PROJECTION_CONTRACT.defaults_sha256), } @@ -1652,9 +1651,9 @@ def test_simulation_projection_defaults_match_pinned_engine_surface() -> None: def test_remaining_stage_manifest_is_unique_complete_and_stable() -> None: manifest = pool_remaining_stage_input_manifest(_installed_variable_metadata_index()) - assert len(manifest) == 1058 + assert len(manifest) == 1059 assert Counter(entry.stage for entry in manifest) == Counter( - {"derive": 34, "seed": 33, "simulate": 991} + {"derive": 34, "seed": 33, "simulate": 992} ) assert len( { @@ -1667,15 +1666,15 @@ 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"] == 1058 + assert receipt["entry_count"] == 1059 assert receipt["stage_counts"] == { "derive": 34, "seed": 33, - "simulate": 991, + "simulate": 992, } assert receipt["engine_input_projection_contract"] == { "engine_version": "2.2.1", - "input_count": 925, + "input_count": 926, "default_count": 925, "sha256": POOL_ENGINE_INPUT_PROJECTION_CONTRACT.sha256, "defaults_sha256": POOL_ENGINE_INPUT_PROJECTION_CONTRACT.defaults_sha256, @@ -3047,11 +3046,11 @@ def test_derive_stage_keeps_whole_pool_qbi_reconciliation() -> None: derived = result.frame.table("person") assert result.receipt["operator_order"] == list(POOL_DERIVE_OPERATOR_ORDER) - assert result.receipt["remaining_stage_input_manifest"]["entry_count"] == 1058 + assert result.receipt["remaining_stage_input_manifest"]["entry_count"] == 1059 assert result.receipt["remaining_stage_input_manifest"]["stage_counts"] == { "derive": 34, "seed": 33, - "simulate": 991, + "simulate": 992, } assert ( result.receipt["qbi_input_reconciliation"]["recipient_source_universe"][ @@ -3810,9 +3809,10 @@ def test_pool_seed_stage_preserves_inputs_and_receipts_disclosed_defaults() -> N after_person.loc[measured_person, "takes_up_medicare_if_eligible"].tolist() == before_person.loc[measured_person, "takes_up_medicare_if_eligible"].tolist() ) - assert after_person["takes_up_wic_if_eligible"].tolist() == before_person[ - "takes_up_wic_if_eligible" - ].tolist() + assert ( + after_person["takes_up_wic_if_eligible"].tolist() + == before_person["takes_up_wic_if_eligible"].tolist() + ) assert ( after_spm.loc[measured_spm, "takes_up_tanf_if_eligible"].tolist() == before_spm.loc[measured_spm, "takes_up_tanf_if_eligible"].tolist() @@ -3900,6 +3900,21 @@ def materialize( } +@pytest.mark.requires_us +def test_simulation_projection_refuses_missing_measured_spm_role() -> None: + frame = _assembled_cloned_with_partial_take_up() + person = frame.table("person").copy() + role = "is_spm_independent_minor_role" + person[role] = pd.Series(True, index=person.index, dtype="boolean") + person.loc[person.index[0], role] = pd.NA + frame = _replace_person(frame, person) + + with pytest.raises(ValueError, match=rf"{role}; the engine declares no default"): + multispine_pool_module._simulation_projection(frame, PolicyEngineUSEngine()) + + assert frame.table("person")[role].isna().sum() == 1 + + def test_deferred_asset_defaults_exist_only_on_disposable_simulation_view() -> None: frame = materialize_pool_deferred_transfer_inputs( seed_multispine_pool_inputs( diff --git a/packages/microcosm-build/tests/test_us_multispine_pool_tool.py b/packages/microcosm-build/tests/test_us_multispine_pool_tool.py index 6b60d493d1..d022326bb9 100644 --- a/packages/microcosm-build/tests/test_us_multispine_pool_tool.py +++ b/packages/microcosm-build/tests/test_us_multispine_pool_tool.py @@ -2504,7 +2504,7 @@ def capture_equality(expected: object, actual: object) -> None: "country": "us", "schema_id": "country_spec", "schema_version": 1, - "spec_sha256": "77e8def60119df8f290b40b95ee477c3830848bc7f48b6ca3efd9f9d6fcf5414", + "spec_sha256": "1c46dda9cff4e53e5a44c6502a46fa695d02d92731f23d618616a892071d4841", }, } diff --git a/packages/microcosm-build/tests/test_us_plan.py b/packages/microcosm-build/tests/test_us_plan.py index 18dfbdebac..e2824267da 100644 --- a/packages/microcosm-build/tests/test_us_plan.py +++ b/packages/microcosm-build/tests/test_us_plan.py @@ -1267,6 +1267,12 @@ class TestBaseStageSourceClosure: "person_family_id", "person_spm_unit_id", "source_household_id", + # asec_pool.pool_asec_sources attaches the exact-identity carries + # (source_person_id = PERIDNUM, source_row_id) beside + # source_household_id; the SPM independence role stage joins the + # pinned Census person files through them. + "source_person_id", + "source_row_id", "person_source_id", } ) diff --git a/packages/microcosm-build/tests/test_us_puf_support_base_builder.py b/packages/microcosm-build/tests/test_us_puf_support_base_builder.py index e5afb15a16..e6c335b8a2 100644 --- a/packages/microcosm-build/tests/test_us_puf_support_base_builder.py +++ b/packages/microcosm-build/tests/test_us_puf_support_base_builder.py @@ -19,6 +19,11 @@ PUF_CAPITAL_GAINS_TAIL_STAGE_NAME, puf_capital_gains_tail_support_contract_identity, ) +from microcosm.build.us_runtime.spm_independence_role import ( + US_SPM_INDEPENDENCE_ROLE_PROVENANCE_KEY, + _role_binding_sha256, +) +from microcosm.build.us_runtime.spm_role_source import NATIVE_SPM_ROLE from microcosm.frame import US_SCHEMA, Frame, WeightKind, Weights @@ -844,6 +849,105 @@ def test_raw_stage_copy_adds_only_exact_source_mappings( builder.assert_operator_free_source_frame(raw, label="raw-stage fixture") +@pytest.mark.parametrize("execution", ["all", "pre_clone_enrichment"]) +def test_spm_stage_receives_explicit_asec_source_paths( + monkeypatch: pytest.MonkeyPatch, + tmp_path: Path, + execution: str, +) -> None: + builder = _load_support_builder_module() + args = _raw_stage_args(builder, tmp_path) + frame = _raw_asec_frame() + _patch_raw_stage_sources( + monkeypatch, + builder, + frame=frame, + source_receipt=_pooled_source_receipt(tmp_path), + ) + for name in ( + "derive_us_cps_carried_inputs", + "with_us_prior_year_income_inputs", + "with_us_relationship_inputs", + ): + monkeypatch.setattr(builder, name, lambda value, **_kwargs: value) + monkeypatch.setattr( + builder, + "us_relationship_inputs_signal_gate", + lambda _frame: SimpleNamespace(passed=True, failures=(), details={}), + ) + calls = [] + + def capture_spm_stage(value, *, seed, time_period, asec_spm_role_source_paths): + calls.append((value, seed, time_period, asec_spm_role_source_paths)) + raise RuntimeError("SPM stage reached") + + monkeypatch.setattr(builder, "with_us_spm_independence_role", capture_spm_stage) + with pytest.raises(RuntimeError, match="SPM stage reached"): + if execution == "all": + builder._run_all(args) + else: + builder._pre_clone_enrichment_stage( + args, + frame, + {"weeks_unemployed_source_path": str(tmp_path / "asec_weeks.zip")}, + ) + + assert calls == [(frame, args.seed, 2022, {2022: tmp_path / "asec_education.zip"})] + + +def test_real_spm_gate_payload_serializes_through_stage_completion( + tmp_path: Path, +) -> None: + builder = _load_support_builder_module() + units = np.arange(1, 51, dtype=np.int64) + ages = np.tile([40, 35, 16], len(units)) + ages[:3] = [17, 16, 10] + roles = np.tile([True, True, False], len(units)) + roles[:3] = [True, False, False] + person = pd.DataFrame( + {"person_id": np.arange(len(ages)), "age": ages, NATIVE_SPM_ROLE: roles} + ) + tables = {"person": person} + for entity in US_SCHEMA.group_entities: + person[US_SCHEMA.membership_column(entity)] = np.repeat(units, 3) + tables[entity] = pd.DataFrame({US_SCHEMA.id_column(entity): units}) + frame = Frame( + tables, + US_SCHEMA, + {"household": Weights(np.ones(len(units)), WeightKind.DESIGN)}, + metadata={ + US_SPM_INDEPENDENCE_ROLE_PROVENANCE_KEY: { + "persons_joined": len(person), + "table_rows": len(person), + "native_spm_units": len(units), + "true_role_persons": int(roles.sum()), + "person_role_binding_sha256": _role_binding_sha256(person), + "source_checks": [{"income_year": 2024, "checks": {"counts": True}}], + "nonmissing_optional_raw_fields_checked": {"A_FAMTYP": len(person)}, + } + }, + ) + gate = builder.us_spm_independence_role_signal_gate(frame) + assert gate.passed, gate.failures + payload = builder._checked_gate_payload(gate, "SPM role fixture") + assert json.loads(json.dumps(payload)) == payload + + runtime = builder.StageRuntime( + tmp_path / "checkpoints", + builder.OUTER_STAGE_PIPELINE, + run_config={"fixture": "spm-gate-serialization"}, + ) + runtime.complete("source_construction", frame) + runtime.complete( + "pre_clone_enrichment", + frame, + metadata={"signals": {"spm_independence_role_signal": payload}}, + ) + assert runtime.metadata["pre_clone_enrichment"]["signals"] == { + "spm_independence_role_signal": payload + } + + def test_pooled_source_stage_dual_exports_without_changing_legacy_checkpoints( monkeypatch: pytest.MonkeyPatch, tmp_path: Path, @@ -880,6 +984,7 @@ def add_age(frame: Frame, **_kwargs) -> Frame: identity_transforms = ( "with_us_prior_year_income_inputs", "with_us_relationship_inputs", + "with_us_spm_independence_role", "with_us_medicare_take_up_input", "with_us_eligibility_inputs", "with_us_pregnancy_inputs", @@ -899,6 +1004,7 @@ def add_age(frame: Frame, **_kwargs) -> Frame: passing_gate = SimpleNamespace(passed=True, failures=(), details={}) for name in ( "us_relationship_inputs_signal_gate", + "us_spm_independence_role_signal_gate", "us_medicare_take_up_signal_gate", "us_housing_inputs_signal_gate", "us_eligibility_inputs_signal_gate", @@ -1058,6 +1164,7 @@ def test_source_and_preclone_stages_round_trip_design_weight_kind( "derive_us_cps_carried_inputs", "with_us_prior_year_income_inputs", "with_us_relationship_inputs", + "with_us_spm_independence_role", "with_us_medicare_take_up_input", "with_us_eligibility_inputs", "with_us_pregnancy_inputs", @@ -1077,6 +1184,7 @@ def test_source_and_preclone_stages_round_trip_design_weight_kind( passing_gate = SimpleNamespace(passed=True, failures=(), details={}) for name in ( "us_relationship_inputs_signal_gate", + "us_spm_independence_role_signal_gate", "us_medicare_take_up_signal_gate", "us_housing_inputs_signal_gate", "us_eligibility_inputs_signal_gate", @@ -2045,6 +2153,18 @@ def fake_prior_year_income(frame, *, seed, time_period): "Gate", (), {"passed": True, "failures": (), "details": {}} )(), ) + monkeypatch.setattr( + builder, + "with_us_spm_independence_role", + lambda frame, **_kwargs: frame, + ) + monkeypatch.setattr( + builder, + "us_spm_independence_role_signal_gate", + lambda frame: type( + "Gate", (), {"passed": True, "failures": (), "details": {}} + )(), + ) monkeypatch.setattr( builder, "with_us_medicare_take_up_input", diff --git a/packages/microcosm-build/tests/test_us_spec_bundle.py b/packages/microcosm-build/tests/test_us_spec_bundle.py index 6ef769d1f9..f47ae69bd4 100644 --- a/packages/microcosm-build/tests/test_us_spec_bundle.py +++ b/packages/microcosm-build/tests/test_us_spec_bundle.py @@ -191,7 +191,7 @@ def _load_generator_module(): LEGACY_COMPATIBILITY_SHA256 = { "source_stages.json": ( - "7935d891ed16eac618f04813a7b8a3ceb9a971c8b4c4273683594ba61e7dd631" + "9f4f983091fb18dea8f4524cc100be20f9fca2b006435461592f8edf53c9a5d8" ), "support_spine.json": ( "68f37dc6ae6e0cde7ebccb53f88dd4a800e63456f838fa214ff98d1db8d815be" @@ -293,7 +293,7 @@ def test_us_package_has_twelve_typed_domains_and_loads_through_one_seam( resolved_us_spec.spec_sha256 ) assert resolved_country_spec.sources is not None - assert len(resolved_country_spec.sources.stages) == 37 + assert len(resolved_country_spec.sources.stages) == 38 assert resolved_country_spec.support_spine is not None assert len(resolved_country_spec.support_spine.support_spine.sources) == 2 @@ -312,7 +312,7 @@ def test_constant_derived_domain_counts_are_complete( catalogs = _domain(resolved_us_spec, ResourceKind.CATALOGS) assert len(sources["sources"]) == 8 - assert len(sources["stages"]) == 37 + assert len(sources["stages"]) == 38 families = imputation["families"] family_counts = Counter(family["stage"] for family in families) diff --git a/packages/microcosm-build/tests/test_us_spine_blindness.py b/packages/microcosm-build/tests/test_us_spine_blindness.py index f7f1c608da..8347a606c1 100644 --- a/packages/microcosm-build/tests/test_us_spine_blindness.py +++ b/packages/microcosm-build/tests/test_us_spine_blindness.py @@ -305,6 +305,12 @@ "spine_assembly.py", # Data-only live battery authority extraction; never reads or mutates Frames. "stacked_battery_contract.py", + # Pure SPM measurement composition check over frame columns (age and the + # role); no population treatment. Re-exported by release_gate_preflight. + "spm_composition.py", + # Measured SPM independence role restored by exact pinned Census identity + # through spm_role_source; a manifest stage shaped like relationship_inputs. + "spm_independence_role.py", "spm_resources.py", # Pinned ASEC role reconstruction and exact parent join; no population # treatment. Remains subject to the all-runtime source-identity scan. @@ -3458,8 +3464,13 @@ def test_pool_build_tool_import_graph_is_source_spine_blind() -> None: for tool in _SPINE_BLIND_BUILD_TOOLS: runtime_graph, missing_modules = _us_runtime_import_graph(tool) - assert len(runtime_graph) == 70, ( - f"{tool.name} must reach the pinned 70-module runtime graph; " + # 73 = main's 70 plus spm_independence_role.py, spm_role_source.py and + # spm_composition.py, reached because the pool's engine-input + # projection names the SPM role as a required source input (#893). + # All three are classified in _OTHER_US_RUNTIME_MODULES and scanned + # below like every other reached module. + assert len(runtime_graph) == 73, ( + f"{tool.name} must reach the pinned 73-module runtime graph; " f"reached {len(runtime_graph)}" ) assert not missing_modules, ( diff --git a/packages/microcosm-build/tests/test_us_spm_independence_role.py b/packages/microcosm-build/tests/test_us_spm_independence_role.py new file mode 100644 index 0000000000..1f67cc78fb --- /dev/null +++ b/packages/microcosm-build/tests/test_us_spm_independence_role.py @@ -0,0 +1,939 @@ +"""The SPM independence role as a build-stage input leaf. + +The stage's derivation body is a call into the certified +``derive_spm_role_source``; these tests pin the stage's manifest and plan +wiring, every refusal the brief names (a missing source column, a unit with +more or fewer than one ``SPM_HEAD``, a unit left without a classified adult, a +person with no ASEC origin, a Census count that does not reconcile), the frame +integration and idempotence, the signal gate, the release coverage contract, +and — beside the hand-built battery — a seeded agreement sweep showing the +stage's role equals the derivation's and the raw rule's on random populations. +""" + +from __future__ import annotations + +import hashlib +import json +from dataclasses import replace +from pathlib import Path + +import numpy as np +import pandas as pd +import pytest + +from microcosm.build.source_manifest import SourceStageSpec +from microcosm.build.source_runtime import ( + SourceRuntimeConfig, + SourceRuntimeContext, + SourceRuntimeError, +) +from microcosm.build.us_runtime import ( + US_DONORS, + US_PUF_SUPPORT_STAGE_NAME, + US_RELATIONSHIP_INPUTS_STAGE_NAME, + US_SPM_INDEPENDENCE_ROLE_NONCONSTANT_PERSON_COLUMNS, + US_SPM_INDEPENDENCE_ROLE_OUTPUT_COLUMNS, + US_SPM_INDEPENDENCE_ROLE_REQUIRED_SOURCE_COLUMNS, + US_SPM_INDEPENDENCE_ROLE_STAGE_NAME, + US_STAGE_NAMES, + derive_us_spm_independence_role_from_manifest, + load_release_input_coverage_manifest, + resolve_asec_spm_role_source_paths, + us_spm_independence_role_signal_gate, + us_spm_independence_role_stage_spec, + us_spm_independence_role_summary, + with_us_spm_independence_role, +) +from microcosm.build.us_runtime.l0_refit_export import ( + US_RELEASE_REQUIRED_PERSON_SOURCE_COLUMNS, +) +from microcosm.build.us_runtime.release_input_coverage import ( + POST_REFERENCE_ECPS_REQUIRED_INPUTS, +) +from microcosm.build.us_runtime.source_runtime import us_source_operation_handlers +from microcosm.build.us_runtime.spm_composition import check_spm_composition +from microcosm.build.us_runtime.spm_independence_role import ( + US_SPM_INDEPENDENCE_ROLE_OPERATION_KIND, + US_SPM_INDEPENDENCE_ROLE_OPTIONAL_SOURCE_COLUMNS, + US_SPM_INDEPENDENCE_ROLE_PROVENANCE_KEY, + US_SPM_INDEPENDENCE_ROLE_SOURCE_PATHS_KEY, + US_SPM_INDEPENDENCE_ROLE_SOURCE_PINS_KEY, +) +from microcosm.build.us_runtime.spm_role_source import ( + _OPTIONAL_RAW_CHECKS, + _REQUIRED_RAW_CHECKS, + ASEC_SPM_ROLE_SOURCES, + NATIVE_SPM_ROLE, + AsecSpmRoleSource, + derive_spm_role_source, + independent_minor_role, +) +from microcosm.frame import US_SCHEMA, Frame, WeightKind, Weights + +pytest.importorskip("tables") + +_ROLE = NATIVE_SPM_ROLE +_INCOME_YEAR = 2024 +_SOURCE_COLUMNS = ( + "PERIDNUM", + "SPM_ID", + "PH_SEQ", + "P_SEQ", + "A_LINENO", + "A_AGE", + "SPM_HAGE", + "SPM_HEAD", + "SPM_NUMADULTS", + "SPM_NUMKIDS", + "SPM_NUMPER", + "A_FAMTYP", + "A_FAMREL", + "A_SPOUSE", + "PECOHAB", +) + + +def _digest(path: Path) -> str: + return hashlib.sha256(path.read_bytes()).hexdigest() + + +# --------------------------------------------------------------------------- +# Synthetic Census person files and the frames built from them +# --------------------------------------------------------------------------- + + +def _finish_units(rows: list[dict]) -> pd.DataFrame: + """Fill the Census unit counts from the rows' own ages and roles.""" + + source = pd.DataFrame(rows) + role = independent_minor_role(source) + adult = source.A_AGE.ge(18) | (source.A_AGE.ge(15) & role) + units = source.assign(_adult=adult).groupby("SPM_ID") + source["SPM_NUMADULTS"] = units["_adult"].transform("sum").astype(int) + source["SPM_NUMPER"] = units["_adult"].transform("size").astype(int) + source["SPM_NUMKIDS"] = source["SPM_NUMPER"] - source["SPM_NUMADULTS"] + head_age = source.loc[source.SPM_HEAD.eq(1)].set_index("SPM_ID")["A_AGE"] + source["SPM_HAGE"] = source["SPM_ID"].map(head_age).astype(int) + source["PERIDNUM"] = [f"{index + 1:022}" for index in range(len(source))] + return source[list(_SOURCE_COLUMNS)] + + +def _hand_built_source() -> pd.DataFrame: + """Three Census units: a minor spouse is independent, a same-age child is not. + + Unit 100: a 17-year-old head, a 16-year-old spouse, a 10-year-old child. + Unit 200: a 40-year-old head and a 16-year-old child. + Unit 300: a 15-year-old living alone (an SPM head). + """ + + rows = [ + dict(SPM_ID=100, PH_SEQ=1, P_SEQ=1, A_LINENO=1, A_AGE=17, SPM_HEAD=1, A_FAMTYP=1, A_FAMREL=1, A_SPOUSE=2, PECOHAB=0), + dict(SPM_ID=100, PH_SEQ=1, P_SEQ=2, A_LINENO=2, A_AGE=16, SPM_HEAD=0, A_FAMTYP=1, A_FAMREL=2, A_SPOUSE=1, PECOHAB=0), + dict(SPM_ID=100, PH_SEQ=1, P_SEQ=3, A_LINENO=3, A_AGE=10, SPM_HEAD=0, A_FAMTYP=1, A_FAMREL=3, A_SPOUSE=0, PECOHAB=0), + dict(SPM_ID=200, PH_SEQ=2, P_SEQ=1, A_LINENO=1, A_AGE=40, SPM_HEAD=1, A_FAMTYP=1, A_FAMREL=1, A_SPOUSE=0, PECOHAB=0), + dict(SPM_ID=200, PH_SEQ=2, P_SEQ=2, A_LINENO=2, A_AGE=16, SPM_HEAD=0, A_FAMTYP=1, A_FAMREL=3, A_SPOUSE=0, PECOHAB=0), + dict(SPM_ID=300, PH_SEQ=3, P_SEQ=1, A_LINENO=1, A_AGE=15, SPM_HEAD=1, A_FAMTYP=4, A_FAMREL=1, A_SPOUSE=0, PECOHAB=0), + ] # fmt: skip + return _finish_units(rows) + + +def _random_source(seed: int, n_units: int) -> pd.DataFrame: + """A random Census person file with a realistic minority of teen heads.""" + + rng = np.random.default_rng(seed) + rows: list[dict] = [] + for unit in range(1, n_units + 1): + teen_headed = rng.random() < 0.02 + head_age = ( + int(rng.integers(15, 18)) if teen_headed else int(rng.integers(25, 71)) + ) + members = [ + dict(A_AGE=head_age, SPM_HEAD=1, A_FAMTYP=1, A_FAMREL=1, A_SPOUSE=0), + ] + if not teen_headed and rng.random() < 0.6: + members.append( + dict( + A_AGE=int(np.clip(head_age + rng.integers(-5, 6), 18, 90)), + SPM_HEAD=0, + A_FAMTYP=1, + A_FAMREL=2, + A_SPOUSE=1, + ) + ) + members[0]["A_SPOUSE"] = 2 + if not teen_headed: + for _child in range(int(rng.integers(0, 4))): + members.append( + dict( + A_AGE=int(rng.integers(0, 18)), + SPM_HEAD=0, + A_FAMTYP=1, + A_FAMREL=3, + A_SPOUSE=0, + ) + ) + for line, member in enumerate(members, start=1): + rows.append( + dict( + SPM_ID=unit, + PH_SEQ=unit, + P_SEQ=line, + A_LINENO=line, + PECOHAB=0, + **member, + ) + ) + return _finish_units(rows) + + +def _write_source( + tmp_path: Path, source: pd.DataFrame +) -> tuple[Path, AsecSpmRoleSource]: + path = tmp_path / "pppub25.csv" + source.to_csv(path, index=False) + pin = AsecSpmRoleSource( + income_year=_INCOME_YEAR, + survey_year=_INCOME_YEAR + 1, + csv_sha256=_digest(path), + csv_size_bytes=path.stat().st_size, + persons=int(len(source)), + units=int(source.SPM_ID.nunique()), + official_archive_url="https://example.invalid/fixture.zip", + archive_sha256="a" * 64, + member="pppub25.csv", + ) + return path, pin + + +def _person_table( + source: pd.DataFrame, *, clone_units: tuple[int, ...] = () +) -> pd.DataFrame: + """The pooled person table a base carries for ``source``, plus optional clones. + + Mirrors what ``asec_pool`` and cloning leave on the frame: frozen-vintage + identity (``source_year``, ``source_household_id``, ``source_person_id``, + ``source_row_id``), the raw age/count fields, no ``SPM_HEAD`` (no frozen + vintage carries it) and ``A_FAMTYP``/``A_FAMREL`` null for some rows. + """ + + native = source.copy() + native["source_row_id"] = np.arange(len(native), dtype=np.int64) + native["clone"] = 0 + pieces = [native] + for index, unit in enumerate(clone_units, start=1): + clone = native.loc[native.SPM_ID.eq(unit)].copy() + clone["clone"] = index + pieces.append(clone) + person = pd.concat(pieces, ignore_index=True) + person["source_year"] = _INCOME_YEAR + person["source_person_id"] = person["PERIDNUM"] + person["source_household_id"] = person["PH_SEQ"] + person["person_id"] = np.arange(1001, 1001 + len(person), dtype=np.int64) + unit_codes = pd.factorize( + pd.MultiIndex.from_arrays([person["clone"], person["SPM_ID"]]), sort=True + )[0] + person["person_spm_unit_id"] = (unit_codes + 10).astype(np.int64) + household_codes = pd.factorize( + pd.MultiIndex.from_arrays([person["clone"], person["PH_SEQ"]]), sort=True + )[0] + person["person_household_id"] = (household_codes + 1).astype(np.int64) + person["person_tax_unit_id"] = person["person_household_id"] + 1_000 + person["person_family_id"] = person["person_household_id"] + 3_000 + person["person_marital_unit_id"] = np.arange(len(person), dtype=np.int64) + 4_000 + person["age"] = person["A_AGE"].astype(float) + person["SPM_ID"] = pd.factorize(person["SPM_ID"], sort=True)[0] + 1 + person = person.drop(columns=["SPM_HEAD", "clone"]) + person["A_FAMREL"] = person["A_FAMREL"].astype(float) + person.loc[person.index[:2], "A_FAMREL"] = np.nan + person["A_FAMTYP"] = person["A_FAMTYP"].astype(float) + person.loc[person.index[:2], "A_FAMTYP"] = np.nan + return person + + +def _frame(person: pd.DataFrame, weights: np.ndarray | None = None) -> Frame: + households = np.sort(person["person_household_id"].unique()) + tables = { + "person": person.reset_index(drop=True), + "household": pd.DataFrame({"household_id": households}), + "tax_unit": pd.DataFrame({"tax_unit_id": households + 1_000}), + "spm_unit": pd.DataFrame( + {"spm_unit_id": np.sort(person["person_spm_unit_id"].unique())} + ), + "family": pd.DataFrame({"family_id": households + 3_000}), + "marital_unit": pd.DataFrame( + {"marital_unit_id": person["person_marital_unit_id"].to_numpy()} + ), + } + if weights is None: + weights = np.full(len(households), 100.0) + return Frame( + tables, + US_SCHEMA, + { + "household": Weights( + np.asarray(weights, dtype=np.float64), WeightKind.DESIGN + ) + }, + ) + + +def _run(frame: Frame, path: Path, pin: AsecSpmRoleSource) -> Frame: + return with_us_spm_independence_role( + frame, + seed=0, + time_period=_INCOME_YEAR, + asec_spm_role_source_paths={_INCOME_YEAR: path}, + source_pins={_INCOME_YEAR: pin}, + ) + + +def _operation(): + return next( + operation + for operation in us_spm_independence_role_stage_spec().operations + if operation.kind == US_SPM_INDEPENDENCE_ROLE_OPERATION_KIND + ) + + +def _context(frame: Frame, path: Path, pin: AsecSpmRoleSource) -> SourceRuntimeContext: + return SourceRuntimeContext( + config=SourceRuntimeConfig( + seed=0, + target_year=_INCOME_YEAR, + extra={ + US_SPM_INDEPENDENCE_ROLE_SOURCE_PATHS_KEY: {_INCOME_YEAR: path}, + US_SPM_INDEPENDENCE_ROLE_SOURCE_PINS_KEY: {_INCOME_YEAR: pin}, + }, + ), + tables={"spm_unit": frame.table("spm_unit")}, + ) + + +@pytest.fixture +def population(tmp_path: Path): + source = _hand_built_source() + path, pin = _write_source(tmp_path, source) + frame = _frame(_person_table(source, clone_units=(100,))) + return source, path, pin, frame + + +# --------------------------------------------------------------------------- +# Manifest, plan and shared constants +# --------------------------------------------------------------------------- + + +class TestManifestAndPlan: + def test_stage_spec_pins_the_source_rule(self) -> None: + spec = us_spm_independence_role_stage_spec() + + assert spec.stage == US_SPM_INDEPENDENCE_ROLE_STAGE_NAME + assert ( + tuple(spec.outputs) == US_SPM_INDEPENDENCE_ROLE_OUTPUT_COLUMNS == (_ROLE,) + ) + assert US_SPM_INDEPENDENCE_ROLE_NONCONSTANT_PERSON_COLUMNS == (_ROLE,) + assert [operation.kind for operation in spec.operations] == [ + "read_table", + US_SPM_INDEPENDENCE_ROLE_OPERATION_KIND, + ] + assert ( + "SPM_HEAD == 1 OR (A_FAMTYP in {1,4} AND A_FAMREL in {1,2})" in spec.notes + ) + assert "derive_spm_role_source" in spec.notes + assert "exactly one SPM_HEAD" in spec.notes + assert "no SPM unit is left without a classified adult" in spec.notes + + def test_handler_and_plan_are_wired_between_relationships_and_puf_support( + self, + ) -> None: + handlers = us_source_operation_handlers() + assert ( + handlers[US_SPM_INDEPENDENCE_ROLE_OPERATION_KIND] + is derive_us_spm_independence_role_from_manifest + ) + assert US_SPM_INDEPENDENCE_ROLE_STAGE_NAME in US_DONORS + assert ( + US_DONORS[US_SPM_INDEPENDENCE_ROLE_STAGE_NAME].survey == "Census CPS ASEC" + ) + order = US_STAGE_NAMES.index + assert ( + order(US_RELATIONSHIP_INPUTS_STAGE_NAME) + < order(US_SPM_INDEPENDENCE_ROLE_STAGE_NAME) + < order(US_PUF_SUPPORT_STAGE_NAME) + ) + + def test_required_columns_are_the_derivations_own(self) -> None: + """The stage restates only the frame identity; the raw tail is imported.""" + + assert US_SPM_INDEPENDENCE_ROLE_REQUIRED_SOURCE_COLUMNS == ( + "person_id", + "person_spm_unit_id", + "source_year", + "PERIDNUM", + "age", + "source_household_id", + "source_person_id", + "source_row_id", + *_REQUIRED_RAW_CHECKS, + ) + assert US_SPM_INDEPENDENCE_ROLE_OPTIONAL_SOURCE_COLUMNS == _OPTIONAL_RAW_CHECKS + + @pytest.mark.parametrize("column", US_SPM_INDEPENDENCE_ROLE_REQUIRED_SOURCE_COLUMNS) + def test_the_derivation_itself_requires_each_column( + self, tmp_path: Path, column: str + ) -> None: + """Consistency: every column the stage names, derive_spm_role_source refuses.""" + + source = _hand_built_source() + path, pin = _write_source(tmp_path, source) + person = _person_table(source).drop(columns=[column]) + parent = tmp_path / "parent.h5" + person.to_hdf(parent, key="person") + pd.DataFrame( + { + "spm_unit_id": np.sort( + _person_table(source)["person_spm_unit_id"].unique() + ) + } + ).to_hdf(parent, key="spm_unit") + with pytest.raises(ValueError, match=f"missing required columns.*{column}"): + derive_spm_role_source( + parent, + {_INCOME_YEAR: path}, + expected_parent_sha256=_digest(parent), + source_pins={_INCOME_YEAR: pin}, + ) + + def test_resolver_refuses_unpinned_years_and_keeps_explicit_paths( + self, tmp_path: Path + ) -> None: + explicit = tmp_path / "pppub25.csv" + resolved = resolve_asec_spm_role_source_paths( + {_INCOME_YEAR: explicit}, income_years=(_INCOME_YEAR,) + ) + assert resolved == {_INCOME_YEAR: explicit} + with pytest.raises(ValueError, match="pinned income years"): + resolve_asec_spm_role_source_paths({1999: explicit}, income_years=(1999,)) + with pytest.raises(ValueError, match="have no pinned ASEC SPM role source"): + resolve_asec_spm_role_source_paths(None, income_years=(1999,)) + assert set(ASEC_SPM_ROLE_SOURCES) == {2022, 2023, 2024} + + +# --------------------------------------------------------------------------- +# The derivation through the stage: agreement and refusals +# --------------------------------------------------------------------------- + + +class TestDerivation: + def test_roles_equal_the_certified_derivation_and_the_raw_rule( + self, population + ) -> None: + source, path, pin, frame = population + + result = _run(frame, path, pin) + + person = result.table("person") + role = person[_ROLE].to_numpy() + assert person[_ROLE].dtype == bool + # The raw rule on the source rows, joined by PERIDNUM (clones repeat it). + expected = ( + person["PERIDNUM"] + .map( + dict(zip(source.PERIDNUM, independent_minor_role(source), strict=True)) + ) + .to_numpy(dtype=bool) + ) + assert np.array_equal(role, expected) + assert role.tolist() == [ + True, + True, + False, + True, + False, + True, + True, + True, + False, + ] + # Unit 100's clone (native unit 40) carries the same roles as the native. + assert person.loc[person.person_spm_unit_id.eq(13), _ROLE].tolist() == [ + True, + True, + False, + ] + # The stage is the certified derivation, run on a projection of the frame. + parent = path.parent / "direct.h5" + frame.table("person").to_hdf(parent, key="person") + frame.table("spm_unit").to_hdf(parent, key="spm_unit") + direct = derive_spm_role_source( + parent, + {_INCOME_YEAR: path}, + expected_parent_sha256=_digest(parent), + source_pins={_INCOME_YEAR: pin}, + ) + assert np.array_equal(direct.role, role) + + def test_provenance_rides_on_the_frame(self, population) -> None: + _source, path, pin, frame = population + + result = _run(frame, path, pin) + + provenance = result.metadata[US_SPM_INDEPENDENCE_ROLE_PROVENANCE_KEY] + assert provenance["unmatched_persons"] == 0 + assert provenance["adult_child_person_count_mismatch_units"] == 0 + assert provenance["native_spm_units"] == 4 + assert provenance["total_source_units"] == 3 + assert provenance["minor_only_units_resolved"] == 3 + assert provenance["independent_minor_persons"] == 5 + assert provenance["weights_used"] is False + assert provenance["ages_changed"] is False + assert len(provenance["frame_projection_sha256"]) == 64 + assert provenance["dataset_sha256"] == provenance["frame_projection_sha256"] + assert set(provenance["frame_projection_columns"]) == set( + US_SPM_INDEPENDENCE_ROLE_REQUIRED_SOURCE_COLUMNS + ) | {"A_FAMTYP", "A_FAMREL", "A_SPOUSE", "PECOHAB"} + + def test_refuses_a_unit_with_two_heads(self, tmp_path: Path) -> None: + source = _hand_built_source() + source.loc[source.index[1], "SPM_HEAD"] = 1 + path, pin = _write_source(tmp_path, source) + frame = _frame(_person_table(source)) + with pytest.raises(SourceRuntimeError, match="exactly one SPM head per unit"): + _run(frame, path, pin) + + def test_refuses_a_unit_with_no_head(self, tmp_path: Path) -> None: + source = _hand_built_source() + source.loc[source.index[3], "SPM_HEAD"] = 0 + path, pin = _write_source(tmp_path, source) + frame = _frame(_person_table(source)) + with pytest.raises(SourceRuntimeError, match="exactly one SPM head per unit"): + _run(frame, path, pin) + + def test_refuses_a_unit_left_without_a_classified_adult( + self, tmp_path: Path + ) -> None: + """A 14-year-old head: the role is True but the age gate leaves no adult.""" + + source = _hand_built_source() + source.loc[source.index[5], "A_AGE"] = 14 + source.loc[source.index[5], "SPM_HAGE"] = 14 + source.loc[source.index[5], ["SPM_NUMADULTS", "SPM_NUMKIDS"]] = [0, 1] + path, pin = _write_source(tmp_path, source) + frame = _frame(_person_table(source)) + with pytest.raises(SourceRuntimeError, match="unresolved zero-adult SPM unit"): + _run(frame, path, pin) + + def test_refuses_a_person_with_no_asec_origin(self, population) -> None: + _source, path, pin, frame = population + person = frame.table("person").copy() + person.loc[person.index[0], ["PERIDNUM", "source_person_id"]] = "9" * 22 + with pytest.raises(SourceRuntimeError, match="unmatched parent persons"): + _run(_frame(person), path, pin) + + def test_refuses_a_census_count_that_does_not_reconcile( + self, tmp_path: Path + ) -> None: + source = _hand_built_source() + source.loc[source.SPM_ID.eq(200), "SPM_NUMADULTS"] = 2 + path, pin = _write_source(tmp_path, source) + frame = _frame(_person_table(source)) + with pytest.raises( + SourceRuntimeError, match="adult/child/person count reconciliation" + ): + _run(frame, path, pin) + + def test_refuses_a_native_unit_mixing_two_source_units(self, population) -> None: + _source, path, pin, frame = population + person = frame.table("person").copy() + # Move unit 200's child into native unit 10 (source unit 100). + person.loc[person.index[4], "person_spm_unit_id"] = 10 + with pytest.raises(SourceRuntimeError, match="combines distinct source units"): + _run(_frame(person), path, pin) + + @pytest.mark.parametrize("column", US_SPM_INDEPENDENCE_ROLE_REQUIRED_SOURCE_COLUMNS) + def test_missing_source_column_is_named(self, population, column: str) -> None: + """The handler names the column; the frame wrapper refuses it first when + the frame cannot even be built or its income years cannot be read.""" + + _source, path, pin, frame = population + person = frame.table("person").drop(columns=[column]) + with pytest.raises(SourceRuntimeError, match=column): + derive_us_spm_independence_role_from_manifest( + person, _operation(), _context(frame, path, pin) + ) + if column in ("person_id", "person_spm_unit_id"): + return # the Frame schema refuses a person table without these + if column == "source_year": + with pytest.raises(ValueError, match=column): + _run(_frame(person), path, pin) + return + with pytest.raises(SourceRuntimeError, match=column): + _run(_frame(person), path, pin) + + def test_handler_refuses_wrong_operation_missing_table_context_and_paths( + self, population + ) -> None: + _source, path, pin, frame = population + person = frame.table("person") + wrong = SourceStageSpec.from_mapping( + { + "stage": "test", + "survey": "test", + "source": "https://example.com", + "grain": "person", + "operations": [{"kind": "derive"}], + "outputs": [_ROLE], + } + ).operations[0] + with pytest.raises(SourceRuntimeError, match="unexpected operation"): + derive_us_spm_independence_role_from_manifest( + person, wrong, _context(frame, path, pin) + ) + with pytest.raises(SourceRuntimeError, match="person table"): + derive_us_spm_independence_role_from_manifest( + None, _operation(), _context(frame, path, pin) + ) + with pytest.raises(SourceRuntimeError, match="runtime context"): + derive_us_spm_independence_role_from_manifest(person, _operation(), None) + no_spm = SourceRuntimeContext( + config=_context(frame, path, pin).config, tables={} + ) + with pytest.raises(SourceRuntimeError, match="spm_unit"): + derive_us_spm_independence_role_from_manifest(person, _operation(), no_spm) + no_paths = SourceRuntimeContext( + config=SourceRuntimeConfig(seed=0, target_year=_INCOME_YEAR), + tables={"spm_unit": frame.table("spm_unit")}, + ) + with pytest.raises(SourceRuntimeError, match="CSV paths"): + derive_us_spm_independence_role_from_manifest( + person, _operation(), no_paths + ) + + def test_refuses_an_unpinned_csv(self, population) -> None: + _source, path, pin, frame = population + with pytest.raises(SourceRuntimeError, match="CSV SHA-256"): + _run(frame, path, replace(pin, csv_sha256="0" * 64)) + + def test_missing_csv_refusal_names_the_stage(self, population) -> None: + _source, path, pin, frame = population + with pytest.raises(SourceRuntimeError, match="US SPM independence role"): + _run(frame, path.with_name("missing.csv"), pin) + + +# --------------------------------------------------------------------------- +# Frame integration, summary and gate +# --------------------------------------------------------------------------- + + +class TestFrameAndGate: + def test_gate_details_are_json_serializable(self, population) -> None: + _source, path, pin, frame = population + gate = us_spm_independence_role_signal_gate(_run(frame, path, pin)) + serialized = json.loads(json.dumps(gate.details, allow_nan=False)) + assert serialized["derivation"]["persons_joined"] == frame.n("person") + assert serialized["derivation"]["source_checks"] + + @pytest.mark.parametrize("change", ["swap_roles", "change_age", "stale_count"]) + def test_gate_refuses_stale_derivation(self, population, change) -> None: + _source, path, pin, frame = population + result = _run(frame, path, pin) + tables = {entity: result.table(entity).copy() for entity in result.entities} + metadata = json.loads( + json.dumps(us_spm_independence_role_summary(result)["derivation"]) + ) + person = tables["person"] + if change == "swap_roles": + indices = [ + person.index[person[_ROLE]].tolist()[0], + person.index[~person[_ROLE]].tolist()[0], + ] + person.loc[indices, _ROLE] = ~person.loc[indices, _ROLE] + elif change == "change_age": + person.loc[person.index[0], "age"] += 1 + else: + metadata["persons_joined"] += 1 + altered = Frame( + tables, + result.schema, + {entity: result.weights_for(entity) for entity in result.weighted_entities}, + result.strata, + metadata={US_SPM_INDEPENDENCE_ROLE_PROVENANCE_KEY: metadata}, + ) + gate = us_spm_independence_role_signal_gate(altered) + assert not gate.passed + assert any("provenance" in failure for failure in gate.failures) + + def test_gate_refuses_integer_role_and_missing_age(self, population) -> None: + _source, path, pin, frame = population + person = _run(frame, path, pin).table("person").copy() + person[_ROLE] = person[_ROLE].astype(int) + gate = us_spm_independence_role_signal_gate(_frame(person)) + assert not gate.passed + assert any("non-Boolean" in failure for failure in gate.failures) + gate = us_spm_independence_role_signal_gate(_frame(person.drop(columns="age"))) + assert not gate.passed + assert gate.details["missing"] == ["age"] + + def test_idempotent_and_leaves_everything_else_untouched(self, population) -> None: + _source, path, pin, frame = population + + result = _run(frame, path, pin) + + assert _ROLE not in frame.table("person") + assert set(result.table("person").columns) == set( + frame.table("person").columns + ) | {_ROLE} + for entity in frame.entities: + if entity == "person": + continue + assert result.table(entity).equals(frame.table(entity)) + assert np.array_equal( + result.table("person")["person_spm_unit_id"].to_numpy(), + frame.table("person")["person_spm_unit_id"].to_numpy(), + ) + repeated = _run(result, path, pin) + assert repeated.table("person").equals(result.table("person")) + assert ( + repeated.metadata[US_SPM_INDEPENDENCE_ROLE_PROVENANCE_KEY][ + "unmatched_persons" + ] + == 0 + ) + + def test_existing_role_cannot_bypass_the_source_checks(self, population) -> None: + _source, path, pin, frame = population + result = _run(frame, path, pin) + with pytest.raises(SourceRuntimeError, match="CSV SHA-256"): + _run(result, path, replace(pin, csv_sha256="0" * 64)) + + person = result.table("person").copy() + person.loc[person.index[0], _ROLE] = not person.loc[person.index[0], _ROLE] + with pytest.raises(ValueError, match="disagrees with the pinned Census"): + _run(_frame(person), path, pin) + + @pytest.mark.parametrize("invalid", [None, "False", 0]) + def test_existing_role_refuses_non_boolean_or_missing_values( + self, population, invalid + ) -> None: + _source, path, pin, frame = population + person = _run(frame, path, pin).table("person").copy() + person[_ROLE] = person[_ROLE].astype(object) + person.loc[person.index[0], _ROLE] = invalid + with pytest.raises(ValueError, match="non-null Boolean observations"): + _run(_frame(person), path, pin) + + def test_role_without_source_provenance_fails_gate(self, population) -> None: + _source, path, pin, frame = population + person = _run(frame, path, pin).table("person") + gate = us_spm_independence_role_signal_gate(_frame(person)) + assert not gate.passed + assert ( + "SPM independence role has no source derivation provenance." + in gate.failures + ) + + def test_requires_the_us_schema_and_source_year(self, population) -> None: + _source, path, pin, frame = population + person = frame.table("person").drop(columns=["source_year"]) + with pytest.raises(ValueError, match="source_year"): + with_us_spm_independence_role( + _frame(person), + seed=0, + time_period=2024, + asec_spm_role_source_paths={_INCOME_YEAR: path}, + source_pins={_INCOME_YEAR: pin}, + ) + with pytest.raises(ValueError, match="explicit CSV paths"): + with_us_spm_independence_role( + frame, seed=0, time_period=2024, source_pins={_INCOME_YEAR: pin} + ) + + def test_gate_passes_on_a_realistic_population_and_reports_the_composition( + self, tmp_path: Path + ) -> None: + source = _random_source(seed=7, n_units=300) + path, pin = _write_source(tmp_path, source) + frame = _frame(_person_table(source)) + + result = _run(frame, path, pin) + gate = us_spm_independence_role_signal_gate(result) + + assert gate.passed, gate.failures + summary = us_spm_independence_role_summary(result) + assert summary["spm_composition"]["status"] == "PASS" + assert summary["spm_composition"]["role_source"] == "source_column" + assert summary["spm_composition"]["n_units_without_classified_adult"] == 0 + assert summary["independent_minor_persons"] == int( + (source.A_AGE.between(15, 17) & source.SPM_HEAD.eq(1)).sum() + ) + assert 0.40 <= summary["role_share"] <= 0.75 + assert 0.003 <= summary["minor_role_share"] <= 0.06 + assert summary["derivation"]["unmatched_persons"] == 0 + assert check_spm_composition(result).status == "PASS" + + def test_gate_names_a_missing_column(self, population) -> None: + _source, _path, _pin, frame = population + gate = us_spm_independence_role_signal_gate(frame) + assert not gate.passed + assert gate.details["missing"] == [_ROLE] + + def test_gate_fails_a_frame_whose_role_leaves_a_unit_unclassified( + self, population + ) -> None: + """A stored False on the only teen of a minor-only unit: the engine refuses.""" + + _source, path, pin, frame = population + result = _run(frame, path, pin) + person = result.table("person").copy() + person.loc[person.person_spm_unit_id.eq(12), _ROLE] = False + gate = us_spm_independence_role_signal_gate(_frame(person)) + + assert not gate.passed + assert any("no classified adult" in failure for failure in gate.failures) + assert any("SPM_COMPOSITION_REQUIRED" in failure for failure in gate.failures) + + def test_gate_fails_a_degenerate_or_missing_valued_role(self, population) -> None: + _source, path, pin, frame = population + result = _run(frame, path, pin) + person = result.table("person").copy() + person[_ROLE] = True + gate = us_spm_independence_role_signal_gate(_frame(person)) + assert not gate.passed + assert any("degenerate" in failure for failure in gate.failures) + + person = result.table("person").copy() + person[_ROLE] = person[_ROLE].astype(object) + person.loc[person.index[0], _ROLE] = None + gate = us_spm_independence_role_signal_gate(_frame(person)) + assert not gate.passed + assert any("missing for 1 person" in failure for failure in gate.failures) + + +# --------------------------------------------------------------------------- +# Seeded agreement sweep beside the hand-built battery +# --------------------------------------------------------------------------- + + +@pytest.mark.parametrize("seed", range(12)) +def test_seeded_agreement_with_the_raw_rule_and_the_derivation( + tmp_path: Path, seed: int +) -> None: + """On random populations the stage, the raw rule and the derivation agree. + + The stage adds nothing to the rule: for every person its role equals + ``independent_minor_role`` evaluated on that person's Census row, and + equals ``derive_spm_role_source`` run directly on an H5 of the same frame; + afterwards no unit is left without a classified adult, and the counts the + derivation reconciled are the frame's own. + """ + + rng = np.random.default_rng(seed) + source = _random_source(seed=seed, n_units=int(rng.integers(40, 160))) + clone_units = tuple( + int(unit) + for unit in rng.choice( + source.SPM_ID.unique(), size=int(rng.integers(0, 6)), replace=False + ) + ) + path, pin = _write_source(tmp_path, source) + person = _person_table(source, clone_units=clone_units) + frame = _frame( + person, + weights=rng.uniform( + 10.0, 500.0, size=int(person["person_household_id"].nunique()) + ), + ) + + result = _run(frame, path, pin) + + person = result.table("person") + role = person[_ROLE].to_numpy(dtype=bool) + by_source = dict(zip(source.PERIDNUM, independent_minor_role(source), strict=True)) + assert np.array_equal(role, person["PERIDNUM"].map(by_source).to_numpy(dtype=bool)) + + parent = tmp_path / f"direct-{seed}.h5" + frame.table("person").to_hdf(parent, key="person") + frame.table("spm_unit").to_hdf(parent, key="spm_unit") + direct = derive_spm_role_source( + parent, + {_INCOME_YEAR: path}, + expected_parent_sha256=_digest(parent), + source_pins={_INCOME_YEAR: pin}, + ) + assert np.array_equal(direct.role, role) + + composition = check_spm_composition(result) + assert composition.status == "PASS", composition.failures + provenance = result.metadata[US_SPM_INDEPENDENCE_ROLE_PROVENANCE_KEY] + assert provenance["persons_joined"] == len(person) + assert provenance["native_spm_units"] == result.n("spm_unit") + assert provenance["unmatched_persons"] == 0 + assert provenance["adult_child_person_count_mismatch_units"] == 0 + teens = person["age"].between(15, 17).to_numpy() + assert provenance["independent_minor_persons"] == int((role & teens).sum()) + + +# --------------------------------------------------------------------------- +# Release coverage and export contract +# --------------------------------------------------------------------------- + + +class TestCoverageAndExport: + def test_role_is_a_hard_release_requirement(self) -> None: + manifest = load_release_input_coverage_manifest() + assert _ROLE in POST_REFERENCE_ECPS_REQUIRED_INPUTS + assert _ROLE in manifest.required_columns + assert _ROLE not in manifest.reviewed_exclusions + assert _ROLE in US_RELEASE_REQUIRED_PERSON_SOURCE_COLUMNS + + @pytest.mark.requires_us + def test_engine_adapter_persists_the_role_as_an_input_leaf( + self, population, tmp_path: Path + ) -> None: + """Both adapter paths classify the role by the engine's own declaration.""" + + import policyengine_us.spm as spm + from policyengine_us.data import USSingleYearDataset + + from microcosm.frame.adapters.policyengine_us import ( + PolicyEngineUSEngine, + PolicyEngineUSVariableMetadataIndex, + ) + + assert spm.DATASET_SOURCE_INPUTS == frozenset({_ROLE}) + engine = PolicyEngineUSEngine() + index = PolicyEngineUSVariableMetadataIndex() + assert _ROLE in engine.variables() + assert _ROLE in index.variables() + assert engine.formula_owned_outputs([_ROLE, "spm_measurement_adults"]) == { + "spm_measurement_adults" + } + assert index.formula_owned_outputs([_ROLE, "spm_measurement_adults"]) == { + "spm_measurement_adults" + } + assert engine.default_values([_ROLE]) == {} + + _source, path, pin, frame = population + result = _run(frame, path, pin) + export = result.table("person")[ + [ + "person_id", + "person_household_id", + "person_tax_unit_id", + "person_spm_unit_id", + "person_family_id", + "person_marital_unit_id", + "age", + _ROLE, + ] + ] + tables = {entity: result.table(entity) for entity in result.entities} + tables["person"] = export + exportable = Frame( + tables, + US_SCHEMA, + {"household": result.weights_for("household")}, + ) + destination = tmp_path / "role.h5" + engine.write_dataset(exportable, destination, period=_INCOME_YEAR) + written = USSingleYearDataset(file_path=str(destination)).person + assert written[_ROLE].tolist() == export[_ROLE].tolist() diff --git a/packages/microcosm-build/tests/test_us_spm_role_source.py b/packages/microcosm-build/tests/test_us_spm_role_source.py index 22fec70776..6989cfa9bc 100644 --- a/packages/microcosm-build/tests/test_us_spm_role_source.py +++ b/packages/microcosm-build/tests/test_us_spm_role_source.py @@ -1,6 +1,7 @@ """Pinned source roles must explain complete, unchanged native SPM units.""" import hashlib +import zipfile from dataclasses import replace import numpy as np @@ -204,6 +205,50 @@ def test_rejects_wrong_parent_identity(population): ) +def _archive(population, *, member="pppub25.csv", extra=()): + """The fixture CSV inside a Census-style archive, with pins updated.""" + + parent, source, pin = population + archive = source.parent / "asecpub25csv.zip" + with zipfile.ZipFile(archive, "w", compression=zipfile.ZIP_DEFLATED) as out: + out.write(source, arcname=member) + for name in extra: + out.writestr(name, "x") + return parent, archive, replace(pin, archive_sha256=_digest(archive)) + + +def test_archive_source_derives_the_same_role_as_its_extracted_csv(population): + """``--asec-education-source`` names the official archive in production.""" + + parent, archive, pin = _archive(population) + _, source, _ = population + # Same pins either way; only the path form differs. + from_csv = _derive((parent, source, pin)) + from_archive = _derive((parent, archive, pin)) + np.testing.assert_array_equal(from_archive.role, from_csv.role) + pd.testing.assert_frame_equal(from_archive.evidence, from_csv.evidence) + assert from_archive.provenance == from_csv.provenance + + +def test_rejects_unpinned_archive(population): + parent, archive, pin = _archive(population) + with pytest.raises(ValueError, match="archive SHA-256"): + _derive((parent, archive, replace(pin, archive_sha256="0" * 64))) + + +def test_rejects_archive_without_exactly_one_pinned_member(population): + with pytest.raises(ValueError, match="exactly one"): + _derive(_archive(population, member="other.csv")) + + +def test_rejects_archive_member_that_is_not_the_pinned_csv(population): + parent, archive, pin = _archive(population) + with pytest.raises(ValueError, match="CSV SHA-256"): + _derive((parent, archive, replace(pin, csv_sha256="0" * 64))) + with pytest.raises(ValueError, match="CSV byte length"): + _derive((parent, archive, replace(pin, csv_size_bytes=pin.csv_size_bytes + 1))) + + def test_rejects_unpinned_csv(population): parent, source, pin = population with pytest.raises(ValueError, match="CSV SHA-256"): diff --git a/packages/microcosm-frame/src/microcosm/frame/adapters/policyengine_us.py b/packages/microcosm-frame/src/microcosm/frame/adapters/policyengine_us.py index a8e10a9fef..2b059d2a3b 100644 --- a/packages/microcosm-frame/src/microcosm/frame/adapters/policyengine_us.py +++ b/packages/microcosm-frame/src/microcosm/frame/adapters/policyengine_us.py @@ -126,7 +126,9 @@ class VariableDependencyClosure: # declarations, so the snapshot is tied to every source and activation # surface that produced it: a changed wheel fails closed until this # audit is refreshed, and never silently omits a newly generated -# formula-owned output. +# formula-owned output. A name policyengine_us.spm.DATASET_SOURCE_INPUTS +# declares source-deliverable is recorded as an input leaf despite its +# fallback formula; spm.py is pinned so that declaration cannot drift. _GENERATED_SOURCE_VERSION = "2.2.1" _GENERATED_SOURCE_SHA256: dict[str, str] = { "model_api.py": "d7edb7436b84733f179fe223376fb588bb7a3ad6817d119703faeb599d4bb9c7", @@ -136,6 +138,7 @@ class VariableDependencyClosure: "reforms/states/mi/surtax.py": ( "e1d0c0207c46243d3509b22b15fbdc07aa02b4df9461f7b93bec872dc7124ea9" ), + "spm.py": "baa69c0d1163bdc55f7dc9ac85645c2b75e5519c8b72ec54fd57787a22164d5a", "system.py": "1c8539dcb8aeba4973823887895f5cd42bb9a2ee1270b0a947c9e7c185571302", "variables/gov/puf.py": ( "17545c43549ecf34016107bc8ed2dce25a53610afb802431a1b0ea6724215e7b" @@ -204,19 +207,12 @@ class VariableDependencyClosure: True, ), ( - ("is_household_spouse",), + tuple("is_household_spouse is_spm_independent_minor_role".split()), "person", "bool", "point", False, ), - ( - ("is_spm_independent_minor_role",), - "person", - "bool", - "point", - True, - ), ( tuple( "spm_unit_geographic_adjustment " @@ -526,6 +522,49 @@ def _engine_computed_columns( } +def _engine_dataset_source_inputs(policyengine_us: Any) -> frozenset[str]: + """The engine's declared dataset source inputs, read off the engine itself. + + ``policyengine_us.spm.DATASET_SOURCE_INPUTS`` names the variables a + population producer must deliver from the source even though the engine + carries a fallback formula for them ("A population producer must retain + its observed boolean instead of treating the fallback formula as + ownership of the input"). The formula's presence is therefore not + ownership, and this adapter classifies such a name as an input leaf. The + declaration must be a non-empty frozenset of variable names disjoint from + ``REJECTED_DATASET_INPUTS``; anything else fails closed rather than + letting a malformed upstream declaration widen the persisted surface. + """ + + import importlib + + module_name = f"{policyengine_us.__name__}.spm" + spm = importlib.import_module(module_name) + declared = getattr(spm, "DATASET_SOURCE_INPUTS", None) + rejected = getattr(spm, "REJECTED_DATASET_INPUTS", None) + if ( + not isinstance(declared, frozenset) + or not declared + or not all(isinstance(name, str) and name for name in declared) + ): + raise RuntimeError( + f"{module_name}.DATASET_SOURCE_INPUTS must be a non-empty frozenset " + f"of variable names; got {declared!r}." + ) + if not isinstance(rejected, frozenset): + raise RuntimeError( + f"{module_name}.REJECTED_DATASET_INPUTS must be a frozenset; got " + f"{type(rejected).__name__}." + ) + overlap = sorted(declared & rejected) + if overlap: + raise RuntimeError( + f"{module_name} declares {overlap} both as dataset source inputs and " + "as rejected dataset inputs; the adapter cannot classify them." + ) + return frozenset(declared) + + def _is_engine_computed(variable: Any, period: int | str | None = None) -> bool: """Return whether a PolicyEngine variable is computed by a formula. @@ -674,11 +713,12 @@ def variables(self) -> list[str]: ImportError: If ``policyengine_us`` is not installed. """ system_variables = self._tax_benefit_system().variables + source_inputs = self._dataset_source_inputs() return sorted( name for name, variable in system_variables.items() if name not in _FORMULA_OWNED_COMPAT_COLUMNS - and not _is_engine_computed(variable) + and (name in source_inputs or not _is_engine_computed(variable)) ) def formula_owned_outputs(self, names: Iterable[str]) -> set[str]: @@ -704,11 +744,14 @@ def formula_owned_outputs(self, names: Iterable[str]) -> set[str]: ImportError: If ``policyengine_us`` is not installed. """ variables = self._tax_benefit_system().variables + source_inputs = self._dataset_source_inputs() flagged: set[str] = set() for name in names: if name in _FORMULA_OWNED_COMPAT_COLUMNS: flagged.add(name) continue + if name in source_inputs: + continue variable = variables.get(name) if variable is not None and _is_engine_computed(variable): flagged.add(name) @@ -811,17 +854,24 @@ def default_values(self, names: Sequence[str]) -> dict[str, object]: Only names the tax-benefit system knows as non-formula input variables with a declared default are returned; unknown names and formula-owned variables are silently omitted, so callers can pass a - whole export surface. Enum defaults are normalized to their stored + whole export surface. Declared dataset source inputs are also omitted: + permission to store an observation is not permission to invent one. + Enum defaults are normalized to their stored member name (the representation datasets persist). Raises: ImportError: If ``policyengine_us`` is not installed. """ variables = self._tax_benefit_system().variables + source_inputs = self._dataset_source_inputs() defaults: dict[str, object] = {} for name in names: variable = variables.get(name) - if variable is None or _is_engine_computed(variable): + if ( + variable is None + or name in source_inputs + or _is_engine_computed(variable) + ): continue default = getattr(variable, "default_value", None) if default is None: @@ -990,6 +1040,15 @@ def write_dataset( # Lazy engine plumbing # ------------------------------------------------------------------ + def _dataset_source_inputs(self) -> frozenset[str]: + """Names the engine declares source-deliverable despite a fallback formula.""" + + cached = getattr(self, "_dataset_source_inputs_cache", None) + if cached is None: + cached = _engine_dataset_source_inputs(self._import_policyengine_us()) + self._dataset_source_inputs_cache = cached + return cached + def _import_policyengine_us(self) -> Any: try: import policyengine_us @@ -1073,12 +1132,14 @@ def _engine_computed_columns( writer is called, after checking aggregate deltas. """ variables = self._tax_benefit_system().variables + source_inputs = self._dataset_source_inputs() present = {column for frame in tables.values() for column in frame.columns} structural = self._structural_columns() return set(present & _FORMULA_OWNED_COMPAT_COLUMNS) | { column for column in present if column not in structural + and column not in source_inputs and column in variables and _is_engine_computed(variables[column], period=period) } diff --git a/packages/microcosm-frame/tests/test_policyengine_us_metadata_index.py b/packages/microcosm-frame/tests/test_policyengine_us_metadata_index.py index 8168f34e82..3bfb58002b 100644 --- a/packages/microcosm-frame/tests/test_policyengine_us_metadata_index.py +++ b/packages/microcosm-frame/tests/test_policyengine_us_metadata_index.py @@ -25,17 +25,22 @@ "mt_taxable_income".split() ) # policyengine-us 2.x installs spm-calculator's measurement variables into the -# default system through ``build_policyengine_variables``. Eight are -# formula-owned; ``is_household_spouse`` is the one new input leaf, the -# source-backed SPM independence role a stored dataset must supply. +# default system through ``build_policyengine_variables``. Seven are +# formula-owned. ``is_household_spouse`` is an ordinary input leaf, and +# ``is_spm_independent_minor_role`` is one too despite carrying the head/spouse +# fallback formula: ``policyengine_us.spm.DATASET_SOURCE_INPUTS`` declares it +# source-deliverable ("a population producer must retain its observed +# boolean"), and the audit snapshot records that declaration. _EXPECTED_SPM_FORMULA_OWNED = frozenset( - "is_spm_independent_minor_role spm_measurement_adults " + "spm_measurement_adults " "spm_measurement_children spm_unit_geographic_adjustment " "spm_unit_reference_spm_threshold spm_unit_spm_threshold " "spm_unit_spm_threshold_housing_portion " "spm_unit_unadjusted_spm_threshold".split() ) -_EXPECTED_SPM_INPUTS = frozenset({"is_household_spouse"}) +_EXPECTED_SPM_INPUTS = frozenset( + {"is_household_spouse", "is_spm_independent_minor_role"} +) def _write_variable_source( @@ -203,8 +208,8 @@ def test_generated_snapshot_covers_the_pinned_default_system() -> None: index = module.PolicyEngineUSVariableMetadataIndex() assert len(index._definitions) == 6_167 - assert len(index.variables()) == 925 - assert len(index.formula_owned_outputs(index._definitions)) == 5_242 + assert len(index.variables()) == 926 + assert len(index.formula_owned_outputs(index._definitions)) == 5_241 assert index.formula_owned_outputs(["AK", "e00700", "ar_agi", "mi_surtax"]) == { "AK", "ar_agi", @@ -214,7 +219,11 @@ def test_generated_snapshot_covers_the_pinned_default_system() -> None: # rejects them as stored dataset inputs, and the export contract must # never carry them. assert index.formula_owned_outputs( - ["spm_unit_spm_threshold", "is_household_spouse"] + [ + "spm_unit_spm_threshold", + "is_household_spouse", + "is_spm_independent_minor_role", + ] ) == {"spm_unit_spm_threshold"} 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 9ae5d4286e..3c5251e7c3 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":"df42a6d95e4b98ce158334014dc9524de8f7791757eeaf3c6392d8d9b8469edf","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":"5a209930880c1dd03caba90feee358b1057aeed55b99b26b6ebee47d530689ee","engine_input_projection_sha256":"d0f660fdbe3ae839dc5e68b3b4887ff07013ccfe321a3bf7ea99fc6de3a9af4f","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":"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"}]} diff --git a/tools/build_us_fiscal_refresh_release.py b/tools/build_us_fiscal_refresh_release.py index c6dda36861..67a359a8e1 100644 --- a/tools/build_us_fiscal_refresh_release.py +++ b/tools/build_us_fiscal_refresh_release.py @@ -162,6 +162,7 @@ us_snap_take_up_signal_gate, us_source_coverage_diagnostics, us_source_operation_handlers, + us_spm_independence_role_signal_gate, us_ssi_disability_criteria_signal_gate, us_ssi_take_up_delivery_gate, us_ssi_take_up_diagnostics, @@ -197,6 +198,7 @@ with_us_snap_discretionary_exemption_inputs, with_us_snap_state_take_up, with_us_snap_take_up_inputs, + with_us_spm_independence_role, with_us_ssi_disability_criteria, with_us_ssi_take_up, with_us_take_up_inputs, @@ -5461,11 +5463,12 @@ def _spm_composition_report(frame: Frame) -> CheckResult: ``check_spm_composition`` reproduces spm-calculator 1.0.0's rule (``adult = (age >= 18) | ((age >= 15) & role)``) over frame columns. The role resolution it mirrors is exactly what this export can produce: - ``is_spm_independent_minor_role`` is formula-owned in the engine adapter - (``microcosm.frame.adapters.policyengine_us._GENERATED_VARIABLE_GROUPS``) - and therefore *cannot* be written by ``write_dataset``, while - ``is_household_head`` and ``is_household_spouse`` can — so a frame check - here and the engine's own reading of the written H5 agree. + ``is_spm_independent_minor_role`` is the engine's declared dataset source + input (``policyengine_us.spm.DATASET_SOURCE_INPUTS``), which the adapter + classifies as an input leaf and ``write_dataset`` persists when the frame + carries it (the ``spm_independence_role`` stage writes it), and + ``is_household_head`` / ``is_household_spouse`` are persisted too — so a + frame check here and the engine's own reading of the written H5 agree. """ from microcosm.build.us_runtime.release_gate_preflight import ( @@ -10075,6 +10078,37 @@ def _main(argv: Sequence[str] | None = None) -> None: for failure in relationship_inputs_gate.failures ) ) + if telemetry is not None: + telemetry.stage( + "spm_independence_role", + message=( + "Restoring the measured SPM independence role from the pinned " + "Census ASEC person files." + ), + ) + if pool_frame is None: + base_frame = with_us_spm_independence_role( + base_frame, + seed=args.seed, + time_period=PERIOD, + ) + spm_independence_role_gate = us_spm_independence_role_signal_gate(base_frame) + if not spm_independence_role_gate.passed: + if telemetry is not None: + telemetry.stage( + "spm_independence_role_gate", + status="failed", + message="SPM independence role signal gate failed.", + failures=list(spm_independence_role_gate.failures), + force_upload=True, + ) + raise RuntimeError( + "Release gates failed: " + + "; ".join( + f"SPM independence role signal failed: {failure}" + for failure in spm_independence_role_gate.failures + ) + ) if telemetry is not None: telemetry.stage( "medicare_take_up_input", diff --git a/tools/build_us_puf_support_base.py b/tools/build_us_puf_support_base.py index 3fbb27d96d..029f24891a 100644 --- a/tools/build_us_puf_support_base.py +++ b/tools/build_us_puf_support_base.py @@ -120,6 +120,7 @@ us_retirement_distributions_signal_gate, us_salt_refund_income_signal_gate, us_source_operation_handlers, + us_spm_independence_role_signal_gate, us_weeks_unemployed_signal_gate, us_wic_claim_signal_gate, us_workers_compensation_signal_gate, @@ -142,6 +143,7 @@ with_us_relationship_inputs, with_us_retirement_contribution_inputs, with_us_retirement_distribution_inputs, + with_us_spm_independence_role, with_us_weeks_unemployed, with_us_wic_claim_input, with_us_workers_compensation, @@ -206,6 +208,7 @@ "derive_us_cps_carried_inputs", "with_us_prior_year_income_inputs", "with_us_relationship_inputs", + "with_us_spm_independence_role", "with_us_medicare_take_up_input", "with_us_housing_inputs[includes_acs_rent_in_current_order]", "with_us_eligibility_inputs", @@ -1090,6 +1093,18 @@ def _run_all( "Relationship-input signal gate failed:\n " + "\n ".join(relationship_inputs_gate.failures) ) + base = with_us_spm_independence_role( + base, + seed=args.seed, + time_period=args.target_year, + asec_spm_role_source_paths=_asec_education_source_paths(args), + ) + spm_independence_role_gate = us_spm_independence_role_signal_gate(base) + if not spm_independence_role_gate.passed: + raise SystemExit( + "SPM independence role signal gate failed:\n " + + "\n ".join(spm_independence_role_gate.failures) + ) base = with_us_medicare_take_up_input( base, seed=args.seed, @@ -1780,6 +1795,11 @@ def _run_all( "failures": list(relationship_inputs_gate.failures), "details": dict(relationship_inputs_gate.details), }, + "spm_independence_role_signal": { + "passed": spm_independence_role_gate.passed, + "failures": list(spm_independence_role_gate.failures), + "details": dict(spm_independence_role_gate.details), + }, "medicare_take_up_input_signal": { "passed": medicare_take_up_gate.passed, "failures": list(medicare_take_up_gate.failures), @@ -2195,6 +2215,16 @@ def _pre_clone_enrichment_stage( "Relationship-input signal gate failed", ) } + base = with_us_spm_independence_role( + base, + seed=args.seed, + time_period=args.target_year, + asec_spm_role_source_paths=_asec_education_source_paths(args), + ) + signals["spm_independence_role_signal"] = _checked_gate_payload( + us_spm_independence_role_signal_gate(base), + "SPM independence role signal gate failed before support cloning", + ) base = with_us_medicare_take_up_input( base, seed=args.seed, diff --git a/tools/build_us_release_input_coverage_manifest.py b/tools/build_us_release_input_coverage_manifest.py index 8f88b24c25..68a7e1a2d5 100644 --- a/tools/build_us_release_input_coverage_manifest.py +++ b/tools/build_us_release_input_coverage_manifest.py @@ -81,6 +81,7 @@ "is_self_employed", "pre_subsidy_care_expenses", "is_incapable_of_self_care", + "is_spm_independent_minor_role", # PolicyEngine/microcosm#978 option 1: the ASEC reported-receipt inputs the # ACS local-area transfer requires in its donor. "receives_wic", @@ -142,6 +143,20 @@ "Currently absent — the intended red gate until the next base " "rebuild carries the stage through." ), + "is_spm_independent_minor_role": ( + "The one dataset source input policyengine_us.spm.DATASET_SOURCE_INPUTS " + "declares: the measured Census SPM independence role, stored before " + "any age gate, that lets spm-calculator classify a 15-to-17-year-old " + "SPM unit head or spouse as an adult. Without it one such unit " + "refuses the whole population's SPM measurement " + "(SPM_COMPOSITION_REQUIRED) and the 104 state SPM poverty rows cannot " + "be validated. Written by the spm_independence_role base-builder " + "stage from the SHA-pinned complete Census ASEC person files through " + "the certified derive_spm_role_source; the certified default carries " + "it through the Build P source enrichment. Required with NO reviewed " + "exclusion: the anti-rot check would fail an exclusion whose column " + "carries signal, and the certified default's does." + ), "is_incapable_of_self_care": ( "Section 21 qualifying-individual flag for the CDCC adult-care leg " "(PolicyEngine/microcosm#451 item 1), derived from the measured ASEC " @@ -1564,10 +1579,13 @@ def build_manifest() -> dict: "meets_ssi_disability_criteria required by shipped validation " "probes, the #282 Schedule-D capital-gain-distributions " "route leg schedule_d_capital_gain_distributions " - "(PolicyEngine/microcosm#462), and the three ASEC reported-receipt " + "(PolicyEngine/microcosm#462), the three ASEC reported-receipt " "inputs receives_wic, receives_snap, receives_tanf that the ACS " "local-area transfer requires in its donor " - "(PolicyEngine/microcosm#978 option 1). " + "(PolicyEngine/microcosm#978 option 1), and the engine's declared " + "dataset source input is_spm_independent_minor_role (the " + "spm_independence_role base-builder stage; " + "PolicyEngine/microcosm#893). " "status='reviewed_exclusion' for ecps_parity_known_gaps.json entries " "(reason+issue from that register); EXCEPT every primary-source " "restoration pinned by RESTORED_REFERENCE_ECPS_REQUIRED_INPUTS " diff --git a/tools/generate_us_bundle_from_constants.py b/tools/generate_us_bundle_from_constants.py index 95bdbca920..131991f695 100644 --- a/tools/generate_us_bundle_from_constants.py +++ b/tools/generate_us_bundle_from_constants.py @@ -122,7 +122,7 @@ def _domain_builders() -> dict[str, Callable[[], object]]: # frozen files, is the forward YAML -> legacy-payload path. FROZEN_LEGACY_RESOURCE_SHA256 = { "source_stages.json": ( - "7935d891ed16eac618f04813a7b8a3ceb9a971c8b4c4273683594ba61e7dd631" + "9f4f983091fb18dea8f4524cc100be20f9fca2b006435461592f8edf53c9a5d8" ), "support_spine.json": ( "68f37dc6ae6e0cde7ebccb53f88dd4a800e63456f838fa214ff98d1db8d815be" diff --git a/tools/refresh_us_generated_variable_audit.py b/tools/refresh_us_generated_variable_audit.py index 459c45cca8..f44917b45b 100644 --- a/tools/refresh_us_generated_variable_audit.py +++ b/tools/refresh_us_generated_variable_audit.py @@ -62,11 +62,14 @@ #: Files that *activate* generation without declaring the variables themselves: #: the system constructor that calls every generator, the reform registry that -#: routes the Michigan surtax, and the star-export surface the generators are -#: written against. Defining files are derived, never listed; these three are -#: the reviewed activation surface, so adding one is a deliberate edit here. +#: routes the Michigan surtax, the star-export surface the generators are +#: written against, and ``spm.py``, whose ``DATASET_SOURCE_INPUTS`` declares +#: which generated variables a producer delivers from the source despite a +#: fallback formula (the snapshot records those as input leaves). Defining +#: files are derived, never listed; these are the reviewed activation surface, +#: so adding one is a deliberate edit here. ACTIVATION_FILES: Mapping[str, tuple[str, ...]] = { - "policyengine-us": ("model_api.py", "reforms/reforms.py", "system.py"), + "policyengine-us": ("model_api.py", "reforms/reforms.py", "spm.py", "system.py"), "spm-calculator": (), } @@ -146,6 +149,36 @@ def _formula_owned(variable: object) -> bool: ) +def _dataset_source_inputs(generated: Mapping[str, object]) -> frozenset[str]: + """The engine's declared source-deliverable inputs, validated like the adapter. + + ``policyengine_us.spm.DATASET_SOURCE_INPUTS`` overrides formula presence: + a producer must retain its observed value for these names, so the + snapshot records them as input leaves. The declaration is read off the + installed engine through the same validation the adapter's live path + applies, and every declared name must be one of the generated variables + this snapshot covers — a declared ordinary class would need the static + parser to learn the rule, which is a review event, not a silent regenerate. + """ + + sys.path.insert(0, str(REPOSITORY_ROOT / "packages" / "microcosm-frame" / "src")) + import policyengine_us + + from microcosm.frame.adapters.policyengine_us import ( + _engine_dataset_source_inputs, + ) + + declared = _engine_dataset_source_inputs(policyengine_us) + unknown = sorted(declared - set(generated)) + if unknown: + raise AuditError( + "policyengine_us.spm.DATASET_SOURCE_INPUTS names variable(s) the " + f"generated-variable snapshot does not cover: {unknown}. Extend the " + "static parser before regenerating." + ) + return declared + + _EPOCH_START = "0001-01-01" _DTYPE_BY_VALUE_TYPE = {float: "float", int: "int", bool: "bool", str: "str"} _PERIOD_BY_DEFINITION = {"year": "year", "month": "month"} @@ -176,6 +209,7 @@ def _derive_groups( buckets: dict[tuple[str, str, str, str, str, bool], list[str]] = ( collections.defaultdict(list) ) + source_inputs = _dataset_source_inputs(variables) for name, variable in sorted(variables.items()): formulas = getattr(variable, "formulas", None) or {} dated = [start for start in formulas if start != _EPOCH_START] @@ -195,7 +229,7 @@ def _derive_groups( variable.entity.key, dtype, period, - _formula_owned(variable), + name not in source_inputs and _formula_owned(variable), ) ].append(name) return tuple( @@ -311,7 +345,9 @@ def render_block() -> str: "# declarations, so the snapshot is tied to every source and activation", "# surface that produced it: a changed wheel fails closed until this", "# audit is refreshed, and never silently omits a newly generated", - "# formula-owned output.", + "# formula-owned output. A name policyengine_us.spm.DATASET_SOURCE_INPUTS", + "# declares source-deliverable is recorded as an input leaf despite its", + "# fallback formula; spm.py is pinned so that declaration cannot drift.", ] for name, (version_symbol, digest_symbol) in PIN_SYMBOLS.items(): sections.append(f'{version_symbol} = "{_version(name)}"') diff --git a/tools/spec_engine_coverage.py b/tools/spec_engine_coverage.py index 523b261b60..0ea30f3c74 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 = ( - "8b9791cd74909a425279206bddab17c8c9c1f7a5600c75c4bcf81de35311acf5" + "21b6fe2f6b96307f8ec7d20d4162ee2e0702f363bb28ebd3fa47a4cf7fc12ed4" ) DEFAULT_REPORT_PATH = ( Path(__file__).resolve().parents[1]