QuentinL52 commited on
Commit
2db43b3
·
verified ·
1 Parent(s): fc1fade

Update src/agents/scoring_agent.py

Browse files
Files changed (1) hide show
  1. src/agents/scoring_agent.py +92 -6
src/agents/scoring_agent.py CHANGED
@@ -1,4 +1,5 @@
1
  import json
 
2
  import logging
3
  from datetime import datetime
4
  from typing import Dict, List, Any
@@ -127,14 +128,99 @@ class ScoringAgent:
127
  if not date_str or not isinstance(date_str, str):
128
  return None
129
 
130
- date_str_lower = date_str.lower()
131
- if date_str_lower in ["aujourd'hui", "maintenant", "en cours", "current"]:
132
  return datetime.now()
133
 
134
- for fmt in ("%m/%Y", "%Y"):
135
- parsed_date = datetime.strptime(date_str, fmt)
136
- if parsed_date:
137
- return parsed_date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
138
 
139
  return None
140
 
 
1
  import json
2
+ import re
3
  import logging
4
  from datetime import datetime
5
  from typing import Dict, List, Any
 
128
  if not date_str or not isinstance(date_str, str):
129
  return None
130
 
131
+ date_str_lower = date_str.lower().strip()
132
+ if date_str_lower in ["aujourd'hui", "maintenant", "en cours", "current", "présent", "actuellement"]:
133
  return datetime.now()
134
 
135
+ # Nettoyer la chaîne de date
136
+ date_str_clean = date_str.strip()
137
+
138
+ # Validation préalable avant parsing
139
+ validated_date = self._validate_and_parse_date(date_str_clean)
140
+ if validated_date:
141
+ return validated_date
142
+
143
+ # Tentative d'extraction de l'année seulement
144
+ year_match = re.search(r'\b(20\d{2}|19\d{2})\b', date_str)
145
+ if year_match:
146
+ year = int(year_match.group(1))
147
+ return datetime(year, 1, 1)
148
+
149
+ return None
150
+
151
+ def _validate_and_parse_date(self, date_str: str) -> datetime:
152
+ """Valide et parse une date en vérifiant le format avant parsing"""
153
+
154
+ # Format YYYY
155
+ if re.match(r'^\d{4}
156
+
157
+ def _calculate_duration_in_years(self, start_date_str: str, end_date_str: str) -> float:
158
+ start_date = self._parse_date(start_date_str)
159
+ end_date = self._parse_date(end_date_str)
160
+
161
+ if start_date and end_date:
162
+ if end_date < start_date:
163
+ return 0.0
164
+ return (end_date - start_date).days / 365.25
165
+
166
+ return 0.0, date_str):
167
+ year = int(date_str)
168
+ if 1900 <= year <= 2030:
169
+ return datetime(year, 1, 1)
170
+
171
+ # Format MM/YYYY
172
+ if re.match(r'^\d{1,2}/\d{4}
173
+
174
+ def _calculate_duration_in_years(self, start_date_str: str, end_date_str: str) -> float:
175
+ start_date = self._parse_date(start_date_str)
176
+ end_date = self._parse_date(end_date_str)
177
+
178
+ if start_date and end_date:
179
+ if end_date < start_date:
180
+ return 0.0
181
+ return (end_date - start_date).days / 365.25
182
+
183
+ return 0.0, date_str):
184
+ parts = date_str.split('/')
185
+ month, year = int(parts[0]), int(parts[1])
186
+ if 1 <= month <= 12 and 1900 <= year <= 2030:
187
+ return datetime(year, month, 1)
188
+
189
+ # Format YYYY-MM
190
+ if re.match(r'^\d{4}-\d{1,2}
191
+
192
+ def _calculate_duration_in_years(self, start_date_str: str, end_date_str: str) -> float:
193
+ start_date = self._parse_date(start_date_str)
194
+ end_date = self._parse_date(end_date_str)
195
+
196
+ if start_date and end_date:
197
+ if end_date < start_date:
198
+ return 0.0
199
+ return (end_date - start_date).days / 365.25
200
+
201
+ return 0.0, date_str):
202
+ parts = date_str.split('-')
203
+ year, month = int(parts[0]), int(parts[1])
204
+ if 1 <= month <= 12 and 1900 <= year <= 2030:
205
+ return datetime(year, month, 1)
206
+
207
+ # Format DD/MM/YYYY
208
+ if re.match(r'^\d{1,2}/\d{1,2}/\d{4}
209
+
210
+ def _calculate_duration_in_years(self, start_date_str: str, end_date_str: str) -> float:
211
+ start_date = self._parse_date(start_date_str)
212
+ end_date = self._parse_date(end_date_str)
213
+
214
+ if start_date and end_date:
215
+ if end_date < start_date:
216
+ return 0.0
217
+ return (end_date - start_date).days / 365.25
218
+
219
+ return 0.0, date_str):
220
+ parts = date_str.split('/')
221
+ day, month, year = int(parts[0]), int(parts[1]), int(parts[2])
222
+ if 1 <= day <= 31 and 1 <= month <= 12 and 1900 <= year <= 2030:
223
+ return datetime(year, month, day)
224
 
225
  return None
226