# ----------------------------------------------------------------------------- # Immo-Ka — Agrégateur de maisons à vendre (province de Québec) # Auteur : Simon-Pierre Boucher — contact@spboucher.ai # mortgage/providers/mcap.py : MCAP — distribution 100 % courtiers, aucune # table publique de taux par terme (vérifié 2026-08). Seul signal public : # le taux préférentiel MCAP (+ date d'effet). Collecté comme référence, # exclu du comparateur de prêteurs (rate_type="other", purpose="unknown"). # ----------------------------------------------------------------------------- from __future__ import annotations import re from .base import RateProvider class McapProvider(RateProvider): provider_id = "mcap" institution = "MCAP" source_url = ("https://www.mcap.com/residential-mortgages/advice/" "mortgage-rates-canada") request_delay = 1.0 def fetch(self) -> list[dict]: return self.parse(self.get(self.source_url).text) def parse(self, payload: str) -> list[dict]: m = re.search( r'prime-rate-module.*?round-number-box[^>]*>\s*([\d.]+)\s*%', payload, re.S) if not m: return [] prime = float(m.group(1)) dm = re.search(r'Effective\s+([A-Z][a-z]+ \d{1,2},? \d{4})', payload) conditions = ("Taux préférentiel MCAP" + (f" — en vigueur le {dm.group(1)}" if dm else "")) return [self.make_product( rate=prime, rate_type="other", term_months=12, kind="posted", product_name="Taux préférentiel MCAP", purpose="unknown", conditions=conditions, raw={"prime": prime, "effective": dm.group(1) if dm else None})]