Source code for _gettsim.transfers.rente

from _gettsim.piecewise_functions import piecewise_polynomial
from _gettsim.shared import add_rounding_spec, dates_active


[docs]def sum_ges_rente_priv_rente_m(priv_rente_m: float, ges_rente_m: float) -> float: """Calculate total individual pension as sum of private and public pension. Parameters ---------- priv_rente_m See basic input variable :ref:`priv_rente_m <priv_rente_m>`. ges_rente_m See :func:`ges_rente_m`. Returns ------- """ out = priv_rente_m + ges_rente_m return out
[docs]@add_rounding_spec(params_key="ges_rente") def ges_rente_vor_grundr_m( ges_rente_zugangsfaktor: float, entgeltp_update: float, rentenwert: float, rentner: bool, ) -> float: """Old-Age Pensions claim without Grundrentenzuschlag. The function follows the following equation: .. math:: R = EP * ZF * Rw models 'Rentenformel': https://de.wikipedia.org/wiki/Rentenformel https://de.wikipedia.org/wiki/Rentenanpassungsformel Parameters ---------- ges_rente_zugangsfaktor See :func:`ges_rente_zugangsfaktor`. entgeltp_update See :func:`entgeltp_update`. rentenwert See :func:`rentenwert`. rentner See basic input variable :ref:`rentner <rentner>`. Returns ------- """ if rentner: out = entgeltp_update * ges_rente_zugangsfaktor * rentenwert else: out = 0.0 return out
[docs]@dates_active(end="2020-12-31") def ges_rente_m(ges_rente_vor_grundr_m: float) -> float: return ges_rente_vor_grundr_m
[docs]@dates_active(start="2021-01-01", change_name="ges_rente_m") @add_rounding_spec(params_key="ges_rente") def ges_rente_m_nach_grundr( ges_rente_vor_grundr_m: float, grundr_zuschlag_m: float, rentner: bool, ) -> float: """Calculate total individual public pension including Grundrentenzuschlag. Is only active after 2021 when Grundrente is in place. Parameters ---------- ges_rente_vor_grundr_m See :func:`ges_rente_vor_grundr_m`. grundr_zuschlag_m See :func:`grundr_zuschlag_m`. rentner See basic input variable :ref:`rentner <rentner>`. Returns ------- """ # Return 0 if person not yet retired out = ges_rente_vor_grundr_m + grundr_zuschlag_m if rentner else 0.0 return out
[docs]def rentenwert(wohnort_ost: bool, ges_rente_params: dict) -> float: """Select the rentenwert depending on place of living. Parameters ---------- wohnort_ost See basic input variable :ref:`wohnort_ost <wohnort_ost>`. ges_rente_params See params documentation :ref:`ges_rente_params <ges_rente_params>`. Returns ------- """ params = ges_rente_params["rentenwert"] out = params["ost"] if wohnort_ost else params["west"] return float(out)
[docs]def rentenwert_vorjahr(wohnort_ost: bool, ges_rente_params: dict) -> float: """Select the rentenwert of the last year depending on place of living. Parameters ---------- wohnort_ost See basic input variable :ref:`wohnort_ost <wohnort_ost>`. ges_rente_params See params documentation :ref:`ges_rente_params <ges_rente_params>`. Returns ------- """ params = ges_rente_params["rentenwert_vorjahr"] out = params["ost"] if wohnort_ost else params["west"] return float(out)
[docs]def entgeltp_update(entgeltp: float, entgeltp_update_lohn: float) -> float: """Update earning points. Given earnings, social insurance rules, average earnings in a particular year and potentially other variables (e.g., benefits for raising children, informal care), return the new earnings points. Parameters ---------- entgeltp See basic input variable :ref:`entgeltp <entgeltp>`. entgeltp_update_lohn See :func:`entgeltp_update_lohn`. Returns ------- """ # Note: We might need some interaction between the two # ways to accumulate earnings points (e.g., how to # determine what constitutes a 'care period') out = entgeltp + entgeltp_update_lohn return out
[docs]def entgeltp_update_lohn( bruttolohn_m: float, wohnort_ost: bool, _ges_rentenv_beitr_bemess_grenze_m: float, ges_rente_params: dict, ) -> float: """Return earning points for the wages earned in the last year. Parameters ---------- bruttolohn_m See basic input variable :ref:`bruttolohn_m <bruttolohn_m>`. wohnort_ost See :func:`wohnort_ost`. _ges_rentenv_beitr_bemess_grenze_m See :func:`_ges_rentenv_beitr_bemess_grenze_m`. ges_rente_params See params documentation :ref:`ges_rente_params <ges_rente_params>`. Returns ------- """ # ToDo: Does the scaling bonus really apply to current wages or only to those that # ToDo: had been earned during GDR times? # Scale bruttolohn up if earned in eastern Germany if wohnort_ost: bruttolohn_scaled_east = ( bruttolohn_m * ges_rente_params["umrechnung_entgeltp_beitrittsgebiet"] ) else: bruttolohn_scaled_east = bruttolohn_m # Calculate the (scaled) wage, which is subject to pension contributions. if bruttolohn_scaled_east > _ges_rentenv_beitr_bemess_grenze_m: bruttolohn_scaled_rentenv = _ges_rentenv_beitr_bemess_grenze_m else: bruttolohn_scaled_rentenv = bruttolohn_scaled_east # Calculate monthly mean wage in Germany durchschnittslohn_m = (1 / 12) * ges_rente_params[ "beitragspflichtiges_durchschnittsentgelt" ] out = bruttolohn_scaled_rentenv / durchschnittslohn_m return out
[docs]def ges_rente_zugangsfaktor( # noqa: PLR0913 geburtsjahr: int, rentner: bool, jahr_renteneintr: int, ges_rente_regelaltersgrenze: float, referenz_alter_abschlag: float, _ges_rente_altersgrenze_abschlagsfrei: float, ges_rente_vorauss_vorzeitig: bool, ges_rente_vorauss_regelrente: bool, ges_rente_params: dict, ) -> float: """Calculate the zugangsfaktor based on the year the subject retired. At the regelaltersgrenze - normal retirement age (NRA), the agent is allowed to get pensions with his full claim. In general, if the agent retires earlier or later, the Zugangsfaktor and therefore the pension claim is higher or lower. Legal reference: § 77 Abs. 2 Nr. 2 SGB VI However, under certain conditions agents can receive their full pension claim (Zugangsfaktor=1) at an earlier age - full retirement age (FRA) - (e.g. women, long term insured, disabled). That is the zugangsfaktor is 1 in [FRA, NRA]. It only increases after the NRA for all agents without exeptions. Parameters ---------- geburtsjahr See basic input variable :ref:`geburtsjahr <geburtsjahr>`. rentner See basic input variable :ref:`rentner <rentner>`. jahr_renteneintr See basic input variable :ref:`jahr_renteneintr <jahr_renteneintr>`. ges_rente_regelaltersgrenze See :func:`ges_rente_regelaltersgrenze`. referenz_alter_abschlag See :func:`referenz_alter_abschlag`. _ges_rente_altersgrenze_abschlagsfrei See :func:`_ges_rente_altersgrenze_abschlagsfrei`. ges_rente_vorauss_vorzeitig See :func:`ges_rente_vorauss_vorzeitig`. ges_rente_vorauss_regelrente See :func:`ges_rente_vorauss_regelrente`. ges_rente_params See params documentation :ref:`ges_rente_params <ges_rente_params>`. Returns ------- """ if rentner and ges_rente_vorauss_regelrente: # Early retirement (before full retirement age): Zugangsfaktor < 1 if ( jahr_renteneintr - geburtsjahr ) < _ges_rente_altersgrenze_abschlagsfrei: # [ERA,FRA) if ges_rente_vorauss_vorzeitig: # Calc difference to FRA of pensions with early retirement options # (Altersgrenze langjährig Versicherte, Altersrente für Frauen). out = ( 1 + ((jahr_renteneintr - geburtsjahr) - referenz_alter_abschlag) * ges_rente_params["zugangsfaktor_veränderung_pro_jahr"][ "vorzeitiger_renteneintritt" ] ) else: # Early retirement although not eligible to do so. # ToDo: Implement early retirment for disabled or long-term unemployed out = 0.0 # Late retirement (after normal retirement age/Regelaltersgrenze): # Zugangsfaktor > 1 elif (jahr_renteneintr - geburtsjahr) > ges_rente_regelaltersgrenze: out = ( 1 + ((jahr_renteneintr - geburtsjahr) - ges_rente_regelaltersgrenze) * ges_rente_params["zugangsfaktor_veränderung_pro_jahr"][ "späterer_renteneintritt" ] ) # Retirement between full retirement age and normal retirement age: else: # [FRA,NRA] out = 1.0 # Return 0 if person not yet retired or retired before working at least 5 years else: out = 0.0 out = max(out, 0.0) return out
@dates_active(end="2011-12-31", change_name="_ges_rente_altersgrenze_abschlagsfrei") def _ges_rente_altersgrenze_abschlagsfrei_ohne_besond_langj( ges_rente_regelaltersgrenze: float, ges_rente_frauen_altersgrenze: float, _ges_rente_langj_altersgrenze: float, ges_rente_vorauss_regelrente: bool, ges_rente_vorauss_frauen: bool, ges_rente_vorauss_langj: bool, ) -> float: """Calculates the age, at which a person is eligible to claim the full pension. Full retirement age (FRA) without deductions. This age is smaller or equal to the regelaltersgrenze (FRA<=NRA) and depends on personal characteristics as gender, insurance duration, health/disability, employment status. Parameters ---------- ges_rente_regelaltersgrenze See :func:`ges_rente_regelaltersgrenze`. ges_rente_frauen_altersgrenze See :func:`ges_rente_frauen_altersgrenze`. _ges_rente_langj_altersgrenze See :func:`_ges_rente_langj_altersgrenze`. ges_rente_vorauss_regelrente See :func:`ges_rente_vorauss_regelrente`. ges_rente_vorauss_frauen See :func:`ges_rente_vorauss_frauen`. ges_rente_vorauss_langj See :func:`ges_rente_vorauss_langj`. Returns ------- Lowest possible full retirement age (without deductions). Nan if person not eligigble for a public pension. """ out = float("Nan") if ges_rente_vorauss_regelrente: out = ges_rente_regelaltersgrenze if ges_rente_vorauss_frauen: out = min([out, ges_rente_frauen_altersgrenze]) if ges_rente_vorauss_langj: out = min([out, _ges_rente_langj_altersgrenze]) return out @dates_active(start="2012-01-01", change_name="_ges_rente_altersgrenze_abschlagsfrei") def _ges_rente_altersgrenze_abschlagsfrei_mit_besond_langj( # noqa: PLR0913 ges_rente_regelaltersgrenze: float, ges_rente_frauen_altersgrenze: float, _ges_rente_langj_altersgrenze: float, _ges_rente_besond_langj_altersgrenze: float, ges_rente_vorauss_regelrente: bool, ges_rente_vorauss_frauen: bool, ges_rente_vorauss_langj: bool, ges_rente_vorauss_besond_langj: bool, ) -> float: """Calculate the age, at which a person is eligible to claim the full pension. Full retirement age (FRA) without deductions. This age is smaller or equal to the regelaltersgrenze (FRA<=NRA) and depends on personal characteristics as gender, insurance duration, health/disability, employment status. Parameters ---------- ges_rente_regelaltersgrenze See :func:`ges_rente_regelaltersgrenze`. ges_rente_frauen_altersgrenze See :func:`ges_rente_frauen_altersgrenze`. _ges_rente_langj_altersgrenze See :func:`_ges_rente_langj_altersgrenze`. _ges_rente_besond_langj_altersgrenze See :func:`_ges_rente_besond_langj_altersgrenze`. ges_rente_vorauss_regelrente See :func:`ges_rente_vorauss_regelrente`. ges_rente_vorauss_frauen See :func:`ges_rente_vorauss_frauen`. ges_rente_vorauss_langj See :func:`ges_rente_vorauss_langj`. ges_rente_vorauss_besond_langj See :func:`ges_rente_vorauss_besond_langj`. Returns ------- Lowest possible full retirement age (without deductions). Nan if person not eligigble for a public pension. """ out = float("Nan") if ges_rente_vorauss_regelrente: out = ges_rente_regelaltersgrenze if ges_rente_vorauss_frauen: out = min([out, ges_rente_frauen_altersgrenze]) if ges_rente_vorauss_langj: out = min([out, _ges_rente_langj_altersgrenze]) if ges_rente_vorauss_besond_langj: out = min([out, _ges_rente_besond_langj_altersgrenze]) return out
[docs]def referenz_alter_abschlag( ges_rente_frauen_altersgrenze: float, _ges_rente_langj_altersgrenze: float, ges_rente_vorauss_frauen: bool, ges_rente_vorauss_langj: bool, ) -> float: """Determines reference age for deduction calculation in case of early retirement (Zugangsfaktor). Nan if person is not eligible for early retirement. (The regular pension and the pension for very long term insured cannot be claimed early.) Parameters ---------- ges_rente_frauen_altersgrenze See :func:`ges_rente_frauen_altersgrenze`. _ges_rente_langj_altersgrenze See :func:`_ges_rente_langj_altersgrenze`. ges_rente_vorauss_frauen See :func:`ges_rente_vorauss_frauen`. ges_rente_vorauss_langj See :func:`ges_rente_vorauss_langj`. Returns ------- Reference age for deduction calculation. """ if ges_rente_vorauss_langj and ges_rente_vorauss_frauen: out = min([ges_rente_frauen_altersgrenze, _ges_rente_langj_altersgrenze]) elif ges_rente_vorauss_langj: out = _ges_rente_langj_altersgrenze elif ges_rente_vorauss_frauen: out = ges_rente_frauen_altersgrenze else: out = float("Nan") return out
[docs]def ges_rente_regelaltersgrenze(geburtsjahr: int, ges_rente_params: dict) -> float: """Calculate the age, at which a person is eligible to claim the regular pension. Normal retirement age (NRA). This pension cannot be claimed earlier than at the NRA, ie it does not serve as reference for calculating deductions. However, it serves as reference for calculating gains in the Zugangsfakor in case of later retirement. Parameters ---------- geburtsjahr See basic input variable :ref:`geburtsjahr <geburtsjahr>`. ges_rente_params See params documentation :ref:`ges_rente_params <ges_rente_params>`. Returns ------- """ out = piecewise_polynomial( x=geburtsjahr, thresholds=ges_rente_params["regelaltersgrenze"]["thresholds"], rates=ges_rente_params["regelaltersgrenze"]["rates"], intercepts_at_lower_thresholds=ges_rente_params["regelaltersgrenze"][ "intercepts_at_lower_thresholds" ], ) return out
[docs]def ges_rente_frauen_altersgrenze( geburtsjahr: int, geburtsmonat: int, ges_rente_params: dict, ) -> float: """Calculate the age, at which a women is eligible to claim the full pension (without deductions). This pension scheme allows for early retirement from age 60 with deductions. Hence this threshold is needed as reference for calculating the zugangsfaktor. Parameters ---------- geburtsjahr See basic input variable :ref:`geburtsjahr <geburtsjahr>`. geburtsmonat See basic input variable :ref:`geburtsmonat <geburtsmonat>`. ges_rente_params See params documentation :ref:`ges_rente_params <ges_rente_params>`. Returns ------- returns the lowest full retirement age for women. """ # From 1945 on, the altersgrenze of women is equal to the Regelaltersgrenze which # is indpendendent of the birth month and only depends on the birth year. if geburtsjahr < 1945: x = geburtsjahr + (geburtsmonat - 1) / 12 else: x = geburtsjahr out = piecewise_polynomial( x=x, thresholds=ges_rente_params["altersgrenze_für_frauen_abschlagsfrei"][ "thresholds" ], rates=ges_rente_params["altersgrenze_für_frauen_abschlagsfrei"]["rates"], intercepts_at_lower_thresholds=ges_rente_params[ "altersgrenze_für_frauen_abschlagsfrei" ]["intercepts_at_lower_thresholds"], ) return out
def _ges_rente_langj_altersgrenze( geburtsjahr: int, geburtsmonat: int, ges_rente_params: dict, ) -> float: """Calculate the age, at which a long term insured person (at least 35 years) is eligible to claim the full pension (without deductions). This pension scheme allows for early retirement (e.g. age 63) with deductions. Hence this threshold is needed as reference for calculating the zugangsfaktor. Parameters ---------- geburtsjahr See basic input variable :ref:`geburtsjahr <geburtsjahr>`. geburtsmonat See basic input variable :ref:`geburtsmonat <geburtsmonat>`. ges_rente_params See params documentation :ref:`ges_rente_params <ges_rente_params>`. Returns ------- Full retirement age (without deductions) for long term insured. """ # From 1951 on, the altersgrenze of langjährig Versicherte is equal to the # Regelaltersgrenze which is indpendendent of the birth month and only depends on # the birth year. if geburtsjahr < 1951: x = geburtsjahr + (geburtsmonat - 1) / 12 else: x = geburtsjahr out = piecewise_polynomial( x=x, thresholds=ges_rente_params["altersgrenze_langj_versicherte_abschlagsfrei"][ "thresholds" ], rates=ges_rente_params["altersgrenze_langj_versicherte_abschlagsfrei"]["rates"], intercepts_at_lower_thresholds=ges_rente_params[ "altersgrenze_langj_versicherte_abschlagsfrei" ]["intercepts_at_lower_thresholds"], ) return out @dates_active(start="2012-01-01") def _ges_rente_besond_langj_altersgrenze( geburtsjahr: int, geburtsmonat: int, ges_rente_params: dict, ) -> float: """Calculate the threshold from which very long term insured people (at least 45 years) can claim their full pension without deductions. # ToDo: This function should only exist from 2014-07-01 onwards. Add decorator once # ToDo: this functionality is available. Parameters ---------- geburtsjahr See basic input variable :ref:`geburtsjahr <geburtsjahr>`. ges_rente_params See params documentation :ref:`ges_rente_params <ges_rente_params>`. Returns ------- Full retirement age (without deductions) for very long term insured. """ if geburtsjahr < 1952: x = geburtsjahr + (geburtsmonat - 1) / 12 else: x = geburtsjahr out = piecewise_polynomial( x=x, thresholds=ges_rente_params["altersgrenze_besonders_langj_versicherte"][ "thresholds" ], rates=ges_rente_params["altersgrenze_besonders_langj_versicherte"]["rates"], intercepts_at_lower_thresholds=ges_rente_params[ "altersgrenze_besonders_langj_versicherte" ]["intercepts_at_lower_thresholds"], ) return out
[docs]def ges_rente_vorauss_vorzeitig( ges_rente_vorauss_frauen: bool, ges_rente_vorauss_langj: bool, ) -> bool: """Function determining eligibility for early retirement. Can only be claimed if eligible for "Rente für langjährig Versicherte". or "Rente für Frauen" (or -not yet implemented - for disabled). Parameters ---------- ges_rente_vorauss_frauen See :func:`ges_rente_vorauss_frauen`. ges_rente_vorauss_langj See :func:`ges_rente_vorauss_langj`. Returns ------- Eligibility as bool. """ out = ges_rente_vorauss_frauen or ges_rente_vorauss_langj return out
[docs]def ges_rente_vorauss_regelrente(ges_rente_wartezeit_5: float) -> bool: """Function determining the eligibility for the Regelaltersrente. Parameters ---------- ges_rente_wartezeit_5 See :func:`ges_rente_wartezeit_5`. Returns ------- Eligibility as bool. """ out = ges_rente_wartezeit_5 >= 5 return out
[docs]def ges_rente_vorauss_frauen( # noqa: PLR0913 weiblich: bool, ges_rente_wartezeit_15: float, y_pflichtbeitr_ab_40: float, alter: int, geburtsjahr: int, ges_rente_params: dict, ) -> bool: """Function determining the eligibility for Altersrente für Frauen (pension for women) Wartezeit 15 years, contributions 10 years after age 40, being a women. Parameters ---------- weiblich See basic input variable :ref:`weiblich <weiblich>`. ges_rente_wartezeit_15 See :func:`ges_rente_wartezeit_15` y_pflichtbeitr_ab_40 See basic input variable :ref:`y_pflichtbeitr_ab_40 <y_pflichtbeitr_ab_40>`. alter See basic input variable :ref:`alter <alter>`. geburtsjahr See basic input variable :ref:`geburtsjahr <geburtsjahr>`. ges_rente_params See params documentation :ref:`ges_rente_params <ges_rente_params>`. Returns ------- Eligibility as bool. """ altersgrenze_vorzeitig = piecewise_polynomial( x=geburtsjahr, thresholds=ges_rente_params["altersgrenze_für_frauen_vorzeitig"]["thresholds"], rates=ges_rente_params["altersgrenze_für_frauen_vorzeitig"]["rates"], intercepts_at_lower_thresholds=ges_rente_params[ "altersgrenze_für_frauen_vorzeitig" ]["intercepts_at_lower_thresholds"], ) out = ( weiblich and ges_rente_wartezeit_15 >= 15 and y_pflichtbeitr_ab_40 >= 10 and alter >= altersgrenze_vorzeitig ) return out
[docs]def ges_rente_vorauss_langj( ges_rente_wartezeit_35: float, alter: int, ges_rente_params: dict, ) -> bool: """Determining the eligibility for Altersrente für langjährig Versicherte (pension for long-term insured). Wartezeit 35 years. Parameters ---------- ges_rente_wartezeit_35 See :func:`ges_rente_wartezeit_35`. alter See basic input variable :ref:`alter <alter>`. ges_rente_params See params documentation :ref:`ges_rente_params <ges_rente_params>`. Returns ------- Eligibility as bool. """ out = (alter >= ges_rente_params["altersgrenze_langj_versicherte_vorzeitig"]) and ( ges_rente_wartezeit_35 >= 35 ) return out
[docs]@dates_active(start="2012-01-01") def ges_rente_vorauss_besond_langj(ges_rente_wartezeit_45: float) -> bool: """Determining the eligibility for Altersrente für besonders langjährig Versicherte (pension for very long-term insured). Wartezeit 45 years. aka "Rente mit 63". Parameters ---------- ges_rente_wartezeit_45 See :func:`ges_rente_wartezeit_45` Returns ------- Eligibility as bool. """ out = ges_rente_wartezeit_45 >= 45 return out
[docs]def ges_rente_wartezeit_5( m_pflichtbeitrag: float, m_freiw_beitrag: float, m_ersatzzeit: float ) -> float: """Aggregates time periods that are relevant for the general eligibility of the regular pension (regelaltersrente). "Allgemeine Wartezeit". Parameters ---------- m_pflichtbeitrag See basic input variable :ref:`m_pflichtbeitrag <m_pflichtbeitrag>`. m_freiw_beitrag See basic input variable :ref:`m_freiw_beitrag <m_freiw_beitrag>`. m_ersatzzeit See basic input variable :ref:`m_ersatzzeit <m_ersatzzeit>`. Returns ------- Wartezeit in years. """ out = (m_pflichtbeitrag + m_freiw_beitrag + m_ersatzzeit) / 12 return out
[docs]def ges_rente_wartezeit_15( m_pflichtbeitrag: float, m_freiw_beitrag: float, m_ersatzzeit: float ) -> float: """Aggregates time periods that are relevant for the Altersrente für Frauen and Leistungen zur Teilhabe. Wartezeit von 15 Jahren. Parameters ---------- m_pflichtbeitrag See basic input variable :ref:`m_pflichtbeitrag <m_pflichtbeitrag>`. m_freiw_beitrag See basic input variable :ref:`m_freiw_beitrag <m_freiw_beitrag>`. m_ersatzzeit See basic input variable :ref:`m_ersatzzeit <m_ersatzzeit>`. Returns ------- Wartezeit in years """ out = (m_pflichtbeitrag + m_freiw_beitrag + m_ersatzzeit) / 12 return out
[docs]def ges_rente_wartezeit_35( # noqa: PLR0913 m_pflichtbeitrag: float, m_freiw_beitrag: float, ges_rente_anrechnungszeit: float, m_ersatzzeit: float, m_kind_berücks_zeit: float, m_pfleg_berücks_zeit: float, ) -> float: """Aggregates time periods that are relevant for the eligibility of Altersrente für langjährig Versicherte (pension for long-term insured). Wartezeit von 35 Jahren. All "rentenrechtliche Zeiten" are considered. Parameters ---------- m_pflichtbeitrag See basic input variable :ref:`m_pflichtbeitrag <m_pflichtbeitrag>`. m_freiw_beitrag See basic input variable :ref:`m_freiw_beitrag <m_freiw_beitrag>`. m_ersatzzeit See basic input variable :ref:`m_ersatzzeit <m_ersatzzeit>`. ges_rente_anrechnungszeit See :func:`ges_rente_anrechnungszeit` m_kind_berücks_zeit See basic input variable :ref:`m_kind_berücks_zeit <m_kind_berücks_zeit>`. m_pfleg_berücks_zeit See basic input variable :ref:`m_pfleg_berücks_zeit <m_pfleg_berücks_zeit>` Returns ------- Wartezeit in years """ out = ( m_pflichtbeitrag + m_freiw_beitrag + ges_rente_anrechnungszeit + m_ersatzzeit + m_pfleg_berücks_zeit + m_kind_berücks_zeit ) / 12 return out
[docs]def ges_rente_wartezeit_45( # noqa: PLR0913 m_pflichtbeitrag: float, m_freiw_beitrag: float, ges_rente_anrechnungszeit_45: float, m_ersatzzeit: float, m_kind_berücks_zeit: float, m_pfleg_berücks_zeit: float, ) -> float: """Aggregates time periods that are relevant for the eligibility of Altersrente für besonders langjährig Versicherte (pension for very long-term insured). Wartezeit von 45 Jahren. Not all "rentenrechtliche Zeiten" are considered. Years with voluntary contributions are only considered if at least 18 years of mandatory contributions (m_pflichtbeitrag). Not all ges_rente_anrechnungszeiten are considered, but only specific ones (e.g. ALG I, Kurzarbeit but not ALG II). Parameters ---------- m_pflichtbeitrag See basic input variable :ref:`m_pflichtbeitrag <m_pflichtbeitrag>`. m_freiw_beitrag See basic input variable :ref:`m_freiw_beitrag <m_freiw_beitrag>`. ges_rente_anrechnungszeit_45 See :func:`ges_rente_anrechnungszeit_45`. m_ersatzzeit See basic input variable :ref:`m_ersatzzeit <m_ersatzzeit>`. m_kind_berücks_zeit See basic input variable :ref:`m_kind_berücks_zeit <m_kind_berücks_zeit>`. m_pfleg_berücks_zeit See basic input variable :ref:`m_pfleg_berücks_zeit <m_pfleg_berücks_zeit>`. Returns ------- Wartezeit in years """ if m_pflichtbeitrag >= (18 * 12): freiwilligbeitr = m_freiw_beitrag else: freiwilligbeitr = 0 out = ( m_pflichtbeitrag + freiwilligbeitr + ges_rente_anrechnungszeit_45 + m_ersatzzeit + m_pfleg_berücks_zeit + m_kind_berücks_zeit ) / 12 return out
[docs]def ges_rente_anrechnungszeit( # noqa: PLR0913 m_arbeitsunfähig: float, m_krank_ab_16_bis_24: float, m_mutterschutz: float, m_arbeitslos: float, m_ausbild_suche: float, m_schul_ausbild: float, ) -> float: """Adds up all times that are accounted for in "Anrechnungszeiten" relevant for "Wartezeit von 35 Jahren" i.e. for Altersrente für langjährig Versicherte (pension for long term insured). (Ref: Studientext der Deutschen Rentenversicherung, Nr. 19, Wartezeiten, Ausgabe 2021, S. 24.) Parameters ---------- m_arbeitsunfähig See basic input variable :ref:`m_arbeitsunfähig <m_arbeitsunfähig>`. m_krank_ab_16_bis_24 See basic input variable :ref:`m_krank_ab_16_bis_24 <m_krank_ab_16_bis_24>`. m_mutterschutz See basic input variable :ref:`m_mutterschutz <m_mutterschutz>`. m_arbeitslos See basic input variable :ref:`m_arbeitslos <m_arbeitslos>`. m_ausbild_suche See basic input variable :ref:`m_ausbild_suche <m_ausbild_suche>`. m_schul_ausbild See basic input variable :ref:`m_schul_ausbild <m_schul_ausbild>`. Returns ------- Anrechnungszeit in months """ out = ( m_arbeitsunfähig + m_krank_ab_16_bis_24 + m_mutterschutz + m_arbeitslos + m_ausbild_suche + m_schul_ausbild ) return out
[docs]def ges_rente_anrechnungszeit_45( m_arbeitsunfähig: float, m_alg1_übergang: float, m_geringf_beschäft: float, ) -> float: """Adds up all times NOT included in Beitragszeiten, Berücksichtigungszeiten, Ersatzzeiten (a variant of Anrechnungszeiten) that are accounted for in "Wartezeit von 45 Jahren" i.e. for Altersrente für besonders langjährig Versicherte (pension for very long term insured). "nur Anrechnungszeiten mit Bezug von Entgeltersatzleistungen der Arbeitsförderung, Leistungen bei Krankheit und Übergangsgeld". (Ref: Studientext der Deutschen Rentenversicherung, Nr. 19, Wartezeiten, Ausgabe 2021, S. 24) Parameters ---------- m_arbeitsunfähig See basic input variable :ref:`m_arbeitsunfähig <m_arbeitsunfähig>`. m_alg1_übergang See basic input variable :ref:`m_alg1_übergang <m_alg1_übergang>`. m_geringf_beschäft See basic input variable :ref:`m_geringf_beschäft <m_geringf_beschäft>`. Returns ------- Anrechnungszeit in months. """ out = m_arbeitsunfähig + m_alg1_übergang + m_geringf_beschäft return out