Manuál: ANTI‑MATCH

Skript na vyhodnotenie zhôd a generovanie anti‑match (0‑match) antitipov — pokyny pre implementáciu a integráciu do dashboardu.

1. Prehľad a účel

Anti‑match skript (tiež nazývaný 0‑match generator) slúži na:

2. Požadované tabuľky (príklad SQL)

Základné tabuľky, ktoré skript používa:

-- history: uložené ťahy (každý riadok = 1 ťah)
CREATE TABLE IF NOT EXISTS history (
  id INT AUTO_INCREMENT PRIMARY KEY,
  draw_date DATE NOT NULL,
  numbers VARCHAR(255) NOT NULL, -- napr. '1,3,5,7,8,13,15,17,18,20,21'
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- antitip_trend: generované antitipy + vyhodnotenie
CREATE TABLE IF NOT EXISTS antitip_trend (
  id INT AUTO_INCREMENT PRIMARY KEY,
  numbers VARCHAR(255) NOT NULL,
  matches INT DEFAULT 0,
  evaluated_at TIMESTAMP NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- antitip_logs: detailné logy porovnaní
CREATE TABLE IF NOT EXISTS antitip_logs (
  id INT AUTO_INCREMENT PRIMARY KEY,
  antitip_id INT NOT NULL,
  draw_id INT NULL,
  matches INT NOT NULL,
  note VARCHAR(255),
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (antitip_id) REFERENCES antitip_trend(id),
  FOREIGN KEY (draw_id) REFERENCES history(id)
);

3. Základná logika (pseudokód)

// 1. Načítať posledný ťah (alebo posledných N ťahov)
last_draw = SELECT numbers FROM history ORDER BY draw_date DESC LIMIT 1

// 2. Vytvoriť množinu kandidátov (všetky čísla - last_draw)
candidates = ALL_NUMBERS - last_draw

// 3. Vybrať 11 čísel z kandidátov podľa pravidla (frekvencia, náhodne, váhy)
antitip = pick_n(candidates, 11)

// 4. Uložiť antitip do antitip_trend
INSERT antitip_trend(numbers, matches, created_at)

// 5. Po novom losovaní: porovnať antitip s novým draw a zapísať matches do antitip_logs
matches = count_intersection(antitip, draw)
UPDATE antitip_trend SET matches = matches, evaluated_at = NOW() WHERE id = antitip_id
INSERT INTO antitip_logs(antitip_id, draw_id, matches) VALUES(...)

4. PHP príklad — generovanie a vyhodnotenie (s použitím DB::getConnection())

<?php
require_once __DIR__ . '/security/core/DB.php';
$pdo = DB::getConnection();

// 1) Načítaj posledný ťah
$stmt = $pdo->prepare('SELECT id, numbers FROM history ORDER BY draw_date DESC LIMIT 1');
$stmt->execute();
$last = $stmt->fetch(PDO::FETCH_ASSOC);
$lastNumbers = array_map('intval', explode(',', $last['numbers']));

// 2) Kandidáti = vsetky cisla 1..22 bez poslednych
$all = range(1,22);
$candidates = array_diff($all, $lastNumbers);

// 3) Vyber 11 čísel (náhodne alebo podľa frekvencie)
shuffle($candidates);
$antitip = array_slice($candidates, 0, 11);
$antitipStr = implode(',', $antitip);

// 4) Ulož do antitip_trend
$ins = $pdo->prepare('INSERT INTO antitip_trend (numbers, matches) VALUES (:nums, 0)');
$ins->execute([':nums' => $antitipStr]);
$newId = $pdo->lastInsertId();

// 5) (Voliteľné) okamžité vyhodnotenie proti poslednému ťahu
$matches = count(array_intersect($antitip, $lastNumbers));
$upd = $pdo->prepare('UPDATE antitip_trend SET matches = :m, evaluated_at = NOW() WHERE id = :id');
$upd->execute([':m' => $matches, ':id' => $newId]);

// 6) Loguj detail
$log = $pdo->prepare('INSERT INTO antitip_logs (antitip_id, draw_id, matches) VALUES (:aid, :did, :m)');
$log->execute([':aid' => $newId, ':did' => $last['id'], ':m' => $matches]);

echo "Antitip vytvorený: $antitipStr — zhody: $matches";
?>

5. Vyhodnotenie po novom losovaní (cron/webhook)

Keď príde nový ťah, spusti skript ktorý:

  1. načíta všetky pending antitipy (bez evaluated_at alebo s matches NULL),
  2. pre každý antitip spočíta zhody s novým draw,
  3. aktualizuje antitip_trend a vloží záznam do antitip_logs,
  4. podľa výsledku môžeš poslať notifikáciu do dashboardu (websocket / event).
// Pseudokód pri novom draw
new_draw = INSERT INTO history(...)
pending = SELECT * FROM antitip_trend WHERE evaluated_at IS NULL
foreach pending as p:
  matches = count_intersect(p.numbers, new_draw.numbers)
  UPDATE antitip_trend SET matches = matches, evaluated_at = NOW() WHERE id = p.id
  INSERT INTO antitip_logs (antitip_id, draw_id, matches)

6. Integrácia do dashboardu

7. Cron / plánovač — odporúčania

8. Monitoring a troubleshooting

9. Rozšírenia a nápady