Continuer avec Google
ou par email
Creer un compte | Connexion sans mot de passe
Installez l'application sur votre téléphone

Bonjour,

Suivez l'avancement de votre dossier. Un avocat spécialisé peut etre assigne automatiquement selon votre zone.

+ Scanner un nouveau ticket
Mes dossiers
Mes outils gratuits
Lettres, calculateurs et guides pour vous préparer — disponibles gratuitement.
📄 Lettres & Formulaires
🚔
Demande de rapport de police
Obtenez le rapport d'infraction complet. Réf. Art. 161 C.p.p.
⚖️
Plaidoyer de non-culpabilité
Déposez votre plaidoyer par écrit. Réf. Art. 149 C.p.p.
🧮 Calculateurs
🔢
Points d'inaptitude SAAQ
Consultez le tableau officiel et calculez votre risque de suspension.
💰
Impact assurance estimé
Estimez l'augmentation de prime liée à de nouveaux points.
🧾
Coût total contravention
Amende + frais de greffe + contribution SAAQ = coût réel.
📆
Calculateur de délais
Délai de plaidoyer (30 j.), date probable d'audience, prescription.
Payer vs Contester
Comparez le coût total de chaque option sur 3 ans.
📚 Guides & Checklists
🗺️ 6 étapes pour contester votre contravention
  1. Plaidoyer de non-culpabilité (dans les 30 jours) — Rendez-vous au greffe ou envoyez votre plaidoyer par courrier recommandé. Réf. Art. 149 du Code de procédure pénale.
  2. Demandez la divulgation de la preuve — Vous avez le droit de voir toute la preuve que le poursuivant entend utiliser contre vous (Réf. Art. 161-162 C.p.p.).
  3. Analysez la preuve reçue — Vérifiez les certificats d'étalonnage, les photos, le rapport de l'agent, les mentions obligatoires sur le constat.
  4. Préparez votre défense — Identifiez les vices de forme, les erreurs sur le constat, les arguments techniques (radar, erreur d'identité, nécessité).
  5. Jour de l'audience — Arrivez 30 min à l'avance, habillez-vous sobrement, parlez au procureur avant l'audience, demandez un arrêt des procédures si applicable.
  6. Après le jugement — Si acquitté, envoyez la lettre à la SAAQ. Si coupable, évaluez l'appel dans les 30 jours (Réf. Art. 291 C.p.p.).
Checklist — Jour de l'audience

Documents à apporter

Copie du constat d'infraction (original si possible)
Preuve de divulgation reçue (rapport, photos, calibration)
Correspondances envoyées au greffe (copies recommandées)
Pièces à conviction : photos du lieu, témoignages écrits
Pièce d'identité avec photo
Carnet de notes avec questions préparées

Tenue vestimentaire

Tenue sobre et respectueuse (évitez casual — t-shirt, shorts)
Pas d'accessoires distrayants

Comportement

Arriver 30 minutes à l'avance
Parler au procureur avant l'audience — négociation possible
S'adresser au juge : «Votre Honneur»
Parler clairement, ne pas interrompre
Si agent absent : demander l'arrêt des procédures
Si incertain d'une question : «Je ne sais pas» est une réponse valable
👤 Guide — Se représenter seul (partie non représentée)

Vos droits fondamentaux

Au Québec, vous avez le droit absolu de vous représenter seul devant la cour municipale pour une infraction pénale réglementaire (Code de procédure pénale, art. 128). Le tribunal est tenu de vous expliquer la procédure et de vous permettre de présenter vos arguments.

Droits spécifiques

Droit à la divulgation de toute la preuve avant le procès (Art. 161-162 C.p.p.)
Droit de contre-interroger les témoins (Art. 205 C.p.p.)
Droit de présenter votre propre preuve et témoins
Droit d'être jugé dans un délai raisonnable (Charte canadienne, art. 11b)
Droit à un interprète si nécessaire
Droit d'appel dans les 30 jours du jugement (Art. 291 C.p.p.)

Ressources utiles gratuites

  • Éducaloi.qc.ca — explications vulgarisées
  • jurisprudence — jurisprudence québécoise en ligne
  • Aide juridique (si revenus admissibles) — 1 800 842-2213
  • Cliniques juridiques universitaires (UDEM, ULAVAL, UQO)
FAQ par type d'infraction

Excès de vitesse

Q : Peut-on contester un ticket de radar fixe ?
Oui. Demandez le certificat d'étalonnage du radar et les données de calibration. Une erreur de plus de ±5 km/h peut invalider la preuve.
Q : L'erreur de 10 km/h est-elle automatique au Québec ?
Non, il n'y a pas de marge légale automatique au Code de la sécurité routière. Cependant, la tolérance technique des radars est un argument de défense recevable.

Feu rouge (système photographique)

Q : Comment savoir si j'ai vraiment brûlé le rouge ?
Demandez les photos et vidéos via la lettre de demande prévue dans les outils ci-dessus. Vous pouvez vérifier le séquençage des feux et l'horodatage.
Q : Est-ce que le propriétaire du véhicule est toujours responsable ?
Pour les infractions photographiées, la responsabilité est celle du propriétaire inscrit au SAAQ, sauf si vous désignez le conducteur (Art. 612.1 CSR).

Téléphone au volant

Q : L'agent doit-il prouver que j'utilisais activement le téléphone ?
Oui. Simplement «tenir» un appareil sans l'utiliser peut être contestable selon le libellé exact. La preuve doit démontrer l'utilisation active (Art. 443.1 CSR).

Arrêt obligatoire (stop)

Q : Dois-je m'immobiliser complètement ?
Oui, un arrêt complet est requis (immobilisation totale du véhicule). Cependant, la position de l'agent, sa ligne de vue et les conditions météo sont des arguments valides.

Points d'inaptitude et suspension

Q : À combien de points mon permis est-il suspendu ?
Pour un conducteur régulier : avertissement à 12 points, suspension à 15 points. Pour les titulaires d'un permis probatoire : avertissement à 6, suspension à 9 points.
`); win.document.close(); } /* ==================================================== SCAN WIDGET MODAL — integration scan dans portail citoyen ==================================================== */ function openScanModal() { var modal = document.getElementById('scanModal'); if (!modal) { modal = document.createElement('div'); modal.id = 'scanModal'; modal.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,.6);z-index:10000;display:flex;align-items:center;justify-content:center;padding:20px;'; modal.innerHTML = '
' + '
' + 'Scanner un ticket' + '' + '
' + '' + '
'; document.body.appendChild(modal); modal.addEventListener('click', function(e){ if(e.target===modal) closeScanModal(); }); } modal.style.display = 'flex'; } function closeScanModal() { var m = document.getElementById('scanModal'); if (m) m.style.display = 'none'; } window.addEventListener('message', function(e) { if (e.data && e.data.type === 'aiticketinfo:scan_complete') { closeScanModal(); setTimeout(function(){ if (typeof loadDashboard === 'function') loadDashboard(); else location.reload(); }, 1500); } }); document.addEventListener('DOMContentLoaded', function() { document.querySelectorAll('a[href="/scanner.html"], a[href^="/scanner.html?"]').forEach(function(a){ a.addEventListener('click', function(ev){ ev.preventDefault(); openScanModal(); }); }); }); /* ==================================================== CALCULATEURS ==================================================== */ /* ---- Calc 1: Points d'inaptitude ---- */ function calcPointsInapt() { var sel = document.getElementById('pi-infraction'); var pts = parseInt(sel.value) || 0; var actuels = parseInt(document.getElementById('pi-actuels').value) || 0; var typePermis = document.getElementById('pi-type-permis').value; var result = document.getElementById('pi-result'); var body = document.getElementById('pi-result-body'); if (!pts) { result.classList.remove('show'); return; } var total = actuels + pts; var seuilAvert = typePermis === 'probatoire' ? 6 : 12; var seuilSusp = typePermis === 'probatoire' ? 9 : 15; var statut, statusColor; if (total >= seuilSusp) { statut = '⛔ SUSPENSION immédiate probable'; statusColor = '#c5221f'; } else if (total >= seuilAvert) { statut = '⚠️ Avertissement — à risque de suspension'; statusColor = '#e37400'; } else { statut = '✅ Sous le seuil d\'avertissement'; statusColor = '#1e8e3e'; } body.innerHTML = `
Points actuels au dossier${actuels} pts
Points de cette infraction+ ${pts} pts
Total après infraction${total} pts / ${seuilSusp}
${statut}
Avertissement : ${seuilAvert} pts · Suspension : ${seuilSusp} pts
(Permis ${typePermis === 'probatoire' ? 'probatoire/apprenti' : 'régulier'})
`; result.classList.add('show'); } /* ---- Calc 2: Impact assurance ---- */ function calcImpactAssurance() { var actuels = parseInt(document.getElementById('ia-actuels').value) || 0; var nouveaux = parseInt(document.getElementById('ia-nouveaux').value) || 0; var prime = parseFloat(document.getElementById('ia-prime').value) || 0; var result = document.getElementById('ia-result'); var body = document.getElementById('ia-result-body'); if (!nouveaux || !prime) { result.classList.remove('show'); return; } var total = actuels + nouveaux; // Barème approximatif basé sur données marché QC // 0-3 pts: +0 à +15%, 4-6 pts: +15% à +35%, 7-9 pts: +35% à +60%, 10-12 pts: +60% à +100%, 13+: +100%+ function getPct(pts) { if (pts <= 0) return 0; if (pts <= 3) return pts * 5; // 5% par point jusqu'à 3 if (pts <= 6) return 15 + (pts-3) * 8; // +8% par point de 4 à 6 if (pts <= 9) return 39 + (pts-6) * 9; // +9% par point de 7 à 9 if (pts <= 12) return 66 + (pts-9) * 12; return 102 + (pts-12) * 15; } var pctAvant = getPct(actuels); var pctApres = getPct(total); var augPct = pctApres - pctAvant; var augDollars = Math.round(prime * augPct / 100); var primeSurcharge = Math.round(prime * (1 + pctApres/100)); var coutSur2ans = augDollars * 2; body.innerHTML = `
Prime actuelle (annuelle)$${prime.toFixed(0)}
Surcharge estimée suite aux points+${augPct}%
Augmentation annuelle estimée+$${augDollars}
Nouvelle prime annuelle estimée$${primeSurcharge}
Sur 2 ans, cette infraction pourrait vous coûter environ $${coutSur2ans} en surcharges d'assurance supplémentaires.
`; result.classList.add('show'); } /* ---- Calc 3: Coût total contravention ---- */ function calcCoutTotal() { var amende = parseFloat(document.getElementById('ct-amende').value) || 0; var type = document.getElementById('ct-type').value; var result = document.getElementById('ct-result'); var body = document.getElementById('ct-result-body'); if (!amende) { result.classList.remove('show'); return; } var fraisGreffe, contribution, total; if (type === 'stationnement') { fraisGreffe = 0; contribution = 0; total = amende; body.innerHTML = `
Montant de l'amende$${amende.toFixed(2)}
Coût total$${total.toFixed(2)}
Les contraventions de stationnement ne comportent généralement pas de frais de greffe additionnels. Aucun point d'inaptitude.
`; } else { // Frais de greffe : 40$ à 55$ selon la cour — on utilise 45$ comme moyenne fraisGreffe = 45; // Contribution au Fonds d'aide aux victimes (15% de l'amende, min 12$, max 60$) contribution = Math.min(Math.max(Math.round(amende * 0.15), 12), 60); total = amende + fraisGreffe + contribution; var pct = Math.round(((total - amende) / amende) * 100); body.innerHTML = `
Montant de l'amende$${amende.toFixed(2)}
Frais de greffe (art. 345.1 C.p.p.)+$${fraisGreffe.toFixed(2)}
Contribution Fonds victimes (15%)+$${contribution.toFixed(2)}
Coût total réel$${total.toFixed(2)}
Les frais additionnels représentent ${pct}% de l'amende. Le coût réel est $${(total - amende).toFixed(2)} de plus que l'amende affichée.
`; } result.classList.add('show'); } /* ---- Calc 4: Délais ---- */ function calcDelais() { var dateStr = document.getElementById('del-date').value; var courType = document.getElementById('del-cour-type').value; var result = document.getElementById('del-result'); var body = document.getElementById('del-result-body'); if (!dateStr) { result.classList.remove('show'); return; } var reception = new Date(dateStr + 'T12:00:00'); var delaiPlaidoyer = 30; // Art. 149 C.p.p. var deadlinePlaidoyer = addDays(reception, delaiPlaidoyer); // Audience estimée: 60-120 jours après plaidoyer (variable selon cour) var audienceMin = addDays(deadlinePlaidoyer, 60); var audienceMax = addDays(deadlinePlaidoyer, 120); // Prescription: 1 an pour infractions réglementaires (Art. 14 C.p.p.) var prescription = addDays(reception, 365); var today = new Date(); var joursRestantsPlaidoyer = Math.max(0, Math.floor((deadlinePlaidoyer - today) / 86400000)); var urgence = joursRestantsPlaidoyer <= 5 ? ' ⚠️ URGENT' : joursRestantsPlaidoyer <= 14 ? ' ⚠️ Bientôt' : ''; body.innerHTML = `
Date de réception${fmtDate(reception)}
Délai pour plaider (Art. 149 C.p.p.)${fmtDate(deadlinePlaidoyer)}${urgence}
Jours restants pour plaider${joursRestantsPlaidoyer} jours${urgence}
Audience estimée (après plaidoyer)${fmtDate(audienceMin)} — ${fmtDate(audienceMax)}
Prescription de l'infraction${fmtDate(prescription)}
${joursRestantsPlaidoyer <= 14 ? '
⚠️ Délai serré : Rendez-vous au greffe ou envoyez votre plaidoyer par courrier recommandé dès que possible.
' : '
Vous avez encore du temps, mais n\'attendez pas. Déposez votre plaidoyer le plus tôt possible.
'}`; result.classList.add('show'); } /* ---- Calc 5: Payer vs Contester ---- */ function calcPayerContester() { var amende = parseFloat(document.getElementById('pc-amende').value) || 0; var points = parseInt(document.getElementById('pc-points').value) || 0; var prime = parseFloat(document.getElementById('pc-prime').value) || 0; var avocat = parseFloat(document.getElementById('pc-avocat').value) || 0; var result = document.getElementById('pc-result'); var body = document.getElementById('pc-result-body'); if (!amende) { result.classList.remove('show'); return; } // Coût de payer var fraisGreffe = 45; var contribution = Math.min(Math.max(Math.round(amende * 0.15), 12), 60); var coutAmende = amende + fraisGreffe + contribution; // Impact assurance sur 2 ans function getPct(pts) { if (pts <= 0) return 0; if (pts <= 3) return pts * 5; if (pts <= 6) return 15 + (pts-3) * 8; if (pts <= 9) return 39 + (pts-6) * 9; if (pts <= 12) return 66 + (pts-9) * 12; return 102 + (pts-12) * 15; } var surchargeAnnuelle = prime > 0 ? Math.round(prime * getPct(points) / 100) : 0; var surcharge2ans = surchargeAnnuelle * 2; var totalPayer = coutAmende + surcharge2ans; // Coût de contester // Hypothèse: 60% de chances de succès en contestation (données moyennes) var chancesSucces = 0.60; var coutContesterGagne = avocat; // pas d'amende, pas de points var coutContesterPerdu = avocat + coutAmende + surcharge2ans; var coutContesterEsperance = Math.round(chancesSucces * coutContesterGagne + (1-chancesSucces) * coutContesterPerdu); var economieEsperee = totalPayer - coutContesterEsperance; body.innerHTML = `
Payer
$${totalPayer.toFixed(0)}
coût certain sur 2 ans
Contester
$${coutContesterEsperance.toFixed(0)}
coût espéré sur 2 ans
Amende + frais greffe + contribution$${coutAmende.toFixed(0)}
Surcharge assurance estimée (2 ans)$${surcharge2ans.toFixed(0)}
Honoraires d'avocat estimés$${avocat.toFixed(0)}
Taux de succès moyen en contestation~60%
Économie espérée si vous contestez${economieEsperee>0?'+':'-'}$${Math.abs(economieEsperee).toFixed(0)}
${economieEsperee > 0 ? '
La contestation semble avantageuse financièrement. Obtenez une analyse gratuite de votre dossier pour connaître vos chances réelles.
' : '
Dans ce scénario, payer pourrait être moins coûteux que contester avec un avocat. Consultez un expert pour évaluer vos chances spécifiques.
'}`; result.classList.add('show'); } // === LOI 25 ACTIONS === function requestLoi25Action(action) { if (!TOKEN) { alert("Connectez-vous."); return; } var actions = {access:"Demande d\'acces envoyee", delete:"Demande de suppression envoyee", export:"Export en cours..."}; fetch(API + "/api/client/loi25-request", { method: "POST", headers: {"Content-Type": "application/json", "Authorization": "Bearer " + TOKEN}, body: JSON.stringify({action: action}) }).then(function(r){return r.json();}).then(function(d){alert(d.message||actions[action]||"OK");}).catch(function(){alert("Erreur. Contactez support@aiticketinfo.com");}); } // === UPDATE STATUS === function updateStatus(uuid, status) { if (!TOKEN) return; var labels = {contestation:"Contestation", regle_hors_cour:"Regle hors cour", gagne:"Gagne", perdu:"Perdu"}; if (!confirm("Changer le statut a: " + (labels[status]||status) + "?")) return; fetch(API + "/api/client/update-status", { method: "POST", headers: {"Content-Type": "application/json", "Authorization": "Bearer " + TOKEN}, body: JSON.stringify({dossier_uuid: uuid, statut: status}) }).then(function(r){return r.json();}).then(function(d){if(d.ok)loadDossiers();else alert(d.error||"Erreur");}).catch(function(){alert("Erreur");}); } // === PAYMENT INFO BY CITY === function loadPaymentInfo(uuid, ville) { var el = document.getElementById("payment-content-" + uuid); if (!el) return; if (el.style.display !== "none") { el.style.display = "none"; return; } el.style.display = "block"; el.innerHTML = "Chargement des infos de paiement..."; fetch(API + "/greffes/match?ville=" + encodeURIComponent(ville||"")) .then(function(r){return r.json();}).then(function(data){ var best = data && data.best ? data.best : data; if (!best || !best.nom) { el.innerHTML = "Infos non disponibles. Contactez votre cour directement."; return; } var h = "
" + best.nom + "
"; if (best.adresse) h += "
📍 " + best.adresse + (best.code_postal ? ", " + best.code_postal : "") + "
"; if (best.telephone) h += "
📞 " + best.telephone + "
"; if (best.email) h += "
📧 " + best.email + "
"; h += "
"; h += "Modes de paiement:
En personne au greffe
Par courrier (cheque)
En ligne (si disponible)
Par telephone (si disponible)
"; el.innerHTML = h; }).catch(function(){ el.innerHTML = "Erreur de chargement."; }); } // === AUTO-FILL FROM DOSSIER === function autoFillFromDossier(uuid) { var dos = (window._aitiDossiers || []).find(function(d){return d.dossier_uuid === uuid;}); if (!dos) return; var ville = dos.ville || ''; var greffe = dos.greffe ? dos.greffe.nom : ''; var courtName = greffe || (ville ? 'Cour municipale de ' + ville : ''); var rpFields = {'rp-nom':dos.client_nom||'','rp-constat':dos.numero_constat||'','rp-cour':courtName}; var ncFields = {'nc-nom':dos.client_nom||'','nc-constat':dos.numero_constat||'','nc-cour':courtName}; var calcFields = {'ct-amende':dos.montant_amende||'','pc-amende':dos.montant_amende||'','pc-points':dos.points_inaptitude||''}; var all = Object.assign({}, rpFields, ncFields, calcFields); for (var id in all) { var el = document.getElementById(id); if (el && !el.value && all[id]) el.value = all[id]; } if (dos.montant_amende) { try { calcCoutTotal(); calcPayerContester(); } catch(e){} } }