diff --git a/app/business/__init__.py b/app/business/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/business/time_calc.py b/app/business/time_calc.py new file mode 100644 index 0000000..63c4260 --- /dev/null +++ b/app/business/time_calc.py @@ -0,0 +1,25 @@ +def minutes_to_str(minutes: int) -> str: + sign = "-" if minutes < 0 else "" + minutes = abs(minutes) + return f"{sign}{minutes // 60}h{minutes % 60:02d}" + + +_REFERENCE_MINUTES = { + "WORK": 465, + "TT": 465, + "FORMATION": 465, + "GARDE": 600, + "ASTREINTE": 0, + "RTT": 0, + "CONGE": 0, + "MALADE": 0, + "FERIE": 0, +} + + +def work_minutes_reference(day_type: str) -> int: + return _REFERENCE_MINUTES.get(day_type, 465) + + +def week_balance_minutes(actual_minutes: int, reference_minutes: int) -> int: + return actual_minutes - reference_minutes diff --git a/tests/test_time_calc.py b/tests/test_time_calc.py new file mode 100644 index 0000000..87f24c6 --- /dev/null +++ b/tests/test_time_calc.py @@ -0,0 +1,42 @@ +from app.business.time_calc import ( + minutes_to_str, + work_minutes_reference, + week_balance_minutes, +) + + +def test_minutes_to_str_basic(): + assert minutes_to_str(465) == "7h45" + + +def test_minutes_to_str_zero(): + assert minutes_to_str(0) == "0h00" + + +def test_minutes_to_str_negative(): + assert minutes_to_str(-75) == "-1h15" + + +def test_work_minutes_reference_normal_day(): + assert work_minutes_reference("WORK") == 465 + assert work_minutes_reference("TT") == 465 + assert work_minutes_reference("FORMATION") == 465 + + +def test_work_minutes_reference_garde(): + assert work_minutes_reference("GARDE") == 600 + + +def test_work_minutes_reference_absence(): + assert work_minutes_reference("RTT") == 0 + assert work_minutes_reference("CONGE") == 0 + assert work_minutes_reference("MALADE") == 0 + assert work_minutes_reference("FERIE") == 0 + + +def test_week_balance_positive(): + assert week_balance_minutes(2400, 2325) == 75 + + +def test_week_balance_negative(): + assert week_balance_minutes(2200, 2325) == -125