No Grundsicherung im Alter if a child's annual Gesamteinkommen is 100,000 € or more (§ 43 Abs. 5 SGB XII, 2005–2019)#1167
Conversation
The SGB XII benefit unit (§ 27 Abs. 2) includes the couple plus their minor unmarried children (< 18) in the same household, not just the couple as in SGB II's Einstandsgemeinschaft. This adds sg_id and switches Grundsicherung im Alter from _eg to _sg aggregation. Changes: - Add sg_id group creation function with sgb_xii_sg_id_formula (age < 18) - Add SG aggregation functions in familie.py (ist_kind_in_sozialhilfegemeinschaft, anzahl_kinder_sg, anzahl_erwachsene_sg, anzahl_personen_sg) - Rename _eg → _sg throughout grundsicherung/im_alter namespace - Fix vermögensfreibetrag bug: was using _fg counts, now uses _sg counts - Move p_id_einstandspartner to familie namespace (shared across SGB II/XII) - Collapse date-split fg_id/eg_id functions into single functions - Remove unused EG child/adult functions from familie.py - Update documentation (hh_concepts.md, AGENTS.md) - Skip hh_id_25 test (needs recomputation with SG grouping) Closes #1147 Supersedes #738 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
commit 8983f95 Author: Marvin Immesberger <immesberger@posteo.de> Date: Tue Mar 24 17:09:20 2026 +0100 Add regression test. commit 2674c22 Author: Marvin Immesberger <immesberger@posteo.de> Date: Tue Mar 24 17:02:03 2026 +0100 Add test for Musterberechnung. commit 1df9140 Author: Marvin Immesberger <immesberger@posteo.de> Date: Tue Mar 24 16:48:06 2026 +0100 Bedarfsanteilmethode
Content of gsia-rewrite tip (squash-merge of PR #1164, bg-gemischt) is tree-identical to the bg-gemischt branch tip already merged in the previous commit, so this merge only records the history.
CI's pixi v0.66.0 cannot read the version-7 pixi.lock written by pixi >= 0.68. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
hmgaudecker
left a comment
There was a problem hiding this comment.
Just wondering whether the rule is really that simple cutoff? No exceptions, hardship, ... ?
- Rename p_id aggregations to anzahl_kinder_..._als_elternteil_1/2 (was über_elternteil_1/2) and document the parent-side semantics. - End the §43 Abs. 5 SGB XII exclusion on 2019-12-31: the Angehörigen-Entlastungsgesetz (BGBl. I 2019 S. 2135) repealed it as of 2020-01-01; since then the 100,000 Euro threshold only limits the recourse of the Sozialhilfeträger against the children (§94 Abs. 1a SGB XII), which does not affect the benefit. - Add betrag_m variant without the children's income test from 2020 on. - Expire the einkommensgrenze_kinder parameter accordingly. - Move the kind_über/unter_einkommensgrenze policy cases from 2026-01-01 to 2018-07-01 and adapt date-dependent inputs and expected outputs. - Drop the hat_kind_mit_einkommen_über_einkommensgrenze input overrides from post-2020 policy cases (column no longer exists there). - Clarify the test notes (monthly gross earnings instead of annual gross income). - Add a docs page on children's income and Grundsicherung im Alter. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
# Conflicts: # .github/workflows/main.yml # CHANGES.md # docs/tt_explanations/index.md # pixi.lock # src/gettsim/germany/grundsicherung/im_alter/einkommen.py # src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2023-07-01/vermögen_über_freibetrag.yaml
- Bump ttsim-backend to current main (1.2.2.dev11+gad3d21c12), which implements any/all/count/mean/max/min by_p_id aggregations. - Use AggType.ANY for the per-parent children's income aggregations (hat_kind_mit_einkommen_über_einkommensgrenze_als_elternteil_1/2). - Count einnahmen__renten__basisrente_m (introduced on main in #1175) in the pre-2018 Grundsicherung im Alter income concepts and provide it in the policy cases that lacked it. - Drop redundant grundsicherung.hilfe_zum_lebensunterhalt. überschusseinkommen_m input overrides from policy cases (all zeros; the param function provides 0.0). The stricter auto-aggregation type resolution of current ttsim cannot type free input columns. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
# Conflicts: # CHANGES.md # docs/tt_explanations/index.md # src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2010-07-01/mehrbedarf_bei_schwerbehinderung.yaml # src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2017-07-01/hh_id_13.yaml # src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2017-07-01/hh_id_16.yaml # src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2017-07-01/hh_id_17.yaml # src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2017-07-01/hh_id_6.yaml # src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2017-07-01/kein_freibetrag_zusaetzliche_altersvorsorge.yaml # src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2018-07-01/berufsständische_versorgung_kein_freibetrag.yaml # src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2018-07-01/erwerbseinkommen.yaml # src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2018-07-01/freibetrag_erreicht_obergrenze.yaml # src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2018-07-01/freibetrag_unter_100.yaml # src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2018-07-01/freibetrag_zusätzliche_altersvorsorge.yaml # src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2018-07-01/hh_id_12.yaml # src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2018-07-01/hh_id_20.yaml # src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2018-07-01/hh_id_22.yaml # src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2018-07-01/hh_id_3.yaml
Good that you push back. Apparently since 2020 parents can actually receive Grundsicherung im Alter if their children earn more than 100k annually (before 2020 it was indeed a restriction that excluded the parents from receiving the transfer; no hardship rules, at least in the SGB). Today, parents receive Grundsicherung im Alter, but the Sozialamt can reach out to the children to get that money back afterwards if they are more than 100k. AFAICT the Sozialämter usually do this but since it is not an automatically applied rule, I'd say we don't model if past 2019. I added an explanation to GETTSIM's documentation and the corresponding functions. |
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
for more information, see https://pre-commit.ci
|
Could you please fix the test-jax errors before I look into this? Thanks! |
In this case, I think we should add an input variable |
|
Actually, the more important reason: We want to be able to represent the clawback to children's income. The situation is not quite symmetric to take-up because we can always leave out a target and it won't be computed. If we left out the possibility here, we would not be able to represent it. |
|
I'd prefer to postpone a proper treatment. It is complex because
We could ofc provide a target If you agree, I'll post the corresponding issue. |
|
Agree, but I think I prefer keeping the pre-2020 rule as the default then despite this going against our philosophy. Again, easier to turn that off than to turn Rückgriff on if we don't model it. |
Summary
betrag_mtherefore no longer depends on children's income from 2020 on.einkommensgrenze_kinderYAML parameter (100,000 EUR/year, 2005–2019, expired with a note on the repeal).hat_gesamteinkommen_über_kindeseinkommensgrenze,hat_kind_mit_einkommen_über_einkommensgrenze_als_elternteil_1/_2(AggType.ANYaggregations over bothp_id_elternteil_*slots), andhat_kind_mit_einkommen_über_einkommensgrenze.betrag_mon the new check until 2019; separatebetrag_mvariant from 2020 on.docs/tt_explanations/childrens_income_grundsicherung_im_alter.md).any_by_p_idaggregation.Closes #1148
🤖 Generated with Claude Code