From fe4c6d246a23256f81415c83a5e3fe7034f0af09 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Fri, 20 Feb 2026 06:04:14 +0000 Subject: [PATCH] =?UTF-8?q?ntegre=20todas=20as=20op=C3=A7=C3=B5es=20para?= =?UTF-8?q?=20o=20jogo=20da=20quina=20A=20Quin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/templates/core/hits_report.html | 54 +++++++++++------ core/templates/core/sequential_generator.html | 58 ++++++++++++++++--- 2 files changed, 86 insertions(+), 26 deletions(-) diff --git a/core/templates/core/hits_report.html b/core/templates/core/hits_report.html index 2726bba..0976214 100644 --- a/core/templates/core/hits_report.html +++ b/core/templates/core/hits_report.html @@ -22,23 +22,35 @@ -
-
-
- QUADRAS DETECTADAS -

0

+
+
+
+ DUQUES +

0

-
-
- QUINAS DETECTADAS -

0

+
+
+ TERNOS +

0

-
-
- SENAS DETECTADAS -

0

+
+
+ QUADRAS +

0

+
+
+
+
+ QUINAS +

0

+
+
+
+
+ SENAS +

0

@@ -60,6 +72,7 @@ .border-slate-800 { border-color: #1e293b !important; } .text-slate-500 { color: #64748b !important; } .text-slate-700 { color: #334155 !important; } + .x-small { font-size: 0.7rem; } .hit-card { background: #0f172a; @@ -104,24 +117,29 @@ container.innerHTML = ''; - let qd = 0, qn = 0, sn = 0; + let dq = 0, tr = 0, qd = 0, qn = 0, sn = 0; // Inverte para mostrar os mais recentes primeiro hits.reverse().forEach(hit => { // Garantir ordenação (Menor para o Maior) na exibição do relatório hit.sequence.sort((a, b) => a - b); - if (hit.hits === 4) qd++; + if (hit.hits === 2) dq++; + else if (hit.hits === 3) tr++; + else if (hit.hits === 4) qd++; else if (hit.hits === 5) qn++; else if (hit.hits >= 6) sn++; - const badgeClass = hit.hits === 4 ? "bg-info" : (hit.hits === 5 ? "bg-warning text-dark" : "bg-danger"); + let badgeClass = "bg-danger"; + if (hit.hits === 2) badgeClass = "bg-secondary"; + else if (hit.hits === 3) badgeClass = "bg-primary"; + else if (hit.hits === 4) badgeClass = "bg-info"; + else if (hit.hits === 5) badgeClass = "bg-warning text-dark"; const col = document.createElement('div'); col.className = 'col-md-6 col-lg-4'; let ballsHtml = hit.sequence.map(n => { - // Aqui não temos os elite_greens no localStorage, então mostramos simples return `
${n.toString().padStart(2, '0')}
`; }).join(''); @@ -139,6 +157,8 @@ container.appendChild(col); }); + if (document.getElementById('stat-duque')) document.getElementById('stat-duque').innerText = dq; + if (document.getElementById('stat-terno')) document.getElementById('stat-terno').innerText = tr; document.getElementById('stat-quadra').innerText = qd; document.getElementById('stat-quina').innerText = qn; document.getElementById('stat-sena').innerText = sn; diff --git a/core/templates/core/sequential_generator.html b/core/templates/core/sequential_generator.html index ed696fe..fe8914c 100644 --- a/core/templates/core/sequential_generator.html +++ b/core/templates/core/sequential_generator.html @@ -77,6 +77,18 @@ 0
+
+
+ DUQUES + 0 +
+
+
+
+ TERNOS + 0 +
+
QUADRAS @@ -89,7 +101,7 @@ 0
-
+
SENAS 0 @@ -220,6 +232,8 @@ let lotteryData = null; let currentStartNum = 1; let totalGenerated = 0; + let countDuque = 0; + let countTerno = 0; let countQuadra = 0; let countQuina = 0; let countSena = 0; @@ -270,6 +284,17 @@ const resp = await fetch(`/api/lottery-info/${key}/`); lotteryData = await resp.json(); + // Ajusta visibilidade das colunas baseado no jogo + if (key.toLowerCase().includes('quina')) { + document.getElementById("col-duque").classList.remove("d-none"); + document.getElementById("col-terno").classList.remove("d-none"); + document.getElementById("col-sena").classList.add("d-none"); + } else { + document.getElementById("col-duque").classList.add("d-none"); + document.getElementById("col-terno").classList.add("d-none"); + document.getElementById("col-sena").classList.remove("d-none"); + } + setupFunnel(lotteryData.max_number); updateElitePanel(); btnStart.disabled = false; @@ -336,6 +361,8 @@ document.getElementById("hits-panel").innerHTML = `
Nenhum acerto de elite detectado ainda...
`; currentStartNum = 1; totalGenerated = 0; + countDuque = 0; + countTerno = 0; countQuadra = 0; countQuina = 0; countSena = 0; @@ -346,9 +373,12 @@ function updateStats() { document.getElementById("count-total").innerText = totalGenerated.toLocaleString(); + if (document.getElementById("count-duque")) document.getElementById("count-duque").innerText = countDuque.toLocaleString(); + if (document.getElementById("count-terno")) document.getElementById("count-terno").innerText = countTerno.toLocaleString(); document.getElementById("count-quadra").innerText = countQuadra.toLocaleString(); document.getElementById("count-quina").innerText = countQuina.toLocaleString(); - document.getElementById("count-sena").innerText = countSena.toLocaleString(); + if (document.getElementById("count-sena")) document.getElementById("count-sena").innerText = countSena.toLocaleString(); + if (detectedHits.length > 0) { document.getElementById("btn-download").classList.remove("d-none"); document.getElementById("btn-open-browser").classList.remove("d-none"); @@ -403,17 +433,22 @@ } const hits = sequence.filter(n => lotteryData.elite_greens.includes(n)).length; - if (hits >= 4) { - let type = hits === 4 ? "QUADRA" : (hits === 5 ? "QUINA" : "SENA"); - if (hits === 4) countQuadra++; - else if (hits === 5) countQuina++; - else if (hits >= 6) countSena++; + const isQuina = lotteryData.name.toLowerCase().includes('quina'); + const minHits = isQuina ? 2 : 4; + + if (hits >= minHits) { + let type = ""; + if (hits === 2) { type = "DUQUE"; countDuque++; } + else if (hits === 3) { type = "TERNO"; countTerno++; } + else if (hits === 4) { type = "QUADRA"; countQuadra++; } + else if (hits === 5) { type = "QUINAS"; countQuina++; } + else if (hits >= 6) { type = "SENA"; countSena++; } const hitData = { type, sequence: [...sequence], hits }; detectedHits.push(hitData); renderHit(hitData); - if (hits >= 5) { + if (hits >= (isQuina ? 3 : 5)) { speak(`Alerta! ${type} detectada com alto índice de probabilidade.`); } } @@ -436,7 +471,12 @@ const panel = document.getElementById("hits-panel"); if (detectedHits.length === 1) panel.innerHTML = ""; - const badgeClass = hit.hits === 4 ? "bg-info" : (hit.hits === 5 ? "bg-warning text-dark" : "bg-danger"); + let badgeClass = "bg-danger"; + if (hit.hits === 2) badgeClass = "bg-secondary"; + else if (hit.hits === 3) badgeClass = "bg-primary"; + else if (hit.hits === 4) badgeClass = "bg-info"; + else if (hit.hits === 5) badgeClass = "bg-warning text-dark"; + const div = document.createElement("div"); div.className = "d-flex justify-content-between align-items-center p-2 rounded bg-slate-900 border border-slate-800 x-small"; div.innerHTML = `