Vous regardez une annonce de Wrangler 2.8 CRD ? Analysez-la avant d’appeler.
Collez l’annonce ou renseignez l’essentiel. Vous obtenez le prix situé dans le marché, les signaux d’alerte, les points à contrôler en priorité et les questions à poser au vendeur.
L’annonce
Jeep Wrangler JK 2.8 CRD, 177 ch (2007–2010) ou 200 ch (2011–2018). Texte de l’annonce (facultatif) Pré-remplir depuis le texte
AnnéeKilométragePrix demandé (€)CarrosserieUnlimited 4 portes2 portesFinitionJe ne sais pasSportSahara / OverlandRubiconBoîteManuelleAutomatiqueVendeurParticulierProfessionnelPréparationD’origineRehaussé ou gros pneus
Analyser l’annonce
Remplissez l’annonce à gauche : le rapport s’affiche ici, avec la liste des points à cocher pendant la visite.
Analyse indicative, qui ne remplace pas l’inspection d’un professionnel. Les fourchettes de prix sont établies à partir d’un échantillon d’annonces françaises () et les coûts de réparation sont des ordres de grandeur.
[v.km != null ? kmf(v.km) : null, v.body === “4p” ? “Unlimited” : “2 portes”, v.gear === “auto” ? “bo\u00eete automatique” : “bo\u00eete manuelle”, v.prep ? “pr\u00e9par\u00e9” : null]
.filter(Boolean).join(“, “)})); /* Prix */ var sPrice = h(“section”, {class:”block”}); sPrice.appendChild(h(“h3″, {text:”Le prix”})); if (est && v.price != null){ var vt = VERDICT_TXT[est.verdict]; sPrice.appendChild(h(“p”, {class:”verdict v-” + est.verdict, text: vt[0]})); sPrice.appendChild(h(“p”, {text: vt[1]})); var lo = Math.min(est.min * 0.7, v.price * 0.95), hi = Math.max(est.max * 1.3, v.price * 1.05); var pct = function(x){ return clamp((x – lo) / (hi – lo) * 100, 0, 100); }; var gauge = h(“div”, {class:”gauge”, role:”img”, “aria-label”: “Prix demand\u00e9 ” + eur(v.price) + “, fourchette estim\u00e9e de ” + eur(est.min) + ” \u00e0 ” + eur(est.max)}); var zone = h(“div”, {class:”zone”}); zone.style.left = pct(est.min) + “%”; zone.style.width = (pct(est.max) – pct(est.min)) + “%”; var pin = h(“div”, {class:”pin”}, [h(“span”, {text: eur(v.price)}), h(“i”)]); pin.style.left = pct(v.price) + “%”; gauge.appendChild(zone); gauge.appendChild(pin); sPrice.appendChild(gauge); sPrice.appendChild(h(“div”, {class:”gauge-legend”}, [ h(“span”, null, [“Fourchette estim\u00e9e : “, h(“b”, {text: eur(est.min) + ” \u00e0 ” + eur(est.max)})]), h(“span”, {text: “Kilom\u00e9trage habituel \u00e0 cet \u00e2ge : ” + kmf(est.expected)}) ])); } else { sPrice.appendChild(h(“p”, {class:”hint”, text:”Indiquez l’ann\u00e9e et le prix demand\u00e9 pour situer l’annonce dans le march\u00e9.”})); } report.appendChild(sPrice); /* Signaux */ var sSig = h(“section”, {class:”block”}); sSig.appendChild(h(“h3″, {text:”Ce que dit l’annonce”})); var sigs = sc.signals.slice(); if (!v.text.trim()) sSig.appendChild(h(“p”, {class:”hint”, text:”Collez le texte de l’annonce pour d\u00e9tecter les signaux d’alerte et les bons points.”})); else if (!sigs.length) sSig.appendChild(h(“p”, {class:”hint”, text:”Aucun signal particulier d\u00e9tect\u00e9. Une annonce tr\u00e8s courte est en soi un point \u00e0 creuser : demandez l’historique d’entretien.”})); else { var rank = {red:0, amber:1, green:2}; sigs.sort(function(a,b){ return rank[a.lv] – rank[b.lv]; }); sSig.appendChild(h(“ul”, {class:”signals”}, sigs.map(function(s){ return h(“li”, {class:s.lv}, [h(“b”, {text:s.t}), s.x]); }))); } report.appendChild(sSig); /* Points de contr\u00f4le */ var checks = buildChecks(v, sigs); var sChk = h(“section”, {class:”block”}); sChk.appendChild(h(“h3″, {text:”Les points \u00e0 contr\u00f4ler pendant la visite”})); sChk.appendChild(h(“p”, {class:”hint”, text:”Class\u00e9s par priorit\u00e9. Cochez-les au fur et \u00e0 mesure sur place.”})); sChk.appendChild(h(“ul”, {class:”checks”}, checks.map(function(c, i){ var id = “rt4-c” + i; var box = h(“input”, {type:”checkbox”, id:id}); var li = h(“li”, null, [box, h(“label”, {for:id, class:”t”}, [c.t, h(“span”, {class:”tag ” + c.p, text: PRIO_TXT[c.p]})]), h(“span”, {class:”why”, text:c.w})]); box.addEventListener(“change”, function(){ li.classList.toggle(“done”, box.checked); }); return li; }))); report.appendChild(sChk); /* Pannes connues */ var sPan = h(“section”, {class:”block”}); sPan.appendChild(h(“h3″, {text:”Les pannes connues du 2.8 CRD”})); PANNES.forEach(function(p){ sPan.appendChild(h(“details”, null, [h(“summary”, {text:p.t}), h(“p”, {text:p.s}), h(“p”, {class:”cost”, text:”Co\u00fbt : ” + p.c})])); }); report.appendChild(sPan); /* Questions */ var qs = buildQuestions(v); var sQ = h(“section”, {class:”block”}); sQ.appendChild(h(“h3″, {text:”Les questions \u00e0 poser au vendeur”})); sQ.appendChild(h(“ol”, {class:”questions”}, qs.map(function(q){ return h(“li”, {text:q}); }))); var copyBtn = h(“button”, {type:”button”, class:”btn-ghost”, text:”Copier les questions”}); var copyNote = h(“p”, {class:”note”, “aria-live”:”polite”}); copyBtn.addEventListener(“click”, function(){ var txt = qs.map(function(q, i){ return (i+1) + “. ” + q; }).join(“\n”); var done = function(){ copyNote.textContent = “Questions copi\u00e9es.”; track(“questions_copiees”); }; if (navigator.clipboard && navigator.clipboard.writeText) navigator.clipboard.writeText(txt).then(done, function(){ copyNote.textContent = “Copie impossible ici : s\u00e9lectionnez la liste \u00e0 la main.”; }); else copyNote.textContent = “Copie impossible ici : s\u00e9lectionnez la liste \u00e0 la main.”; }); sQ.appendChild(copyBtn); sQ.appendChild(copyNote); report.appendChild(sQ); /* Appel \u00e0 l’action : le test de la demande */ report.appendChild(buildCta(v, est)); lastRun = {v:v, est:est}; track(“analyse_lancee”, {version: ver, annee: v.year, km: v.km, prix: v.price, verdict: est && est.verdict, signaux: sigs.length, prepare: v.prep}); if (window.matchMedia(“(max-width: 919px)”).matches) report.scrollIntoView({behavior: window.matchMedia(“(prefers-reduced-motion: reduce)”).matches ? “auto” : “smooth”, block:”start”}); } function buildCta(v, est){ var box = h(“div”, {class:”cta”}); box.appendChild(h(“h3″, {text:”Un avis d’expert sur cette annonce ?”})); box.appendChild(h(“p”, {text:”Nous pr\u00e9parons une analyse d\u00e9taill\u00e9e par un sp\u00e9cialiste : lecture compl\u00e8te de l’annonce et des photos, estimation des frais \u00e0 pr\u00e9voir, argumentaire de n\u00e9gociation. Inscrivez-vous pour la tester parmi les premiers.”})); var email = h(“input”, {type:”email”, id:”rt4-email”, placeholder:”Votre e-mail”, autocomplete:”email”, “aria-label”:”Votre e-mail”}); var horizon = h(“select”, {id:”rt4-horizon”, “aria-label”:”Quand comptez-vous acheter ?”}, [ h(“option”, {value:””, text:”Achat pr\u00e9vu\u2026″}), h(“option”, {value:”mois”, text:”Ce mois-ci”}), h(“option”, {value:”3mois”, text:”D’ici 3 mois”}), h(“option”, {value:”veille”, text:”Je me renseigne”}) ]); var btn = h(“button”, {type:”button”, text:”M’inscrire”}); var note = h(“p”, {class:”note”, “aria-live”:”polite”}); box.appendChild(h(“div”, {class:”row”}, [email, horizon, btn])); box.appendChild(note); box.appendChild(h(“p”, {class:”note”, text:”Votre e-mail sert uniquement \u00e0 vous pr\u00e9venir du lancement. D\u00e9sinscription en un clic.”})); var opened = false; email.addEventListener(“focus”, function(){ if (!opened){ opened = true; track(“avis_expert_interet”, {verdict: est && est.verdict}); } }); btn.addEventListener(“click”, function(){ var val = email.value.trim(); if (!/^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/.test(val)){ note.textContent = “Saisissez une adresse e-mail valide, par exemple nom@exemple.fr.”; email.focus(); return; } btn.disabled = true; note.textContent = “Inscription en cours\u2026”; var payload = {email:val, horizon:horizon.value || “non renseign\u00e9″, modele:”Wrangler JK 2.8 CRD”, annee:v.year || null, km:v.km || null, prix:v.price || null, verdict:(est && est.verdict) || null, prepare:!!v.prep, source:location.hostname || “inconnu”, date:new Date().toISOString()}; saveWaitlist(payload).then(function(where){ track(“liste_attente_inscription”, {horizon: payload.horizon, verdict: payload.verdict}); note.textContent = where === “none” ? “Merci ! Votre int\u00e9r\u00eat est bien not\u00e9. (D\u00e9monstration : l’inscription n’est pas encore reli\u00e9e \u00e0 l’outil d’e-mailing.)” : “Inscription enregistr\u00e9e. Vous serez pr\u00e9venu d\u00e8s l’ouverture.”; email.value = “”; }).catch(function(){ btn.disabled = false; note.textContent = “L’inscription n’a pas pu \u00eatre enregistr\u00e9e. R\u00e9essayez dans un instant.”; }); }); return box; } function saveWaitlist(p){ if (CFG.waitlistEndpoint){ return fetch(CFG.waitlistEndpoint, {method:”POST”, headers:{“Content-Type”:”application/json”}, body:JSON.stringify(p)}) .then(function(r){ if (!r.ok) throw new Error(“http ” + r.status); return “endpoint”; }); } return dbReady.then(function(db){ if (!db) return “none”; return db.collection(“waitlist”).add(p).then(function(){ return “db”; }); }); } /* ===== \u00c9v\u00e9nements ===== */ $(“rt4-year”).addEventListener(“input”, updateDerived); $(“rt4-prefill”).addEventListener(“click”, function(){ var out = extract($(“rt4-text”).value), n = 0, note = $(“rt4-prefill-note”); if (out.year){ $(“rt4-year”).value = out.year; n++; } if (out.km){ $(“rt4-km”).value = out.km.toLocaleString(“fr-FR”); n++; } if (out.price){ $(“rt4-price”).value = out.price.toLocaleString(“fr-FR”); n++; } [“body”,”finish”,”gear”,”prep”].forEach(function(k){ if (out[k]){ $(“rt4-” + k).value = out[k]; n++; } }); updateDerived(); note.textContent = !$(“rt4-text”).value.trim() ? “Collez d’abord le texte de l’annonce.” : n ? n + ” champ” + (n > 1 ? “s” : “”) + ” rempli” + (n > 1 ? “s” : “”) + “. V\u00e9rifiez-les avant d’analyser.” : “Aucune information reconnue. Remplissez les champs \u00e0 la main.”; track(“preremplissage”, {champs: n}); }); $(“rt4-form”).addEventListener(“submit”, function(e){ e.preventDefault(); var v = readForm(), note = $(“rt4-form-note”); note.textContent = “”; if (!v.year || v.year < 2007 || v.year > 2018){ note.textContent = “Indiquez une ann\u00e9e entre 2007 et 2018.”; $(“rt4-year”).focus(); return; } if (v.km != null && v.km > 600000){ note.textContent = “Le kilom\u00e9trage semble erron\u00e9.”; $(“rt4-km”).focus(); return; } render(v); }); track(“analyseur_vue”, {modele:”wrangler_jk_28crd”}); })();