feat: time calculation business logic

This commit is contained in:
2026-03-11 16:39:39 +01:00
parent 1e3f5bb0c7
commit 7babe05412
3 changed files with 67 additions and 0 deletions

0
app/business/__init__.py Normal file
View File

25
app/business/time_calc.py Normal file
View File

@@ -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

42
tests/test_time_calc.py Normal file
View File

@@ -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