harshrawat18's picture
Upload folder using huggingface_hub
87e921a verified
Raw
History Blame Contribute Delete
2.71 kB
from openfisca_core.taxbenefitsystems import TaxBenefitSystem
from openfisca_core.simulations import SimulationBuilder
from .entities import entities
from . import variables as vars_module
import inspect
def build_tax_system():
system = TaxBenefitSystem(entities)
# Auto-register all Variable subclasses
for name, obj in inspect.getmembers(vars_module, inspect.isclass):
if hasattr(obj, 'value_type'):
system.add_variable(obj)
return system
TAX_SYSTEM = build_tax_system()
ELIGIBILITY_VARIABLES = [
# National Schemes
"eligible_pm_kisan",
"eligible_pmjay",
"eligible_pmay_gramin",
"eligible_ujjwala",
"eligible_scholarship_sc_st",
# Rajasthan State Schemes
"eligible_chiranjeevi",
"eligible_palanhar",
"eligible_ekal_nari",
"eligible_devnarayan_scholarship",
"eligible_incentive_to_girls",
"eligible_widow_bed_scheme",
"eligible_nirman_shramik_auzaar",
"eligible_indira_mahila_shakti",
"eligible_ayushman_arogya"
]
def check_eligibility(profile: dict) -> dict:
"""
Takes a citizen profile dict, returns dict of scheme eligibility.
Pure deterministic logic — no LLM involved.
Sprint 40: Temporal dynamism — period key is now derived from
the current calendar year instead of hardcoded "2024".
"""
import datetime as _dt
current_year = str(_dt.datetime.now().year)
situation = {
"persons": {
"citizen": {
"annual_income": {current_year: profile.get("annual_income", 0)},
"age": {current_year: profile.get("age", 0)},
"is_farmer": {current_year: profile.get("is_farmer", False)},
"state": {current_year: profile.get("state", "Unknown")},
"caste_category": {current_year: profile.get("caste_category", "General")},
"gender": {current_year: profile.get("gender", "Unknown")},
"is_bpl": {current_year: profile.get("is_bpl", False)},
"land_size_hectares": {current_year: profile.get("land_size_hectares", 0.0)},
"is_disabled": {current_year: profile.get("is_disabled", False)},
"occupation": {current_year: profile.get("occupation", "Unknown")},
}
},
"households": {"household": {"members": ["citizen"]}}
}
# CRITICAL FIX: Use the SimulationBuilder to properly inject the dictionary!
builder = SimulationBuilder()
simulation = builder.build_from_dict(TAX_SYSTEM, situation)
results = {}
for var in ELIGIBILITY_VARIABLES:
results[var] = bool(simulation.calculate(var, current_year)[0])
return results