seed : correspondance sondage à ±1 jour (fin la boucle purge/recréation EN-FR)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 changed file +9 −4
modified
backend/app/seed.py
+9 −4
@@ -139,11 +139,16 @@ def seed_all(db: Session | None = None) -> dict: | ||
| 139 | 139 | pol, _ = get_or_create(db, Mo.Pollster, name=pollster) |
| 140 | 140 | first = grp.iloc[0] |
| 141 | 141 | ss = None if pd.isna(first["sample_size"]) else int(first["sample_size"]) |
| 142 | − # correspondance par (maison, fin de terrain) SANS la taille : | |
| 143 | − # Wikipédia complète souvent n/MoE après coup — même sondage. | |
| 142 | + # correspondance par (maison, fin de terrain ±1 j) SANS la | |
| 143 | + # taille : Wikipédia complète n/MoE après coup, et les | |
| 144 | + # agrégateurs EN/FR datent parfois le même sondage à ±1 jour. | |
| 145 | + fe_d = date.fromisoformat(fe) | |
| 146 | + from datetime import timedelta as _td | |
| 144 | 147 | poll = (db.query(Mo.Poll) |
| 145 | − .filter_by(pollster_id=pol.id, | |
| 146 | − field_end=date.fromisoformat(fe)).first()) | |
| 148 | + .filter(Mo.Poll.pollster_id == pol.id, | |
| 149 | + Mo.Poll.field_end >= fe_d - _td(days=1), | |
| 150 | + Mo.Poll.field_end <= fe_d + _td(days=1)) | |
| 151 | + .first()) | |
| 147 | 152 | if poll is None: |
| 148 | 153 | poll = Mo.Poll( |
| 149 | 154 | election_id=el.id, pollster_id=pol.id, |
| 150 | 155 | |