diff --git a/pyproject.toml b/pyproject.toml index dd6d1ae..4c526b4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,7 @@ authors = [ ] requires-python = ">=3.13" dependencies = [ - "microplex[calibrate] @ git+https://github.com/PolicyEngine/microplex.git@773106e3a159a0417ed15025b507ab05c0b93b5d", + "microplex[calibrate] @ git+https://github.com/PolicyEngine/microplex.git@cad505289da23e1e7a5eded3c67a248cd8d1b8e4", "duckdb>=1.2", "h5py>=3.10", "requests>=2.31", diff --git a/src/microplex_us/pipelines/check_export_columns.py b/src/microplex_us/pipelines/check_export_columns.py index fb23009..4e5e785 100644 --- a/src/microplex_us/pipelines/check_export_columns.py +++ b/src/microplex_us/pipelines/check_export_columns.py @@ -41,6 +41,7 @@ import argparse import json +import re import sys from dataclasses import asdict, dataclass from pathlib import Path @@ -48,6 +49,7 @@ # Path to the committed contract shipped alongside this module. DEFAULT_CONTRACT_PATH = Path(__file__).with_name("ecps_export_contract.json") +DEFAULT_SPEC_PATH = Path(__file__).resolve().parents[1] / "specs" / "us-2024.yaml" SIGNED_NUMERIC_SUPPORT_COLUMNS = frozenset( { @@ -113,6 +115,28 @@ def ok(self) -> bool: return not self.issues +@dataclass +class SpecVariableManifestDiff: + """Result of checking ``spec.variables`` against the frozen contract.""" + + spec_path: str + required_contract_count: int + declared_imputation_count: int + variable_manifest_count: int + missing_required: list[str] + missing_declared_imputation: list[str] + extra_variables: list[str] + + @property + def ok(self) -> bool: + """True when the manifest exactly covers required and declared vars.""" + return not ( + self.missing_required + or self.missing_declared_imputation + or self.extra_variables + ) + + def compute_column_diff( present: set[str], *, @@ -229,6 +253,138 @@ def compute_support_diff( ) +def compute_spec_variable_manifest_diff( + *, + contract: dict, + spec_path: Path = DEFAULT_SPEC_PATH, +) -> SpecVariableManifestDiff: + """Compare ``spec.variables`` with required exports and declared imputations.""" + text = spec_path.read_text(encoding="utf-8") + variables = _parse_top_level_mapping_keys(text, "variables") + if not variables: + raise ValueError(f"Spec {spec_path} is missing a variables mapping.") + + required = {str(column) for column in contract["required"]} + declared_imputation = _parse_imputation_vars(text) + expected = required | declared_imputation + return SpecVariableManifestDiff( + spec_path=str(spec_path), + required_contract_count=len(required), + declared_imputation_count=len(declared_imputation), + variable_manifest_count=len(variables), + missing_required=sorted(required - variables), + missing_declared_imputation=sorted(declared_imputation - variables), + extra_variables=sorted(variables - expected), + ) + + +def _top_level_section_lines(text: str, section: str) -> list[str]: + """Return lines in a simple top-level YAML section. + + This module is intentionally importable with only the column-parity + job's minimal dependencies, so the fast manifest gate avoids PyYAML. + The parser only needs the committed spec's shape: top-level sections, + mapping keys under ``variables:``, and imputation ``vars`` lists. + """ + section_header = f"{section}:" + lines = text.splitlines() + for index, line in enumerate(lines): + if line.strip() == section_header and not line.startswith((" ", "\t")): + body: list[str] = [] + for candidate in lines[index + 1 :]: + stripped = candidate.strip() + if ( + stripped + and not candidate.startswith((" ", "\t")) + and re.match(r"^[A-Za-z_][A-Za-z0-9_-]*:", stripped) + ): + break + body.append(candidate) + return body + return [] + + +def _parse_top_level_mapping_keys(text: str, section: str) -> set[str]: + """Parse direct mapping keys from a top-level section.""" + keys: set[str] = set() + for line in _top_level_section_lines(text, section): + match = re.match(r"^ ([A-Za-z_][A-Za-z0-9_]*):(?:\s|$)", line) + if match: + keys.add(match.group(1)) + return keys + + +def _parse_inline_list(raw: str) -> list[str]: + """Parse the simple YAML inline list form used in tests.""" + stripped = raw.strip() + if not stripped.startswith("[") or not stripped.endswith("]"): + return [] + body = stripped[1:-1].strip() + if not body: + return [] + return [ + parsed + for item in body.split(",") + if (parsed := _parse_simple_yaml_scalar(item)) is not None + ] + + +def _parse_simple_yaml_scalar(raw: str) -> str | None: + """Parse a simple YAML scalar variable name with optional inline comment.""" + value = raw.strip() + quote: str | None = None + unquoted = [] + for index, char in enumerate(value): + if char in {"'", '"'}: + if quote is None: + quote = char + elif quote == char: + quote = None + if char == "#" and quote is None and (index == 0 or value[index - 1].isspace()): + break + unquoted.append(char) + value = "".join(unquoted).strip() + if ( + len(value) >= 2 + and value[0] == value[-1] + and value[0] in {"'", '"'} + ): + value = value[1:-1].strip() + if re.match(r"^[A-Za-z_][A-Za-z0-9_]*$", value): + return value + return None + + +def _parse_imputation_vars(text: str) -> set[str]: + """Parse variable names from imputation step ``vars`` lists.""" + variables: set[str] = set() + in_vars_block = False + for line in _top_level_section_lines(text, "imputation"): + if re.match(r"^ -\s", line): + in_vars_block = False + + inline_match = re.match(r"^ vars:\s*(\[.*\])(?:\s+#.*)?$", line) + if inline_match: + variables.update(_parse_inline_list(inline_match.group(1))) + in_vars_block = False + continue + + if re.match(r"^ vars:\s*$", line): + in_vars_block = True + continue + + if in_vars_block: + item_match = re.match(r"^ -\s+(.+?)\s*$", line) + if item_match: + if parsed := _parse_simple_yaml_scalar(item_match.group(1)): + variables.add(parsed) + continue + if re.match(r"^ [A-Za-z_][A-Za-z0-9_-]*:", line): + in_vars_block = False + + return variables + + def _h5_column_values( handle: Any, column: str, @@ -416,6 +572,7 @@ def _format_report( n_required: int, n_forbidden: int, support_diff: SupportDiff | None = None, + spec_diff: SpecVariableManifestDiff | None = None, ) -> str: """Build a human-readable report for the diff.""" lines = [ @@ -452,7 +609,29 @@ def _format_report( ), ] ) - ok = diff.ok and (support_diff is None or support_diff.ok) + if spec_diff is not None: + lines.extend( + [ + "", + " spec variable manifest:", + f" spec: {spec_diff.spec_path}", + f" required contract variables: {spec_diff.required_contract_count}", + f" declared imputation variables: {spec_diff.declared_imputation_count}", + f" spec.variables count: {spec_diff.variable_manifest_count}", + f" missing_required ({len(spec_diff.missing_required)}):", + *_bullet_lines(spec_diff.missing_required), + " missing_declared_imputation " + f"({len(spec_diff.missing_declared_imputation)}):", + *_bullet_lines(spec_diff.missing_declared_imputation), + f" extra_variables ({len(spec_diff.extra_variables)}):", + *_bullet_lines(spec_diff.extra_variables), + ] + ) + ok = ( + diff.ok + and (support_diff is None or support_diff.ok) + and (spec_diff is None or spec_diff.ok) + ) lines.extend(["", " RESULT: " + ("PASS" if ok else "FAIL")]) return "\n".join(lines) @@ -522,6 +701,20 @@ def main(argv: list[str] | None = None) -> int: default=str(DEFAULT_CONTRACT_PATH), help="Override the contract JSON (default: committed contract).", ) + parser.add_argument( + "--spec", + metavar="FILE", + help=( + "Spec YAML whose variables block must cover the contract and " + "declared imputation vars. Defaults to the committed US spec when " + "using the committed contract." + ), + ) + parser.add_argument( + "--skip-spec-variable-manifest", + action="store_true", + help="Skip the spec.variables manifest coverage check.", + ) parser.add_argument( "--support-baseline", metavar="H5", @@ -593,6 +786,21 @@ def main(argv: list[str] | None = None) -> int: optional=optional, excluded=excluded, ) + contract_path = Path(args.contract).resolve() + spec_path = None + if not args.skip_spec_variable_manifest: + if args.spec: + spec_path = Path(args.spec) + elif contract_path == DEFAULT_CONTRACT_PATH.resolve(): + spec_path = DEFAULT_SPEC_PATH + spec_diff = ( + None + if spec_path is None + else compute_spec_variable_manifest_diff( + contract=contract, + spec_path=Path(spec_path), + ) + ) support_diff = None if args.support_baseline: support_exempt = set(contract.get("support_exemptions", [])) | set( @@ -619,9 +827,18 @@ def main(argv: list[str] | None = None) -> int: n_required=len(required), n_forbidden=len(forbidden), support_diff=support_diff, + spec_diff=spec_diff, + ) + ) + return ( + 0 + if ( + diff.ok + and (support_diff is None or support_diff.ok) + and (spec_diff is None or spec_diff.ok) ) + else 1 ) - return 0 if diff.ok and (support_diff is None or support_diff.ok) else 1 if __name__ == "__main__": diff --git a/src/microplex_us/pipelines/mp300k_artifact_gates.py b/src/microplex_us/pipelines/mp300k_artifact_gates.py index f0c20b4..e17fc34 100644 --- a/src/microplex_us/pipelines/mp300k_artifact_gates.py +++ b/src/microplex_us/pipelines/mp300k_artifact_gates.py @@ -519,6 +519,7 @@ def _column_contract_gate( from microplex_us.pipelines.check_export_columns import ( DEFAULT_CONTRACT_PATH, compute_column_diff, + compute_spec_variable_manifest_diff, load_contract, ) @@ -535,6 +536,7 @@ def _column_contract_gate( optional=optional, excluded=excluded, ) + spec_diff = compute_spec_variable_manifest_diff(contract=contract) satisfied_count = len(required) - len(diff.missing_required) contract_share = float(satisfied_count / len(required)) if required else None metrics = { @@ -553,23 +555,37 @@ def _column_contract_gate( # informational, matching check_export_columns. "extra_candidate_column_count": len(diff.extra_unknown), "column_contract_share": contract_share, + "spec_variable_manifest_count": spec_diff.variable_manifest_count, + "spec_required_contract_column_count": spec_diff.required_contract_count, + "spec_declared_imputation_variable_count": spec_diff.declared_imputation_count, + "spec_missing_required_column_count": len(spec_diff.missing_required), + "spec_missing_declared_imputation_count": len( + spec_diff.missing_declared_imputation + ), + "spec_extra_variable_count": len(spec_diff.extra_variables), } details = { "missing_contract_columns": diff.missing_required, "forbidden_present_columns": diff.forbidden_present, "extra_unknown_columns": diff.extra_unknown, "extra_candidate_columns": diff.extra_unknown, + "spec_variable_manifest": { + "spec_path": spec_diff.spec_path, + "missing_required": spec_diff.missing_required, + "missing_declared_imputation": spec_diff.missing_declared_imputation, + "extra_variables": spec_diff.extra_variables, + }, } - if diff.missing_required or diff.forbidden_present: + if diff.missing_required or diff.forbidden_present or not spec_diff.ok: return _gate( "fail", - "candidate H5 leaf-input column set violates the frozen eCPS contract", + "candidate H5 leaf-input column set or spec manifest violates the frozen eCPS contract", metrics=metrics, details=details, ) return _gate( "pass", - "candidate H5 leaf-input column set satisfies the frozen eCPS contract", + "candidate H5 leaf-input column set and spec manifest satisfy the frozen eCPS contract", metrics=metrics, details=details, ) diff --git a/src/microplex_us/specs/us-2024.yaml b/src/microplex_us/specs/us-2024.yaml index 7402937..8621747 100644 --- a/src/microplex_us/specs/us-2024.yaml +++ b/src/microplex_us/specs/us-2024.yaml @@ -249,6 +249,7740 @@ imputation: order: spine_first synthesize: true +variables: + age: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + alimony_expense: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + alimony_income: + entity: person + role: puf_imputed + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + notes: MP legacy keeps CPS values for same-name non-overridden columns; this is explicitly called out for known collisions. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: 'Known keep-CPS collision: the synthetic half must synthesize this variable and must not inherit the CPS canonical + value. Known keep-CPS collision from Claude manifest; synthetic half must not keep CPS canonical value.' + american_opportunity_credit_claimed_prior_years: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + attends_eligible_educational_institution_for_american_opportunity_credit: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + auto_loan_balance: + entity: household + role: scf_direct_or_support + temporary: true + ecps: + method: SCF donor imputation support variable + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 668-814 + symbol: impute_scf_variables + mp_legacy: + method: SCF support variable with export default fallback + code: + - path: src/microplex_us/pipelines/us.py + lines: 8398-8400 + summary: Legacy rebuild requests net_worth/auto-loan SCF support variables. + - path: src/microplex_us/policyengine/us.py + lines: 506,521 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + mp_spec: + method: source=scf donor imputation/support variable + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary variable provenance; concrete source-imputation step still pending. + auto_loan_interest: + entity: household + role: scf_direct_or_support + temporary: true + ecps: + method: SCF donor imputation support variable + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 668-814 + symbol: impute_scf_variables + mp_legacy: + method: SCF support variable with export default fallback + code: + - path: src/microplex_us/pipelines/us.py + lines: 8398-8400 + summary: Legacy rebuild requests net_worth/auto-loan SCF support variables. + - path: src/microplex_us/policyengine/us.py + lines: 506,521 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + mp_spec: + method: source=scf donor imputation/support variable + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary variable provenance; concrete source-imputation step still pending. + bank_account_assets: + entity: person + role: sipp_asset_source_imputed + temporary: true + ecps: + method: SIPP asset donor QRF imputation + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 37-42,562-657 + symbol: SIPP_ASSETS_VARIABLES / impute_sipp_assets + mp_legacy: + method: SIPP donor survey/source-impute target + code: + - path: src/microplex_us/pe_source_impute_specs.py + summary: MP legacy PE-source donor block specs. + - path: src/microplex_us/data_sources/donor_surveys.py + lines: 1236-1291 + symbol: SIPPSourceProvider / SIPPAssetsSourceProvider + mp_spec: + method: source=sipp asset donor imputation + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration for future SourceRegistry-backed source-imputation step. + block_geoid: + entity: household + role: geography_export_contract + temporary: true + ecps: + method: eCPS geography assignment/export encoding + code: + - path: policyengine_us_data/storage/enhanced_cps/clone_and_assign.py + lines: 55,114-151 + symbol: assign_random_geography + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 269-289 + summary: Fixed-width block/tract/county export encoding. + notes: eCPS emits fixed-width byte strings for block/tract/county geographies. + mp_legacy: + method: Microplex census block assignment/export derivation + code: + - path: src/microplex_us/pipelines/us.py + lines: 491-587,3999-4023 + symbol: _attach_household_census_geographies / _ensure_household_in_nyc + - path: src/microplex_us/geography.py + lines: 403-527,550-647 + symbol: BlockGeography + notes: Manifest flagged possible encoding/export divergence; exporter must preserve eCPS-compatible widths. + mp_spec: + method: GeoCloner/exporter derived geography with eCPS-compatible encoding + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration for future GeoCloner/exporter rules. + bond_assets: + entity: person + role: sipp_asset_source_imputed + temporary: true + ecps: + method: SIPP asset donor QRF imputation + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 37-42,562-657 + symbol: SIPP_ASSETS_VARIABLES / impute_sipp_assets + mp_legacy: + method: SIPP donor survey/source-impute target + code: + - path: src/microplex_us/pe_source_impute_specs.py + summary: MP legacy PE-source donor block specs. + - path: src/microplex_us/data_sources/donor_surveys.py + lines: 1236-1291 + symbol: SIPPSourceProvider / SIPPAssetsSourceProvider + mp_spec: + method: source=sipp asset donor imputation + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration for future SourceRegistry-backed source-imputation step. + business_is_sstb: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + casualty_loss: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + charitable_cash_donations: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + charitable_non_cash_donations: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + child_support_expense: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + child_support_received: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + congressional_district_geoid: + entity: household + role: geography_export_contract + temporary: true + ecps: + method: eCPS geography assignment/export encoding + code: + - path: policyengine_us_data/storage/enhanced_cps/clone_and_assign.py + lines: 55,114-151 + symbol: assign_random_geography + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 269-289 + summary: Fixed-width block/tract/county export encoding. + notes: eCPS emits fixed-width byte strings for block/tract/county geographies. + mp_legacy: + method: Microplex census block assignment/export derivation + code: + - path: src/microplex_us/pipelines/us.py + lines: 491-587,3999-4023 + symbol: _attach_household_census_geographies / _ensure_household_in_nyc + - path: src/microplex_us/geography.py + lines: 403-527,550-647 + symbol: BlockGeography + notes: Manifest flagged possible encoding/export divergence; exporter must preserve eCPS-compatible widths. + mp_spec: + method: GeoCloner/exporter derived geography with eCPS-compatible encoding + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration for future GeoCloner/exporter rules. + count_under_18: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + count_under_6: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + county_fips: + entity: household + role: geography_export_contract + temporary: true + ecps: + method: eCPS geography assignment/export encoding + code: + - path: policyengine_us_data/storage/enhanced_cps/clone_and_assign.py + lines: 55,114-151 + symbol: assign_random_geography + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 269-289 + summary: Fixed-width block/tract/county export encoding. + notes: eCPS emits fixed-width byte strings for block/tract/county geographies. + mp_legacy: + method: Microplex census block assignment/export derivation + code: + - path: src/microplex_us/pipelines/us.py + lines: 491-587,3999-4023 + symbol: _attach_household_census_geographies / _ensure_household_in_nyc + - path: src/microplex_us/geography.py + lines: 403-527,550-647 + symbol: BlockGeography + notes: Manifest flagged possible encoding/export divergence; exporter must preserve eCPS-compatible widths. + mp_spec: + method: GeoCloner/exporter derived geography with eCPS-compatible encoding + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration for future GeoCloner/exporter rules. + cps_race: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + detailed_occupation_recode: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + difficulty_doing_errands: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + difficulty_dressing_or_bathing: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + difficulty_hearing: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + difficulty_remembering_or_making_decisions: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + difficulty_seeing: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + difficulty_walking_or_climbing_stairs: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + disability_benefits: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + domestic_production_ald: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + educational_assistance: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + educator_expense: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + employer_sponsored_insurance_premiums: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + employment_income_before_lsr: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + estate_income: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + estate_income_would_be_qualified: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + family_id: + entity: family + role: structural_export_contract + temporary: true + ecps: + method: PolicyEngine H5 structural id/link/weight export + code: + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: eCPS structural entity ids, links, and household_weight export. + mp_legacy: + method: PolicyEngine US H5 structural id/link/weight export + code: + - path: src/microplex_us/policyengine/us.py + lines: 473-486 + symbol: POLICYENGINE_US_STRUCTURAL_EXPORT_COLUMNS + mp_spec: + method: exporter structural entity/link column + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Structural columns must be asserted by strict stage/export manifests. + farm_income: + entity: person + role: puf_imputed + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF; CPS keep half may pass through unless explicitly overridden. + farm_operations_income: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + farm_operations_income_would_be_qualified: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + farm_rent_income: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + farm_rent_income_would_be_qualified: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + financial_assistance: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + first_home_mortgage_balance: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + first_home_mortgage_interest: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + first_home_mortgage_origination_year: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + fsla_overtime_premium: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + has_american_opportunity_credit_1098_t_or_exception: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + has_american_opportunity_credit_institution_ein: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + has_champva_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + has_completed_first_four_years_of_postsecondary_education: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + has_esi: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + has_felony_drug_conviction: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + has_indian_health_service_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + has_itin: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + has_marketplace_health_coverage: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + has_marketplace_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + has_medicaid_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + has_never_worked: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + has_non_marketplace_direct_purchase_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + has_other_means_tested_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + has_tin: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + has_tricare_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + has_va_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + has_valid_ssn: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + health_insurance_premiums_without_medicare_part_b: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + health_savings_account_ald: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + home_mortgage_interest: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: 'Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Current + spec inherited this from the legacy PUF surface; verify whether eCPS treats it as formula/default before promoting. + Needs review: current MP spec inherited this from legacy PUF surface, but the manifest questions eCPS formula/default + treatment.' + hourly_wage: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + hours_worked_last_week: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + household_id: + entity: household + role: structural_export_contract + temporary: true + ecps: + method: PolicyEngine H5 structural id/link/weight export + code: + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: eCPS structural entity ids, links, and household_weight export. + mp_legacy: + method: PolicyEngine US H5 structural id/link/weight export + code: + - path: src/microplex_us/policyengine/us.py + lines: 473-486 + symbol: POLICYENGINE_US_STRUCTURAL_EXPORT_COLUMNS + mp_spec: + method: exporter structural entity/link column + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Structural columns must be asserted by strict stage/export manifests. + household_vehicles_owned: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + household_vehicles_value: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + household_weight: + entity: household + role: structural_export_contract + temporary: true + ecps: + method: PolicyEngine H5 structural id/link/weight export + code: + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: eCPS structural entity ids, links, and household_weight export. + mp_legacy: + method: PolicyEngine US H5 structural id/link/weight export + code: + - path: src/microplex_us/policyengine/us.py + lines: 473-486 + symbol: POLICYENGINE_US_STRUCTURAL_EXPORT_COLUMNS + mp_spec: + method: exporter structural entity/link column + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Structural columns must be asserted by strict stage/export manifests. + immigration_status_str: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + in_nyc: + entity: household + role: geography_export_contract + temporary: true + ecps: + method: eCPS geography assignment/export encoding + code: + - path: policyengine_us_data/storage/enhanced_cps/clone_and_assign.py + lines: 55,114-151 + symbol: assign_random_geography + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 269-289 + summary: Fixed-width block/tract/county export encoding. + notes: eCPS emits fixed-width byte strings for block/tract/county geographies. + mp_legacy: + method: Microplex census block assignment/export derivation + code: + - path: src/microplex_us/pipelines/us.py + lines: 491-587,3999-4023 + symbol: _attach_household_census_geographies / _ensure_household_in_nyc + - path: src/microplex_us/geography.py + lines: 403-527,550-647 + symbol: BlockGeography + notes: Manifest flagged possible encoding/export divergence; exporter must preserve eCPS-compatible widths. + mp_spec: + method: GeoCloner/exporter derived geography with eCPS-compatible encoding + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration for future GeoCloner/exporter rules. + investment_income_elected_form_4952: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + investment_interest_expense: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: 'Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Current + spec inherited this from the legacy PUF surface; verify whether eCPS treats it as formula/default before promoting. + Needs review: current MP spec inherited this from legacy PUF surface, but the manifest questions eCPS formula/default + treatment.' + is_blind: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + is_computer_scientist: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + is_disabled: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + is_enrolled_at_least_half_time_for_american_opportunity_credit: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + is_executive_administrative_professional: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + is_farmer_fisher: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + is_female: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + is_full_time_college_student: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + is_hispanic: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + is_household_head: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + is_military: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + is_paid_hourly: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + is_pregnant: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + is_pursuing_credential_for_american_opportunity_credit: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + is_separated: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + is_surviving_spouse: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + is_tipped_occupation: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + is_union_member_or_covered: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + is_unmarried_partner_of_household_head: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + is_wic_at_nutritional_risk: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + keogh_distributions: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + long_term_capital_gains_before_response: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + long_term_capital_gains_on_collectibles: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + marital_unit_id: + entity: person + role: structural_export_contract + temporary: true + ecps: + method: PolicyEngine H5 structural id/link/weight export + code: + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: eCPS structural entity ids, links, and household_weight export. + mp_legacy: + method: PolicyEngine US H5 structural id/link/weight export + code: + - path: src/microplex_us/policyengine/us.py + lines: 473-486 + symbol: POLICYENGINE_US_STRUCTURAL_EXPORT_COLUMNS + mp_spec: + method: exporter structural entity/link column + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Structural columns must be asserted by strict stage/export manifests. + meets_ssi_disability_criteria: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + miscellaneous_income: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + net_worth: + entity: household + role: net_worth_open_decision + temporary: true + ecps: + method: direct SCF QRF imputation from SCF networth + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 44-48,668-814,701-702 + symbol: NET_WORTH_VARIABLES / impute_scf_variables + notes: Incumbent eCPS imputes net_worth directly, not as a component sum. + mp_legacy: + method: direct SCF net_worth support with export default fallback + code: + - path: src/microplex_us/pipelines/us.py + lines: 8398-8400 + summary: Legacy rebuild requests net_worth with SCF support variables. + - path: src/microplex_us/policyengine/us.py + lines: 437,593 + summary: Net worth is in the export set and has a legacy default fallback. + notes: Claude handoff found both incumbents direct-impute net_worth; component derivation is new work. + mp_spec: + method: 'OPEN: direct SCF impute now, component-derived later only after component panel is complete' + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary variable provenance records Max/Claude decision point. + notes: Recommended low-risk path is direct SCF impute for replication; component-derived net_worth needs a complete + SCF asset/liability panel and separate validation. + non_qualified_dividend_income: + entity: person + role: puf_imputed + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF; CPS keep half may pass through unless explicitly overridden. + non_sch_d_capital_gains: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + other_health_insurance_premiums: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: 'Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Current + spec inherited this from the legacy PUF surface; verify whether eCPS treats it as formula/default before promoting. + Needs review: current MP spec inherited this from legacy PUF surface, but the manifest questions eCPS formula/default + treatment.' + other_medical_expenses: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + other_type_retirement_account_distributions: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + over_the_counter_health_expenses: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + own_children_in_household: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + partnership_s_corp_income: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + partnership_s_corp_income_would_be_qualified: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + partnership_se_income: + entity: person + role: puf_imputed + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF; CPS keep half may pass through unless explicitly overridden. + person_family_id: + entity: person + role: structural_export_contract + temporary: true + ecps: + method: PolicyEngine H5 structural id/link/weight export + code: + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: eCPS structural entity ids, links, and household_weight export. + mp_legacy: + method: PolicyEngine US H5 structural id/link/weight export + code: + - path: src/microplex_us/policyengine/us.py + lines: 473-486 + symbol: POLICYENGINE_US_STRUCTURAL_EXPORT_COLUMNS + mp_spec: + method: exporter structural entity/link column + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Structural columns must be asserted by strict stage/export manifests. + person_household_id: + entity: person + role: structural_export_contract + temporary: true + ecps: + method: PolicyEngine H5 structural id/link/weight export + code: + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: eCPS structural entity ids, links, and household_weight export. + mp_legacy: + method: PolicyEngine US H5 structural id/link/weight export + code: + - path: src/microplex_us/policyengine/us.py + lines: 473-486 + symbol: POLICYENGINE_US_STRUCTURAL_EXPORT_COLUMNS + mp_spec: + method: exporter structural entity/link column + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Structural columns must be asserted by strict stage/export manifests. + person_id: + entity: person + role: structural_export_contract + temporary: true + ecps: + method: PolicyEngine H5 structural id/link/weight export + code: + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: eCPS structural entity ids, links, and household_weight export. + mp_legacy: + method: PolicyEngine US H5 structural id/link/weight export + code: + - path: src/microplex_us/policyengine/us.py + lines: 473-486 + symbol: POLICYENGINE_US_STRUCTURAL_EXPORT_COLUMNS + mp_spec: + method: exporter structural entity/link column + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Structural columns must be asserted by strict stage/export manifests. + person_marital_unit_id: + entity: person + role: structural_export_contract + temporary: true + ecps: + method: PolicyEngine H5 structural id/link/weight export + code: + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: eCPS structural entity ids, links, and household_weight export. + mp_legacy: + method: PolicyEngine US H5 structural id/link/weight export + code: + - path: src/microplex_us/policyengine/us.py + lines: 473-486 + symbol: POLICYENGINE_US_STRUCTURAL_EXPORT_COLUMNS + mp_spec: + method: exporter structural entity/link column + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Structural columns must be asserted by strict stage/export manifests. + person_spm_unit_id: + entity: person + role: structural_export_contract + temporary: true + ecps: + method: PolicyEngine H5 structural id/link/weight export + code: + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: eCPS structural entity ids, links, and household_weight export. + mp_legacy: + method: PolicyEngine US H5 structural id/link/weight export + code: + - path: src/microplex_us/policyengine/us.py + lines: 473-486 + symbol: POLICYENGINE_US_STRUCTURAL_EXPORT_COLUMNS + mp_spec: + method: exporter structural entity/link column + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Structural columns must be asserted by strict stage/export manifests. + person_tax_unit_id: + entity: person + role: structural_export_contract + temporary: true + ecps: + method: PolicyEngine H5 structural id/link/weight export + code: + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: eCPS structural entity ids, links, and household_weight export. + mp_legacy: + method: PolicyEngine US H5 structural id/link/weight export + code: + - path: src/microplex_us/policyengine/us.py + lines: 473-486 + symbol: POLICYENGINE_US_STRUCTURAL_EXPORT_COLUMNS + mp_spec: + method: exporter structural entity/link column + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Structural columns must be asserted by strict stage/export manifests. + pre_subsidy_rent: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + previous_year_income_available: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + qualified_bdc_income: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + qualified_dividend_income: + entity: person + role: puf_imputed + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF; CPS keep half may pass through unless explicitly overridden. + qualified_reit_and_ptp_income: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + qualified_tuition_expenses: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + real_estate_taxes: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + receives_housing_assistance: + entity: spm_unit + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + receives_wic: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + regular_ira_distributions: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + rental_income: + entity: person + role: puf_imputed + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + notes: MP legacy keeps CPS values for same-name non-overridden columns; this is explicitly called out for known collisions. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: 'Known keep-CPS collision: the synthetic half must synthesize this variable and must not inherit the CPS canonical + value. Known keep-CPS collision from Claude manifest; synthetic half must not keep CPS canonical value.' + rental_income_would_be_qualified: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + reported_has_champva_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + reported_has_chip_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + reported_has_direct_purchase_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + reported_has_employer_sponsored_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + reported_has_indian_health_service_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + reported_has_marketplace_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + reported_has_means_tested_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + reported_has_medicaid_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + reported_has_medicare_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + reported_has_multiple_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + reported_has_non_marketplace_direct_purchase_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + reported_has_other_means_tested_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + reported_has_private_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + reported_has_public_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + reported_has_subsidized_marketplace_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + reported_has_tricare_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + reported_has_unsubsidized_marketplace_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + reported_has_va_health_coverage_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + reported_is_insured_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + reported_is_uninsured_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + reported_owns_employer_sponsored_health_insurance_at_interview: + entity: person + role: reported_health_coverage_contract + temporary: true + ecps: + method: CPS current-health coverage recode/passthrough + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: eCPS CPS ASEC current-health coverage mappings and recodes. + mp_legacy: + method: CPS current-health coverage recode or default fallback + code: + - path: src/microplex_us/data_sources/cps.py + lines: 43-87,1540-1650,2293-2298 + symbol: CURRENT_HEALTH_COVERAGE_REPORTED_VAR_MAP / CURRENT_HEALTH_COVERAGE_RULE_INPUT_ALIAS_MAP + - path: src/microplex_us/policyengine/us.py + lines: 604-623,752-775 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + mp_spec: + method: passthrough/derive from CPS current-health coverage source columns + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; SourceRegistry CPS loader should own the concrete recode. + notes: Subagent audit flagged this family as under-specified; all required reported_* leaves are now contract-gated + in variables. + roth_401k_contributions: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + roth_401k_contributions_desired: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + roth_ira_contributions: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + roth_ira_contributions_desired: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + roth_ira_distributions: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + salt_refund_income: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + scf_business_equity: + entity: person + role: scf_component_contract + temporary: true + ecps: + method: SCF balance-sheet component imputation/reconciliation + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 668-814 + symbol: impute_scf_variables + summary: eCPS SCF donor imputation path. + - path: policyengine_us_data/utils/asset_imputation.py + lines: 40-86,373-490 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / NET_WORTH_COMPONENT_SIGNS / rebalance_scf_net_worth_components + mp_legacy: + method: SCF component leaf default/export support + code: + - path: src/microplex_us/variables.py + lines: 575-606 + symbol: SCF_NET_WORTH_COMPONENT_LEAVES + - path: src/microplex_us/asset_reconciliation.py + lines: 38-126 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / compute_net_worth_from_components + - path: src/microplex_us/policyengine/us.py + lines: 524-542,725-743 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + notes: Legacy export can still fall back to zero; final spec needs source-imputed component leaves, not default-only + parity. + mp_spec: + method: source=scf component donor imputation plus net-worth reconciliation + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary contract declaration; concrete SCF block still needs declarative SourceRegistry wiring. + notes: Required because eCPS persists these 19 leaves. Do not treat line-count column parity as enough if these stay + default-only. + scf_cash_value_life_insurance: + entity: person + role: scf_component_contract + temporary: true + ecps: + method: SCF balance-sheet component imputation/reconciliation + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 668-814 + symbol: impute_scf_variables + summary: eCPS SCF donor imputation path. + - path: policyengine_us_data/utils/asset_imputation.py + lines: 40-86,373-490 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / NET_WORTH_COMPONENT_SIGNS / rebalance_scf_net_worth_components + mp_legacy: + method: SCF component leaf default/export support + code: + - path: src/microplex_us/variables.py + lines: 575-606 + symbol: SCF_NET_WORTH_COMPONENT_LEAVES + - path: src/microplex_us/asset_reconciliation.py + lines: 38-126 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / compute_net_worth_from_components + - path: src/microplex_us/policyengine/us.py + lines: 524-542,725-743 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + notes: Legacy export can still fall back to zero; final spec needs source-imputed component leaves, not default-only + parity. + mp_spec: + method: source=scf component donor imputation plus net-worth reconciliation + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary contract declaration; concrete SCF block still needs declarative SourceRegistry wiring. + notes: Required because eCPS persists these 19 leaves. Do not treat line-count column parity as enough if these stay + default-only. + scf_certificates_of_deposit: + entity: person + role: scf_component_contract + temporary: true + ecps: + method: SCF balance-sheet component imputation/reconciliation + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 668-814 + symbol: impute_scf_variables + summary: eCPS SCF donor imputation path. + - path: policyengine_us_data/utils/asset_imputation.py + lines: 40-86,373-490 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / NET_WORTH_COMPONENT_SIGNS / rebalance_scf_net_worth_components + mp_legacy: + method: SCF component leaf default/export support + code: + - path: src/microplex_us/variables.py + lines: 575-606 + symbol: SCF_NET_WORTH_COMPONENT_LEAVES + - path: src/microplex_us/asset_reconciliation.py + lines: 38-126 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / compute_net_worth_from_components + - path: src/microplex_us/policyengine/us.py + lines: 524-542,725-743 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + notes: Legacy export can still fall back to zero; final spec needs source-imputed component leaves, not default-only + parity. + mp_spec: + method: source=scf component donor imputation plus net-worth reconciliation + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary contract declaration; concrete SCF block still needs declarative SourceRegistry wiring. + notes: Required because eCPS persists these 19 leaves. Do not treat line-count column parity as enough if these stay + default-only. + scf_credit_card_debt: + entity: person + role: scf_component_contract + temporary: true + ecps: + method: SCF balance-sheet component imputation/reconciliation + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 668-814 + symbol: impute_scf_variables + summary: eCPS SCF donor imputation path. + - path: policyengine_us_data/utils/asset_imputation.py + lines: 40-86,373-490 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / NET_WORTH_COMPONENT_SIGNS / rebalance_scf_net_worth_components + mp_legacy: + method: SCF component leaf default/export support + code: + - path: src/microplex_us/variables.py + lines: 575-606 + symbol: SCF_NET_WORTH_COMPONENT_LEAVES + - path: src/microplex_us/asset_reconciliation.py + lines: 38-126 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / compute_net_worth_from_components + - path: src/microplex_us/policyengine/us.py + lines: 524-542,725-743 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + notes: Legacy export can still fall back to zero; final spec needs source-imputed component leaves, not default-only + parity. + mp_spec: + method: source=scf component donor imputation plus net-worth reconciliation + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary contract declaration; concrete SCF block still needs declarative SourceRegistry wiring. + notes: Required because eCPS persists these 19 leaves. Do not treat line-count column parity as enough if these stay + default-only. + scf_mortgage_debt: + entity: person + role: scf_component_contract + temporary: true + ecps: + method: SCF balance-sheet component imputation/reconciliation + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 668-814 + symbol: impute_scf_variables + summary: eCPS SCF donor imputation path. + - path: policyengine_us_data/utils/asset_imputation.py + lines: 40-86,373-490 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / NET_WORTH_COMPONENT_SIGNS / rebalance_scf_net_worth_components + mp_legacy: + method: SCF component leaf default/export support + code: + - path: src/microplex_us/variables.py + lines: 575-606 + symbol: SCF_NET_WORTH_COMPONENT_LEAVES + - path: src/microplex_us/asset_reconciliation.py + lines: 38-126 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / compute_net_worth_from_components + - path: src/microplex_us/policyengine/us.py + lines: 524-542,725-743 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + notes: Legacy export can still fall back to zero; final spec needs source-imputed component leaves, not default-only + parity. + mp_spec: + method: source=scf component donor imputation plus net-worth reconciliation + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary contract declaration; concrete SCF block still needs declarative SourceRegistry wiring. + notes: Required because eCPS persists these 19 leaves. Do not treat line-count column parity as enough if these stay + default-only. + scf_nonresidential_real_estate_equity: + entity: person + role: scf_component_contract + temporary: true + ecps: + method: SCF balance-sheet component imputation/reconciliation + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 668-814 + symbol: impute_scf_variables + summary: eCPS SCF donor imputation path. + - path: policyengine_us_data/utils/asset_imputation.py + lines: 40-86,373-490 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / NET_WORTH_COMPONENT_SIGNS / rebalance_scf_net_worth_components + mp_legacy: + method: SCF component leaf default/export support + code: + - path: src/microplex_us/variables.py + lines: 575-606 + symbol: SCF_NET_WORTH_COMPONENT_LEAVES + - path: src/microplex_us/asset_reconciliation.py + lines: 38-126 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / compute_net_worth_from_components + - path: src/microplex_us/policyengine/us.py + lines: 524-542,725-743 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + notes: Legacy export can still fall back to zero; final spec needs source-imputed component leaves, not default-only + parity. + mp_spec: + method: source=scf component donor imputation plus net-worth reconciliation + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary contract declaration; concrete SCF block still needs declarative SourceRegistry wiring. + notes: Required because eCPS persists these 19 leaves. Do not treat line-count column parity as enough if these stay + default-only. + scf_other_debt: + entity: person + role: scf_component_contract + temporary: true + ecps: + method: SCF balance-sheet component imputation/reconciliation + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 668-814 + symbol: impute_scf_variables + summary: eCPS SCF donor imputation path. + - path: policyengine_us_data/utils/asset_imputation.py + lines: 40-86,373-490 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / NET_WORTH_COMPONENT_SIGNS / rebalance_scf_net_worth_components + mp_legacy: + method: SCF component leaf default/export support + code: + - path: src/microplex_us/variables.py + lines: 575-606 + symbol: SCF_NET_WORTH_COMPONENT_LEAVES + - path: src/microplex_us/asset_reconciliation.py + lines: 38-126 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / compute_net_worth_from_components + - path: src/microplex_us/policyengine/us.py + lines: 524-542,725-743 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + notes: Legacy export can still fall back to zero; final spec needs source-imputed component leaves, not default-only + parity. + mp_spec: + method: source=scf component donor imputation plus net-worth reconciliation + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary contract declaration; concrete SCF block still needs declarative SourceRegistry wiring. + notes: Required because eCPS persists these 19 leaves. Do not treat line-count column parity as enough if these stay + default-only. + scf_other_financial_assets: + entity: person + role: scf_component_contract + temporary: true + ecps: + method: SCF balance-sheet component imputation/reconciliation + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 668-814 + symbol: impute_scf_variables + summary: eCPS SCF donor imputation path. + - path: policyengine_us_data/utils/asset_imputation.py + lines: 40-86,373-490 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / NET_WORTH_COMPONENT_SIGNS / rebalance_scf_net_worth_components + mp_legacy: + method: SCF component leaf default/export support + code: + - path: src/microplex_us/variables.py + lines: 575-606 + symbol: SCF_NET_WORTH_COMPONENT_LEAVES + - path: src/microplex_us/asset_reconciliation.py + lines: 38-126 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / compute_net_worth_from_components + - path: src/microplex_us/policyengine/us.py + lines: 524-542,725-743 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + notes: Legacy export can still fall back to zero; final spec needs source-imputed component leaves, not default-only + parity. + mp_spec: + method: source=scf component donor imputation plus net-worth reconciliation + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary contract declaration; concrete SCF block still needs declarative SourceRegistry wiring. + notes: Required because eCPS persists these 19 leaves. Do not treat line-count column parity as enough if these stay + default-only. + scf_other_installment_debt: + entity: person + role: scf_component_contract + temporary: true + ecps: + method: SCF balance-sheet component imputation/reconciliation + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 668-814 + symbol: impute_scf_variables + summary: eCPS SCF donor imputation path. + - path: policyengine_us_data/utils/asset_imputation.py + lines: 40-86,373-490 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / NET_WORTH_COMPONENT_SIGNS / rebalance_scf_net_worth_components + mp_legacy: + method: SCF component leaf default/export support + code: + - path: src/microplex_us/variables.py + lines: 575-606 + symbol: SCF_NET_WORTH_COMPONENT_LEAVES + - path: src/microplex_us/asset_reconciliation.py + lines: 38-126 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / compute_net_worth_from_components + - path: src/microplex_us/policyengine/us.py + lines: 524-542,725-743 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + notes: Legacy export can still fall back to zero; final spec needs source-imputed component leaves, not default-only + parity. + mp_spec: + method: source=scf component donor imputation plus net-worth reconciliation + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary contract declaration; concrete SCF block still needs declarative SourceRegistry wiring. + notes: Required because eCPS persists these 19 leaves. Do not treat line-count column parity as enough if these stay + default-only. + scf_other_lines_of_credit: + entity: person + role: scf_component_contract + temporary: true + ecps: + method: SCF balance-sheet component imputation/reconciliation + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 668-814 + symbol: impute_scf_variables + summary: eCPS SCF donor imputation path. + - path: policyengine_us_data/utils/asset_imputation.py + lines: 40-86,373-490 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / NET_WORTH_COMPONENT_SIGNS / rebalance_scf_net_worth_components + mp_legacy: + method: SCF component leaf default/export support + code: + - path: src/microplex_us/variables.py + lines: 575-606 + symbol: SCF_NET_WORTH_COMPONENT_LEAVES + - path: src/microplex_us/asset_reconciliation.py + lines: 38-126 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / compute_net_worth_from_components + - path: src/microplex_us/policyengine/us.py + lines: 524-542,725-743 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + notes: Legacy export can still fall back to zero; final spec needs source-imputed component leaves, not default-only + parity. + mp_spec: + method: source=scf component donor imputation plus net-worth reconciliation + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary contract declaration; concrete SCF block still needs declarative SourceRegistry wiring. + notes: Required because eCPS persists these 19 leaves. Do not treat line-count column parity as enough if these stay + default-only. + scf_other_managed_assets: + entity: person + role: scf_component_contract + temporary: true + ecps: + method: SCF balance-sheet component imputation/reconciliation + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 668-814 + symbol: impute_scf_variables + summary: eCPS SCF donor imputation path. + - path: policyengine_us_data/utils/asset_imputation.py + lines: 40-86,373-490 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / NET_WORTH_COMPONENT_SIGNS / rebalance_scf_net_worth_components + mp_legacy: + method: SCF component leaf default/export support + code: + - path: src/microplex_us/variables.py + lines: 575-606 + symbol: SCF_NET_WORTH_COMPONENT_LEAVES + - path: src/microplex_us/asset_reconciliation.py + lines: 38-126 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / compute_net_worth_from_components + - path: src/microplex_us/policyengine/us.py + lines: 524-542,725-743 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + notes: Legacy export can still fall back to zero; final spec needs source-imputed component leaves, not default-only + parity. + mp_spec: + method: source=scf component donor imputation plus net-worth reconciliation + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary contract declaration; concrete SCF block still needs declarative SourceRegistry wiring. + notes: Required because eCPS persists these 19 leaves. Do not treat line-count column parity as enough if these stay + default-only. + scf_other_nonfinancial_assets: + entity: person + role: scf_component_contract + temporary: true + ecps: + method: SCF balance-sheet component imputation/reconciliation + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 668-814 + symbol: impute_scf_variables + summary: eCPS SCF donor imputation path. + - path: policyengine_us_data/utils/asset_imputation.py + lines: 40-86,373-490 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / NET_WORTH_COMPONENT_SIGNS / rebalance_scf_net_worth_components + mp_legacy: + method: SCF component leaf default/export support + code: + - path: src/microplex_us/variables.py + lines: 575-606 + symbol: SCF_NET_WORTH_COMPONENT_LEAVES + - path: src/microplex_us/asset_reconciliation.py + lines: 38-126 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / compute_net_worth_from_components + - path: src/microplex_us/policyengine/us.py + lines: 524-542,725-743 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + notes: Legacy export can still fall back to zero; final spec needs source-imputed component leaves, not default-only + parity. + mp_spec: + method: source=scf component donor imputation plus net-worth reconciliation + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary contract declaration; concrete SCF block still needs declarative SourceRegistry wiring. + notes: Required because eCPS persists these 19 leaves. Do not treat line-count column parity as enough if these stay + default-only. + scf_other_residential_debt: + entity: person + role: scf_component_contract + temporary: true + ecps: + method: SCF balance-sheet component imputation/reconciliation + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 668-814 + symbol: impute_scf_variables + summary: eCPS SCF donor imputation path. + - path: policyengine_us_data/utils/asset_imputation.py + lines: 40-86,373-490 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / NET_WORTH_COMPONENT_SIGNS / rebalance_scf_net_worth_components + mp_legacy: + method: SCF component leaf default/export support + code: + - path: src/microplex_us/variables.py + lines: 575-606 + symbol: SCF_NET_WORTH_COMPONENT_LEAVES + - path: src/microplex_us/asset_reconciliation.py + lines: 38-126 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / compute_net_worth_from_components + - path: src/microplex_us/policyengine/us.py + lines: 524-542,725-743 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + notes: Legacy export can still fall back to zero; final spec needs source-imputed component leaves, not default-only + parity. + mp_spec: + method: source=scf component donor imputation plus net-worth reconciliation + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary contract declaration; concrete SCF block still needs declarative SourceRegistry wiring. + notes: Required because eCPS persists these 19 leaves. Do not treat line-count column parity as enough if these stay + default-only. + scf_other_residential_real_estate: + entity: person + role: scf_component_contract + temporary: true + ecps: + method: SCF balance-sheet component imputation/reconciliation + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 668-814 + symbol: impute_scf_variables + summary: eCPS SCF donor imputation path. + - path: policyengine_us_data/utils/asset_imputation.py + lines: 40-86,373-490 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / NET_WORTH_COMPONENT_SIGNS / rebalance_scf_net_worth_components + mp_legacy: + method: SCF component leaf default/export support + code: + - path: src/microplex_us/variables.py + lines: 575-606 + symbol: SCF_NET_WORTH_COMPONENT_LEAVES + - path: src/microplex_us/asset_reconciliation.py + lines: 38-126 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / compute_net_worth_from_components + - path: src/microplex_us/policyengine/us.py + lines: 524-542,725-743 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + notes: Legacy export can still fall back to zero; final spec needs source-imputed component leaves, not default-only + parity. + mp_spec: + method: source=scf component donor imputation plus net-worth reconciliation + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary contract declaration; concrete SCF block still needs declarative SourceRegistry wiring. + notes: Required because eCPS persists these 19 leaves. Do not treat line-count column parity as enough if these stay + default-only. + scf_primary_residence_value: + entity: person + role: scf_component_contract + temporary: true + ecps: + method: SCF balance-sheet component imputation/reconciliation + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 668-814 + symbol: impute_scf_variables + summary: eCPS SCF donor imputation path. + - path: policyengine_us_data/utils/asset_imputation.py + lines: 40-86,373-490 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / NET_WORTH_COMPONENT_SIGNS / rebalance_scf_net_worth_components + mp_legacy: + method: SCF component leaf default/export support + code: + - path: src/microplex_us/variables.py + lines: 575-606 + symbol: SCF_NET_WORTH_COMPONENT_LEAVES + - path: src/microplex_us/asset_reconciliation.py + lines: 38-126 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / compute_net_worth_from_components + - path: src/microplex_us/policyengine/us.py + lines: 524-542,725-743 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + notes: Legacy export can still fall back to zero; final spec needs source-imputed component leaves, not default-only + parity. + mp_spec: + method: source=scf component donor imputation plus net-worth reconciliation + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary contract declaration; concrete SCF block still needs declarative SourceRegistry wiring. + notes: Required because eCPS persists these 19 leaves. Do not treat line-count column parity as enough if these stay + default-only. + scf_retirement_assets: + entity: person + role: scf_component_contract + temporary: true + ecps: + method: SCF balance-sheet component imputation/reconciliation + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 668-814 + symbol: impute_scf_variables + summary: eCPS SCF donor imputation path. + - path: policyengine_us_data/utils/asset_imputation.py + lines: 40-86,373-490 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / NET_WORTH_COMPONENT_SIGNS / rebalance_scf_net_worth_components + mp_legacy: + method: SCF component leaf default/export support + code: + - path: src/microplex_us/variables.py + lines: 575-606 + symbol: SCF_NET_WORTH_COMPONENT_LEAVES + - path: src/microplex_us/asset_reconciliation.py + lines: 38-126 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / compute_net_worth_from_components + - path: src/microplex_us/policyengine/us.py + lines: 524-542,725-743 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + notes: Legacy export can still fall back to zero; final spec needs source-imputed component leaves, not default-only + parity. + mp_spec: + method: source=scf component donor imputation plus net-worth reconciliation + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary contract declaration; concrete SCF block still needs declarative SourceRegistry wiring. + notes: Required because eCPS persists these 19 leaves. Do not treat line-count column parity as enough if these stay + default-only. + scf_savings_bonds: + entity: person + role: scf_component_contract + temporary: true + ecps: + method: SCF balance-sheet component imputation/reconciliation + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 668-814 + symbol: impute_scf_variables + summary: eCPS SCF donor imputation path. + - path: policyengine_us_data/utils/asset_imputation.py + lines: 40-86,373-490 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / NET_WORTH_COMPONENT_SIGNS / rebalance_scf_net_worth_components + mp_legacy: + method: SCF component leaf default/export support + code: + - path: src/microplex_us/variables.py + lines: 575-606 + symbol: SCF_NET_WORTH_COMPONENT_LEAVES + - path: src/microplex_us/asset_reconciliation.py + lines: 38-126 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / compute_net_worth_from_components + - path: src/microplex_us/policyengine/us.py + lines: 524-542,725-743 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + notes: Legacy export can still fall back to zero; final spec needs source-imputed component leaves, not default-only + parity. + mp_spec: + method: source=scf component donor imputation plus net-worth reconciliation + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary contract declaration; concrete SCF block still needs declarative SourceRegistry wiring. + notes: Required because eCPS persists these 19 leaves. Do not treat line-count column parity as enough if these stay + default-only. + scf_student_loan_debt: + entity: person + role: scf_component_contract + temporary: true + ecps: + method: SCF balance-sheet component imputation/reconciliation + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 668-814 + symbol: impute_scf_variables + summary: eCPS SCF donor imputation path. + - path: policyengine_us_data/utils/asset_imputation.py + lines: 40-86,373-490 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / NET_WORTH_COMPONENT_SIGNS / rebalance_scf_net_worth_components + mp_legacy: + method: SCF component leaf default/export support + code: + - path: src/microplex_us/variables.py + lines: 575-606 + symbol: SCF_NET_WORTH_COMPONENT_LEAVES + - path: src/microplex_us/asset_reconciliation.py + lines: 38-126 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / compute_net_worth_from_components + - path: src/microplex_us/policyengine/us.py + lines: 524-542,725-743 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + notes: Legacy export can still fall back to zero; final spec needs source-imputed component leaves, not default-only + parity. + mp_spec: + method: source=scf component donor imputation plus net-worth reconciliation + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary contract declaration; concrete SCF block still needs declarative SourceRegistry wiring. + notes: Required because eCPS persists these 19 leaves. Do not treat line-count column parity as enough if these stay + default-only. + scf_vehicle_installment_debt: + entity: person + role: scf_component_contract + temporary: true + ecps: + method: SCF balance-sheet component imputation/reconciliation + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 668-814 + symbol: impute_scf_variables + summary: eCPS SCF donor imputation path. + - path: policyengine_us_data/utils/asset_imputation.py + lines: 40-86,373-490 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / NET_WORTH_COMPONENT_SIGNS / rebalance_scf_net_worth_components + mp_legacy: + method: SCF component leaf default/export support + code: + - path: src/microplex_us/variables.py + lines: 575-606 + symbol: SCF_NET_WORTH_COMPONENT_LEAVES + - path: src/microplex_us/asset_reconciliation.py + lines: 38-126 + symbol: SCF_NET_WORTH_COMPONENT_TARGETS / compute_net_worth_from_components + - path: src/microplex_us/policyengine/us.py + lines: 524-542,725-743 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + notes: Legacy export can still fall back to zero; final spec needs source-imputed component leaves, not default-only + parity. + mp_spec: + method: source=scf component donor imputation plus net-worth reconciliation + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary contract declaration; concrete SCF block still needs declarative SourceRegistry wiring. + notes: Required because eCPS persists these 19 leaves. Do not treat line-count column parity as enough if these stay + default-only. + second_home_mortgage_balance: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + second_home_mortgage_interest: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + second_home_mortgage_origination_year: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + selected_marketplace_plan_benchmark_ratio: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + self_employed_pension_contributions: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + self_employed_pension_contributions_desired: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + self_employment_income_before_lsr: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + self_employment_income_last_year: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + self_employment_income_would_be_qualified: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + short_term_capital_gains: + entity: person + role: puf_imputed + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF; CPS keep half may pass through unless explicitly overridden. + social_security_dependents: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + social_security_disability: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + social_security_retirement: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + social_security_survivors: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + spm_unit_capped_work_childcare_expenses: + entity: spm_unit + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + spm_unit_energy_subsidy: + entity: spm_unit + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + spm_unit_id: + entity: spm_unit + role: structural_export_contract + temporary: true + ecps: + method: PolicyEngine H5 structural id/link/weight export + code: + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: eCPS structural entity ids, links, and household_weight export. + mp_legacy: + method: PolicyEngine US H5 structural id/link/weight export + code: + - path: src/microplex_us/policyengine/us.py + lines: 473-486 + symbol: POLICYENGINE_US_STRUCTURAL_EXPORT_COLUMNS + mp_spec: + method: exporter structural entity/link column + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Structural columns must be asserted by strict stage/export manifests. + spm_unit_pre_subsidy_childcare_expenses: + entity: spm_unit + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + spm_unit_tenure_type: + entity: spm_unit + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + ssn_card_type: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + sstb_self_employment_income_before_lsr: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + sstb_self_employment_income_would_be_qualified: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + sstb_unadjusted_basis_qualified_property: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + sstb_w2_wages_from_qualified_business: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + state_fips: + entity: household + role: geography_export_contract + temporary: true + ecps: + method: eCPS geography assignment/export encoding + code: + - path: policyengine_us_data/storage/enhanced_cps/clone_and_assign.py + lines: 55,114-151 + symbol: assign_random_geography + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 269-289 + summary: Fixed-width block/tract/county export encoding. + notes: eCPS emits fixed-width byte strings for block/tract/county geographies. + mp_legacy: + method: Microplex census block assignment/export derivation + code: + - path: src/microplex_us/pipelines/us.py + lines: 491-587,3999-4023 + symbol: _attach_household_census_geographies / _ensure_household_in_nyc + - path: src/microplex_us/geography.py + lines: 403-527,550-647 + symbol: BlockGeography + notes: Manifest flagged possible encoding/export divergence; exporter must preserve eCPS-compatible widths. + mp_spec: + method: GeoCloner/exporter derived geography with eCPS-compatible encoding + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration for future GeoCloner/exporter rules. + stock_assets: + entity: person + role: sipp_asset_source_imputed + temporary: true + ecps: + method: SIPP asset donor QRF imputation + code: + - path: policyengine_us_data/calibration/source_impute.py + lines: 37-42,562-657 + symbol: SIPP_ASSETS_VARIABLES / impute_sipp_assets + mp_legacy: + method: SIPP donor survey/source-impute target + code: + - path: src/microplex_us/pe_source_impute_specs.py + summary: MP legacy PE-source donor block specs. + - path: src/microplex_us/data_sources/donor_surveys.py + lines: 1236-1291 + symbol: SIPPSourceProvider / SIPPAssetsSourceProvider + mp_spec: + method: source=sipp asset donor imputation + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration for future SourceRegistry-backed source-imputation step. + strike_benefits: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + student_loan_interest: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + survivor_benefits: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + takes_up_aca_if_eligible: + entity: person + role: takeup_input_contract + temporary: true + ecps: + method: PolicyEngine takeup input/default or eCPS reported-benefit driver + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Enhanced CPS benefit/takeup source inputs and defaulted takeup leaves. + mp_legacy: + method: deterministic Microplex takeup helper/default + code: + - path: src/microplex_us/policyengine/takeup.py + lines: 14-115,171-253,694-728 + summary: Default takeup rates and feature families. + - path: src/microplex_us/pipelines/us.py + lines: 9682-10337 + summary: Legacy pipeline materialization of deterministic takeup inputs. + mp_spec: + method: rerandomized_takeup handler or deterministic takeup transform + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration until takeup transforms are fully serialized. + notes: Must be explicit because forbidden *_reported takeup columns are not substitutes for required takeup input leaves. + takes_up_dc_ptc: + entity: person + role: takeup_input_contract + temporary: true + ecps: + method: PolicyEngine takeup input/default or eCPS reported-benefit driver + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Enhanced CPS benefit/takeup source inputs and defaulted takeup leaves. + mp_legacy: + method: deterministic Microplex takeup helper/default + code: + - path: src/microplex_us/policyengine/takeup.py + lines: 14-115,171-253,694-728 + summary: Default takeup rates and feature families. + - path: src/microplex_us/pipelines/us.py + lines: 9682-10337 + summary: Legacy pipeline materialization of deterministic takeup inputs. + mp_spec: + method: rerandomized_takeup handler or deterministic takeup transform + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration until takeup transforms are fully serialized. + notes: Must be explicit because forbidden *_reported takeup columns are not substitutes for required takeup input leaves. + takes_up_early_head_start_if_eligible: + entity: person + role: takeup_input_contract + temporary: true + ecps: + method: PolicyEngine takeup input/default or eCPS reported-benefit driver + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Enhanced CPS benefit/takeup source inputs and defaulted takeup leaves. + mp_legacy: + method: deterministic Microplex takeup helper/default + code: + - path: src/microplex_us/policyengine/takeup.py + lines: 14-115,171-253,694-728 + summary: Default takeup rates and feature families. + - path: src/microplex_us/pipelines/us.py + lines: 9682-10337 + summary: Legacy pipeline materialization of deterministic takeup inputs. + mp_spec: + method: rerandomized_takeup handler or deterministic takeup transform + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration until takeup transforms are fully serialized. + notes: Must be explicit because forbidden *_reported takeup columns are not substitutes for required takeup input leaves. + takes_up_eitc: + entity: tax_unit + role: takeup_input_contract + temporary: true + ecps: + method: PolicyEngine takeup input/default or eCPS reported-benefit driver + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Enhanced CPS benefit/takeup source inputs and defaulted takeup leaves. + mp_legacy: + method: deterministic Microplex takeup helper/default + code: + - path: src/microplex_us/policyengine/takeup.py + lines: 14-115,171-253,694-728 + summary: Default takeup rates and feature families. + - path: src/microplex_us/pipelines/us.py + lines: 9682-10337 + summary: Legacy pipeline materialization of deterministic takeup inputs. + mp_spec: + method: rerandomized_takeup handler or deterministic takeup transform + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration until takeup transforms are fully serialized. + notes: Must be explicit because forbidden *_reported takeup columns are not substitutes for required takeup input leaves. + takes_up_head_start_if_eligible: + entity: person + role: takeup_input_contract + temporary: true + ecps: + method: PolicyEngine takeup input/default or eCPS reported-benefit driver + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Enhanced CPS benefit/takeup source inputs and defaulted takeup leaves. + mp_legacy: + method: deterministic Microplex takeup helper/default + code: + - path: src/microplex_us/policyengine/takeup.py + lines: 14-115,171-253,694-728 + summary: Default takeup rates and feature families. + - path: src/microplex_us/pipelines/us.py + lines: 9682-10337 + summary: Legacy pipeline materialization of deterministic takeup inputs. + mp_spec: + method: rerandomized_takeup handler or deterministic takeup transform + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration until takeup transforms are fully serialized. + notes: Must be explicit because forbidden *_reported takeup columns are not substitutes for required takeup input leaves. + takes_up_housing_assistance_if_eligible: + entity: spm_unit + role: takeup_input_contract + temporary: true + ecps: + method: PolicyEngine takeup input/default or eCPS reported-benefit driver + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Enhanced CPS benefit/takeup source inputs and defaulted takeup leaves. + mp_legacy: + method: deterministic Microplex takeup helper/default + code: + - path: src/microplex_us/policyengine/takeup.py + lines: 14-115,171-253,694-728 + summary: Default takeup rates and feature families. + - path: src/microplex_us/pipelines/us.py + lines: 9682-10337 + summary: Legacy pipeline materialization of deterministic takeup inputs. + mp_spec: + method: rerandomized_takeup handler or deterministic takeup transform + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration until takeup transforms are fully serialized. + notes: Must be explicit because forbidden *_reported takeup columns are not substitutes for required takeup input leaves. + takes_up_medicaid_if_eligible: + entity: person + role: takeup_input_contract + temporary: true + ecps: + method: PolicyEngine takeup input/default or eCPS reported-benefit driver + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Enhanced CPS benefit/takeup source inputs and defaulted takeup leaves. + mp_legacy: + method: deterministic Microplex takeup helper/default + code: + - path: src/microplex_us/policyengine/takeup.py + lines: 14-115,171-253,694-728 + summary: Default takeup rates and feature families. + - path: src/microplex_us/pipelines/us.py + lines: 9682-10337 + summary: Legacy pipeline materialization of deterministic takeup inputs. + mp_spec: + method: rerandomized_takeup handler or deterministic takeup transform + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration until takeup transforms are fully serialized. + notes: Must be explicit because forbidden *_reported takeup columns are not substitutes for required takeup input leaves. + takes_up_medicare_if_eligible: + entity: person + role: takeup_input_contract + temporary: true + ecps: + method: PolicyEngine takeup input/default or eCPS reported-benefit driver + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Enhanced CPS benefit/takeup source inputs and defaulted takeup leaves. + mp_legacy: + method: deterministic Microplex takeup helper/default + code: + - path: src/microplex_us/policyengine/takeup.py + lines: 14-115,171-253,694-728 + summary: Default takeup rates and feature families. + - path: src/microplex_us/pipelines/us.py + lines: 9682-10337 + summary: Legacy pipeline materialization of deterministic takeup inputs. + mp_spec: + method: rerandomized_takeup handler or deterministic takeup transform + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration until takeup transforms are fully serialized. + notes: Must be explicit because forbidden *_reported takeup columns are not substitutes for required takeup input leaves. + takes_up_snap_if_eligible: + entity: person + role: takeup_input_contract + temporary: true + ecps: + method: PolicyEngine takeup input/default or eCPS reported-benefit driver + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Enhanced CPS benefit/takeup source inputs and defaulted takeup leaves. + mp_legacy: + method: deterministic Microplex takeup helper/default + code: + - path: src/microplex_us/policyengine/takeup.py + lines: 14-115,171-253,694-728 + summary: Default takeup rates and feature families. + - path: src/microplex_us/pipelines/us.py + lines: 9682-10337 + summary: Legacy pipeline materialization of deterministic takeup inputs. + mp_spec: + method: rerandomized_takeup handler or deterministic takeup transform + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration until takeup transforms are fully serialized. + notes: Must be explicit because forbidden *_reported takeup columns are not substitutes for required takeup input leaves. + takes_up_ssi_if_eligible: + entity: person + role: takeup_input_contract + temporary: true + ecps: + method: PolicyEngine takeup input/default or eCPS reported-benefit driver + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Enhanced CPS benefit/takeup source inputs and defaulted takeup leaves. + mp_legacy: + method: deterministic Microplex takeup helper/default + code: + - path: src/microplex_us/policyengine/takeup.py + lines: 14-115,171-253,694-728 + summary: Default takeup rates and feature families. + - path: src/microplex_us/pipelines/us.py + lines: 9682-10337 + summary: Legacy pipeline materialization of deterministic takeup inputs. + mp_spec: + method: rerandomized_takeup handler or deterministic takeup transform + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration until takeup transforms are fully serialized. + notes: Must be explicit because forbidden *_reported takeup columns are not substitutes for required takeup input leaves. + takes_up_tanf_if_eligible: + entity: person + role: takeup_input_contract + temporary: true + ecps: + method: PolicyEngine takeup input/default or eCPS reported-benefit driver + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Enhanced CPS benefit/takeup source inputs and defaulted takeup leaves. + mp_legacy: + method: deterministic Microplex takeup helper/default + code: + - path: src/microplex_us/policyengine/takeup.py + lines: 14-115,171-253,694-728 + summary: Default takeup rates and feature families. + - path: src/microplex_us/pipelines/us.py + lines: 9682-10337 + summary: Legacy pipeline materialization of deterministic takeup inputs. + mp_spec: + method: rerandomized_takeup handler or deterministic takeup transform + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration until takeup transforms are fully serialized. + notes: Must be explicit because forbidden *_reported takeup columns are not substitutes for required takeup input leaves. + tax_exempt_401k_distributions: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + tax_exempt_403b_distributions: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + tax_exempt_interest_income: + entity: person + role: puf_imputed + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF; CPS keep half may pass through unless explicitly overridden. + tax_exempt_ira_distributions: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + tax_exempt_private_pension_income: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + tax_exempt_sep_distributions: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + tax_unit_id: + entity: tax_unit + role: structural_export_contract + temporary: true + ecps: + method: PolicyEngine H5 structural id/link/weight export + code: + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: eCPS structural entity ids, links, and household_weight export. + mp_legacy: + method: PolicyEngine US H5 structural id/link/weight export + code: + - path: src/microplex_us/policyengine/us.py + lines: 473-486 + symbol: POLICYENGINE_US_STRUCTURAL_EXPORT_COLUMNS + mp_spec: + method: exporter structural entity/link column + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Structural columns must be asserted by strict stage/export manifests. + taxable_401k_distributions: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + taxable_403b_distributions: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + taxable_interest_income: + entity: person + role: puf_imputed + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF; CPS keep half may pass through unless explicitly overridden. + taxable_ira_distributions: + entity: person + role: puf_imputed + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF; CPS keep half may pass through unless explicitly overridden. + taxable_private_pension_income: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + taxable_sep_distributions: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + taxpayer_id_type: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + tenure_type: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + tip_income: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + tract_geoid: + entity: household + role: geography_export_contract + temporary: true + ecps: + method: eCPS geography assignment/export encoding + code: + - path: policyengine_us_data/storage/enhanced_cps/clone_and_assign.py + lines: 55,114-151 + symbol: assign_random_geography + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 269-289 + summary: Fixed-width block/tract/county export encoding. + notes: eCPS emits fixed-width byte strings for block/tract/county geographies. + mp_legacy: + method: Microplex census block assignment/export derivation + code: + - path: src/microplex_us/pipelines/us.py + lines: 491-587,3999-4023 + symbol: _attach_household_census_geographies / _ensure_household_in_nyc + - path: src/microplex_us/geography.py + lines: 403-527,550-647 + symbol: BlockGeography + notes: Manifest flagged possible encoding/export divergence; exporter must preserve eCPS-compatible widths. + mp_spec: + method: GeoCloner/exporter derived geography with eCPS-compatible encoding + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration for future GeoCloner/exporter rules. + traditional_401k_contributions: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + traditional_401k_contributions_desired: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + traditional_ira_contributions: + entity: person + role: puf_imputed + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF; CPS keep half may pass through unless explicitly overridden. + traditional_ira_contributions_desired: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + treasury_tipped_occupation_code: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + unadjusted_basis_qualified_property: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + unemployment_compensation: + entity: person + role: cps_passthrough_or_constructed + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: MP legacy export path or default surface + code: + - path: src/microplex_us/policyengine/us.py + lines: 360-472,505-687,725-820 + symbol: SAFE_POLICYENGINE_US_EXPORT_VARIABLES / POLICYENGINE_US_EXPORT_DEFAULTS / POLICYENGINE_US_LEGACY_CONTRACT_VARIABLE_ENTITIES + - path: src/microplex_us/pipelines/export_lineage_manifest.py + lines: 240-780 + symbol: build_export_lineage_manifest + summary: Static MP lineage coverage for required eCPS export columns. + notes: 'Temporary broad provenance: exact MP legacy source/default evidence should be narrowed per variable as the declarative + spec replaces the imperative path.' + mp_spec: + method: contract-required variable pending exact declarative source rule + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: This temporary variables block declares the intended contract surface. + notes: Must remain represented in the spec until the runtime SourceRegistry/transform/export stage implements the final + rule. + unrecaptured_section_1250_gain: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + unreimbursed_business_employee_expenses: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + veterans_benefits: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + w2_wages_from_qualified_business: + entity: person + role: puf_imputed_overridden + temporary: true + ecps: + method: PUF QRF imputation + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: PUF support-clone donor imputation surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. + weekly_hours_worked_before_lsr: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + weeks_unemployed: + entity: person + role: puf_imputed + temporary: true + ecps: + method: PUF weeks-unemployed QRF plus clip/zero-mask + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248,309-392 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES / impute_weeks_unemployed + summary: eCPS PUF imputation surface and special weeks_unemployed handling. + mp_legacy: + method: legacy default/no dedicated imputation + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + summary: Documents legacy defaults where the support-clone path leaves a column empty. + mp_spec: + method: required special transform/glue, not just a default + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and/or temporary variable provenance. + notes: Requires eCPS-compatible QRF conditioned on taxable_unemployment_compensation, then clip[0,52] and zero-mask + when unemployment compensation is zero. + workers_compensation: + entity: person + role: legacy_default_needs_source_review + temporary: true + ecps: + method: CPS/eCPS required export contract source path pending exact row-level attribution + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Primary CPS ASEC loader and enhanced-CPS source transformations. + - path: policyengine_us_data/storage/enhanced_cps/extended_cps.py + summary: Enhanced CPS export assembly and persisted-input surface. + notes: 'Temporary broad provenance: contract coverage is enforced now; exact eCPS line references should be tightened + per variable before removing temporary=True.' + mp_legacy: + method: legacy export default fallback + code: + - path: src/microplex_us/policyengine/us.py + lines: 505-687 + symbol: POLICYENGINE_US_EXPORT_DEFAULTS + notes: Default-only parity is not sufficient for numeric/behavioral parity unless eCPS also defaults this surface. + mp_spec: + method: passthrough/derive/default decision pending exact source classification + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration; this row prevents silent omission from the spec. + notes: Use the variable manifest and lineage gate to decide whether this is CPS passthrough, deterministic derive, or + valid default. MP legacy currently has an export default for this required column; verify source passthrough or transform + before promotion. + would_claim_wic: + entity: spm_unit + role: takeup_input_contract + temporary: true + ecps: + method: PolicyEngine takeup input/default or eCPS reported-benefit driver + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Enhanced CPS benefit/takeup source inputs and defaulted takeup leaves. + mp_legacy: + method: deterministic Microplex takeup helper/default + code: + - path: src/microplex_us/policyengine/takeup.py + lines: 14-115,171-253,694-728 + summary: Default takeup rates and feature families. + - path: src/microplex_us/pipelines/us.py + lines: 9682-10337 + summary: Legacy pipeline materialization of deterministic takeup inputs. + mp_spec: + method: rerandomized_takeup handler or deterministic takeup transform + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration until takeup transforms are fully serialized. + notes: Must be explicit because forbidden *_reported takeup columns are not substitutes for required takeup input leaves. + would_file_taxes_voluntarily: + entity: tax_unit + role: takeup_input_contract + temporary: true + ecps: + method: PolicyEngine takeup input/default or eCPS reported-benefit driver + code: + - path: policyengine_us_data/datasets/cps/cps.py + summary: Enhanced CPS benefit/takeup source inputs and defaulted takeup leaves. + mp_legacy: + method: deterministic Microplex takeup helper/default + code: + - path: src/microplex_us/policyengine/takeup.py + lines: 14-115,171-253,694-728 + summary: Default takeup rates and feature families. + - path: src/microplex_us/pipelines/us.py + lines: 9682-10337 + summary: Legacy pipeline materialization of deterministic takeup inputs. + mp_spec: + method: rerandomized_takeup handler or deterministic takeup transform + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Temporary declaration until takeup transforms are fully serialized. + notes: Must be explicit because forbidden *_reported takeup columns are not substitutes for required takeup input leaves. + employment_income: + entity: person + role: puf_imputed_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF; CPS keep half may pass through unless explicitly overridden. Not a required + eCPS export-contract column; retained here because the current spec imputation graph declares it or uses it to feed + required downstream exports. + social_security: + entity: person + role: puf_imputed_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + notes: MP legacy keeps CPS values for same-name non-overridden columns; this is explicitly called out for known collisions. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: 'Known keep-CPS collision: the synthetic half must synthesize this variable and must not inherit the CPS canonical + value. Not a required eCPS export-contract column; retained here because the current spec imputation graph declares + it or uses it to feed required downstream exports.' + taxable_pension_income: + entity: person + role: puf_imputed_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + notes: MP legacy keeps CPS values for same-name non-overridden columns; this is explicitly called out for known collisions. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: 'Known keep-CPS collision: the synthetic half must synthesize this variable and must not inherit the CPS canonical + value. Not a required eCPS export-contract column; retained here because the current spec imputation graph declares + it or uses it to feed required downstream exports.' + interest_deduction: + entity: person + role: puf_imputed_overridden_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Not + a required eCPS export-contract column; retained here because the current spec imputation graph declares it or uses + it to feed required downstream exports. + tax_exempt_pension_income: + entity: person + role: puf_imputed_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF; CPS keep half may pass through unless explicitly overridden. Not a required + eCPS export-contract column; retained here because the current spec imputation graph declares it or uses it to feed + required downstream exports. + long_term_capital_gains: + entity: person + role: puf_imputed_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF; CPS keep half may pass through unless explicitly overridden. Not a required + eCPS export-contract column; retained here because the current spec imputation graph declares it or uses it to feed + required downstream exports. + pre_tax_contributions: + entity: person + role: puf_imputed_overridden_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Not + a required eCPS export-contract column; retained here because the current spec imputation graph declares it or uses + it to feed required downstream exports. + self_employment_income: + entity: person + role: puf_imputed_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + notes: MP legacy keeps CPS values for same-name non-overridden columns; this is explicitly called out for known collisions. + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: 'Known keep-CPS collision: the synthetic half must synthesize this variable and must not inherit the CPS canonical + value. Not a required eCPS export-contract column; retained here because the current spec imputation graph declares + it or uses it to feed required downstream exports.' + sstb_self_employment_income: + entity: person + role: puf_imputed_overridden_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Not + a required eCPS export-contract column; retained here because the current spec imputation graph declares it or uses + it to feed required downstream exports. + self_employed_pension_contribution_ald: + entity: person + role: puf_imputed_overridden_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Not + a required eCPS export-contract column; retained here because the current spec imputation graph declares it or uses + it to feed required downstream exports. + taxable_unemployment_compensation: + entity: person + role: puf_imputed_overridden_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Not + a required eCPS export-contract column; retained here because the current spec imputation graph declares it or uses + it to feed required downstream exports. + self_employed_health_insurance_ald: + entity: person + role: puf_imputed_overridden_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Not + a required eCPS export-contract column; retained here because the current spec imputation graph declares it or uses + it to feed required downstream exports. + cdcc_relevant_expenses: + entity: person + role: puf_imputed_overridden_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Not + a required eCPS export-contract column; retained here because the current spec imputation graph declares it or uses + it to feed required downstream exports. + foreign_tax_credit: + entity: person + role: puf_imputed_overridden_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Not + a required eCPS export-contract column; retained here because the current spec imputation graph declares it or uses + it to feed required downstream exports. + american_opportunity_credit: + entity: person + role: puf_imputed_overridden_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Not + a required eCPS export-contract column; retained here because the current spec imputation graph declares it or uses + it to feed required downstream exports. + general_business_credit: + entity: person + role: puf_imputed_overridden_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Not + a required eCPS export-contract column; retained here because the current spec imputation graph declares it or uses + it to feed required downstream exports. + energy_efficient_home_improvement_credit: + entity: person + role: puf_imputed_overridden_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Not + a required eCPS export-contract column; retained here because the current spec imputation graph declares it or uses + it to feed required downstream exports. + amt_foreign_tax_credit: + entity: person + role: puf_imputed_overridden_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Not + a required eCPS export-contract column; retained here because the current spec imputation graph declares it or uses + it to feed required downstream exports. + excess_withheld_payroll_tax: + entity: person + role: puf_imputed_overridden_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Not + a required eCPS export-contract column; retained here because the current spec imputation graph declares it or uses + it to feed required downstream exports. + savers_credit: + entity: person + role: puf_imputed_overridden_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Not + a required eCPS export-contract column; retained here because the current spec imputation graph declares it or uses + it to feed required downstream exports. + early_withdrawal_penalty: + entity: person + role: puf_imputed_overridden_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Not + a required eCPS export-contract column; retained here because the current spec imputation graph declares it or uses + it to feed required downstream exports. + prior_year_minimum_tax_credit: + entity: person + role: puf_imputed_overridden_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Not + a required eCPS export-contract column; retained here because the current spec imputation graph declares it or uses + it to feed required downstream exports. + other_credits: + entity: person + role: puf_imputed_overridden_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Not + a required eCPS export-contract column; retained here because the current spec imputation graph declares it or uses + it to feed required downstream exports. + unreported_payroll_tax: + entity: person + role: puf_imputed_overridden_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Not + a required eCPS export-contract column; retained here because the current spec imputation graph declares it or uses + it to feed required downstream exports. + recapture_of_investment_credit: + entity: person + role: puf_imputed_overridden_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Not + a required eCPS export-contract column; retained here because the current spec imputation graph declares it or uses + it to feed required downstream exports. + deductible_mortgage_interest: + entity: person + role: puf_imputed_overridden_non_export + temporary: true + ecps: + method: PUF QRF imputation or calculated PUF support variable + code: + - path: policyengine_us_data/storage/enhanced_cps/puf_impute.py + lines: 36-153,227,243-248 + symbol: IMPUTED_VARIABLES / OVERRIDDEN_IMPUTED_VARIABLES + summary: eCPS PUF imputation/intermediate support surface. + mp_legacy: + method: PUF support-clone donor imputation/intermediate surface + code: + - path: src/microplex_us/pipelines/us.py + lines: 182-258,326-387,2035-2061,6088-6683 + symbol: PUF_SUPPORT_CLONE_IMPUTED_VARIABLES / PUF_SUPPORT_CLONE_OVERRIDDEN_VARIABLES / PUF_SUPPORT_CLONE_SPECIAL_VARIABLES + mp_spec: + method: declared PUF imputation step + code: + - path: src/microplex_us/specs/us-2024.yaml + summary: Listed in imputation.vars and temporary variable provenance. + notes: Synthetic half synthesizes from PUF. CPS keep half is overwritten/collapsed for eCPS OVERRIDDEN variables. Not + a required eCPS export-contract column; retained here because the current spec imputation graph declares it or uses + it to feed required downstream exports. + targets: arch: country: us diff --git a/tests/pipelines/test_check_export_columns.py b/tests/pipelines/test_check_export_columns.py index 962244f..94b1473 100644 --- a/tests/pipelines/test_check_export_columns.py +++ b/tests/pipelines/test_check_export_columns.py @@ -30,7 +30,9 @@ _spec.loader.exec_module(cec) DEFAULT_CONTRACT_PATH = cec.DEFAULT_CONTRACT_PATH +DEFAULT_SPEC_PATH = cec.DEFAULT_SPEC_PATH compute_column_diff = cec.compute_column_diff +compute_spec_variable_manifest_diff = cec.compute_spec_variable_manifest_diff load_contract = cec.load_contract main = cec.main @@ -444,6 +446,45 @@ def fake_columns(path, *, direct_override_variables): assert rc == 0 +def test_main_explicit_spec_variable_manifest_failure_returns_one( + tmp_path, + contract_path, +): + spec_path = tmp_path / "spec.yaml" + spec_path.write_text( + """ +meta: {country: us, model_year: 2024} +imputation: + - onto: synthetic_puf + from: puf + vars: [employment_income] +variables: + age: + mp_spec: {method: passthrough} + snap: + mp_spec: {method: passthrough} +""", + encoding="utf-8", + ) + + cols_path = _write_json( + tmp_path / "cols.json", + ["age", "snap", "employment_income"], + ) + rc = main( + [ + "--columns-json", + str(cols_path), + "--contract", + str(contract_path), + "--spec", + str(spec_path), + ] + ) + + assert rc == 1 + + def test_main_requires_exactly_one_input(tmp_path, contract_path): # Neither input -> argparse error (SystemExit code 2). with pytest.raises(SystemExit) as exc: @@ -497,6 +538,96 @@ def test_load_contract_rejects_missing_keys(tmp_path): load_contract(bad) +def test_spec_variable_manifest_diff_covers_committed_spec(): + diff = compute_spec_variable_manifest_diff( + contract=load_contract(DEFAULT_CONTRACT_PATH), + spec_path=DEFAULT_SPEC_PATH, + ) + + assert diff.ok + assert diff.required_contract_count == 252 + assert diff.declared_imputation_count == 76 + assert diff.variable_manifest_count == 278 + assert diff.missing_required == [] + assert diff.missing_declared_imputation == [] + assert diff.extra_variables == [] + + +def test_spec_variable_manifest_diff_flags_missing_required_and_imputation(tmp_path): + contract = { + "required": ["age", "snap"], + "forbidden": [], + "ecps_internal_optional": [], + } + spec_path = tmp_path / "spec.yaml" + spec_path.write_text( + """ +meta: {country: us, model_year: 2024} +imputation: + - onto: synthetic_puf + from: puf + vars: [employment_income] +variables: + age: + mp_spec: {method: passthrough} +""", + encoding="utf-8", + ) + + diff = compute_spec_variable_manifest_diff( + contract=contract, + spec_path=spec_path, + ) + + assert diff.ok is False + assert diff.missing_required == ["snap"] + assert diff.missing_declared_imputation == ["employment_income"] + assert diff.extra_variables == [] + + +def test_spec_variable_manifest_diff_counts_quoted_and_commented_imputation_vars( + tmp_path, +): + contract = { + "required": ["age"], + "forbidden": [], + "ecps_internal_optional": [], + } + spec_path = tmp_path / "spec.yaml" + spec_path.write_text( + """ +meta: {country: us, model_year: 2024} +imputation: + - onto: synthetic_puf + from: puf + vars: + - "employment_income" # PUF override + - 'rental_income' + - onto: cps_keep + from: puf + vars: [self_employment_income, "social_security"] # inline form +variables: + age: + mp_spec: {method: passthrough} +""", + encoding="utf-8", + ) + + diff = compute_spec_variable_manifest_diff( + contract=contract, + spec_path=spec_path, + ) + + assert diff.ok is False + assert diff.declared_imputation_count == 4 + assert diff.missing_declared_imputation == [ + "employment_income", + "rental_income", + "self_employment_income", + "social_security", + ] + + def test_committed_contract_parses_with_expected_categories(): contract = load_contract(DEFAULT_CONTRACT_PATH) for key in ( @@ -548,12 +679,14 @@ def test_committed_contract_parses_with_expected_categories(): assert excl == {"weeks_worked"} -def test_committed_clean_fixture_passes_committed_contract(): +def test_committed_clean_fixture_passes_committed_contract(capsys): # The CI fixture must be a clean, passing set against the real # contract so the green CI path proves the gate passes on good data. fixture = Path(__file__).parent / "fixtures" / "ecps_clean_columns.json" rc = main(["--columns-json", str(fixture)]) + report = capsys.readouterr().out assert rc == 0 + assert "spec variable manifest" in report def test_committed_contract_covers_every_baseline_column(): diff --git a/tests/pipelines/test_mp300k_artifact_gates.py b/tests/pipelines/test_mp300k_artifact_gates.py index 592e522..82419d8 100644 --- a/tests/pipelines/test_mp300k_artifact_gates.py +++ b/tests/pipelines/test_mp300k_artifact_gates.py @@ -1008,6 +1008,7 @@ def test_column_contract_gate_reports_extra_candidate_columns(tmp_path): assert record["summary"]["status"] == "passed" assert column_gate["status"] == "pass" assert column_gate["metrics"]["extra_unknown_column_count"] == 1 + assert column_gate["metrics"]["spec_variable_manifest_count"] == 278 assert column_gate["details"]["extra_unknown_columns"] == ["filing_status"] diff --git a/tests/specs/test_us_2024_spec.py b/tests/specs/test_us_2024_spec.py index 3311a78..8930900 100644 --- a/tests/specs/test_us_2024_spec.py +++ b/tests/specs/test_us_2024_spec.py @@ -1,5 +1,6 @@ from __future__ import annotations +import json from importlib.resources import files from pathlib import Path @@ -13,12 +14,24 @@ from microplex_us.variables import PE_STYLE_PUF_IRS_DEMOGRAPHIC_PREDICTORS SPEC_PATH = Path(str(files("microplex_us.specs").joinpath("us-2024.yaml"))) +CONTRACT_PATH = Path( + str(files("microplex_us.pipelines").joinpath("ecps_export_contract.json")) +) def _spec(): return load_spec(SPEC_PATH) +def _required_contract_variables() -> set[str]: + payload = json.loads(CONTRACT_PATH.read_text(encoding="utf-8")) + return set(payload["required"]) + + +def _declared_imputation_variables(spec) -> set[str]: + return {name for step in spec.imputation for name in step.vars} + + def test_us_2024_spec_loads_and_names_release_surface() -> None: spec = _spec() @@ -98,5 +111,84 @@ def test_us_2024_spec_declares_demographic_only_puf_synthesis() -> None: ) +def test_us_2024_spec_declares_provenance_for_every_required_export() -> None: + spec = _spec() + required = _required_contract_variables() + declared = _declared_imputation_variables(spec) + + assert set(spec.variables) == required | declared + + for name in sorted(required | declared): + variable = spec.variables[name] + assert variable.temporary is True, name + assert variable.entity, name + assert variable.role, name + assert variable.entity in { + "person", + "household", + "tax_unit", + "spm_unit", + "family", + }, name + for system in ("ecps", "mp_legacy", "mp_spec"): + provenance = getattr(variable, system) + assert provenance is not None, f"{name}.{system}" + assert provenance.method, f"{name}.{system}.method" + assert provenance.code, f"{name}.{system}.code" + assert all(ref.path for ref in provenance.code), f"{name}.{system}.code" + for ref in provenance.code: + symbol_tokens = (ref.symbol or "").replace("/", " ").split() + assert "POLICYENGINE_US_EXPORT_VARIABLES" not in symbol_tokens, ( + f"{name}.{system}.code" + ) + + +def test_us_2024_spec_covers_manifest_gap_families() -> None: + spec = _spec() + variables = spec.variables + + scf_components = {name for name in variables if name.startswith("scf_")} + reported_health = {name for name in variables if name.startswith("reported_")} + takeup_inputs = { + name + for name in variables + if name.startswith("takes_up_") or name.startswith("would_") + } + + assert len(scf_components) == 19 + assert len(reported_health) == 21 + assert len(takeup_inputs) == 13 + assert { + "state_fips", + "county_fips", + "block_geoid", + "tract_geoid", + "congressional_district_geoid", + "in_nyc", + } <= set(variables) + + net_worth = variables["net_worth"] + assert net_worth.role == "net_worth_open_decision" + assert net_worth.ecps is not None + assert "direct SCF" in net_worth.ecps.method + assert net_worth.mp_spec is not None + assert "OPEN" in net_worth.mp_spec.method + + for name in ( + "social_security", + "self_employment_income", + "rental_income", + "taxable_pension_income", + "alimony_income", + ): + variable = variables[name] + assert variable.mp_spec is not None + assert "keep-CPS collision" in (variable.mp_spec.notes or "") + + weeks_unemployed = variables["weeks_unemployed"] + assert weeks_unemployed.mp_spec is not None + assert "clip[0,52]" in (weeks_unemployed.mp_spec.notes or "") + + def test_us_2024_spec_keeps_forbes_out_of_replication_baseline() -> None: assert "forbes" not in SPEC_PATH.read_text(encoding="utf-8").lower() diff --git a/uv.lock b/uv.lock index 7b1cfbd..717f905 100644 --- a/uv.lock +++ b/uv.lock @@ -1145,7 +1145,7 @@ dependencies = [ [[package]] name = "microplex" version = "0.2.0" -source = { git = "https://github.com/PolicyEngine/microplex.git?rev=773106e3a159a0417ed15025b507ab05c0b93b5d#773106e3a159a0417ed15025b507ab05c0b93b5d" } +source = { git = "https://github.com/PolicyEngine/microplex.git?rev=cad505289da23e1e7a5eded3c67a248cd8d1b8e4#cad505289da23e1e7a5eded3c67a248cd8d1b8e4" } dependencies = [ { name = "httpx" }, { name = "huggingface-hub" }, @@ -1209,7 +1209,7 @@ requires-dist = [ { name = "huggingface-hub", marker = "extra == 'hf'", specifier = ">=0.24" }, { name = "jupyter-book", marker = "extra == 'docs'", specifier = ">=0.15,<0.16" }, { name = "microimpute", marker = "python_full_version >= '3.12' and python_full_version < '3.15' and extra == 'policyengine'", git = "https://github.com/PolicyEngine/microimpute.git?rev=90be828eb442c48ee86bb91bb83a75da4b0f0f89" }, - { name = "microplex", extras = ["calibrate"], git = "https://github.com/PolicyEngine/microplex.git?rev=773106e3a159a0417ed15025b507ab05c0b93b5d" }, + { name = "microplex", extras = ["calibrate"], git = "https://github.com/PolicyEngine/microplex.git?rev=cad505289da23e1e7a5eded3c67a248cd8d1b8e4" }, { name = "microunit", marker = "extra == 'policyengine'", specifier = ">=0.1.0" }, { name = "policyengine-us", marker = "python_full_version >= '3.11' and python_full_version < '3.15' and extra == 'policyengine'", specifier = "==1.715.2" }, { name = "pytest", marker = "extra == 'dev'", specifier = ">=7.0" },