feat(5.18): corpus k-NN exemple etichetate + seed real Haiku (17181 op)
Seed app/data/operatii-etichetate.json regenerat cu subagenti Haiku pe TOATE cele 17181 operatii distincte (ordine frecventa, 100%), inlocuind seed-ul Groq (3758). Validare Haiku vs Groq pe 157 op etichetate: la dezacorduri Haiku corect ~22/30, Groq ~0. Haiku prinde gunoiul ratat de Groq (ITP, chirie anvelope, nume piese fara actiune): NUL 2200 (12.8%) vs ~7.6% Groq; adaptare electronica OE-7 (nu OE-5), placute frana uzura OE-1 (nu OE-F avarie). US-001..006: prefiltru NUL determinist, etichetator offline, generator seed, seeder mapping_suggestions (in init_db, gated seed_operatii_enabled), embeddings indexeaza corpus etichetat, enrich NUL+kNN. Distributie seed: OE-1 80.1%, NUL 12.8%, OE-2 3.5%, restul rar (OE-4/3/7/8/R/I/5, AITLV, R-ODO). config: seed_operatii_enabled=True + embeddings_enabled=True implicit (SILVER populat + sugestii semantice; ambele suggestion-only, dezactivabile prin env). Suita: 1387 passed, 1 deselected (live). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
72
tests/test_prefiltru_nul.py
Normal file
72
tests/test_prefiltru_nul.py
Normal file
@@ -0,0 +1,72 @@
|
||||
"""US-001 (PRD 5.18) — pre-filtru determinist non-operatii (NUL).
|
||||
|
||||
Masuratoarea k-NN (memorie test-precizie-knn-embeddings) arata recall NUL doar 64%:
|
||||
gunoiul evident (ITP, plata, discount, nr. inmatriculare, tractare) scapa ca OE-1.
|
||||
Un pre-filtru determinist il marcheaza NUL INAINTE de k-NN.
|
||||
|
||||
Garantie non-negociabila (AC): ZERO fals-pozitiv pe operatii reale. Regulile
|
||||
text/regex au fost calibrate pe `docs/operatii-service/*.csv` (vezi sesiunea de
|
||||
implementare): triggerele ambigue (TRACTARE, NR INMATRICULARE/placuta) sunt
|
||||
ECRANATE de un context de piesa/operatie (D/R, CARLIG, CAPAC, INLOCUIT...).
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from app.mapping import prefiltru_nul
|
||||
|
||||
|
||||
def test_itp_e_nul():
|
||||
assert prefiltru_nul("13 X ITP") is True
|
||||
assert prefiltru_nul("11XITP") is True # glue fara spatii
|
||||
assert prefiltru_nul("ITP") is True
|
||||
assert prefiltru_nul("2 X ITP") is True
|
||||
|
||||
|
||||
def test_plata_discount_nul():
|
||||
assert prefiltru_nul("DISCOUNT FIDELITATE 10%") is True
|
||||
assert prefiltru_nul("REDUCERE COMERCIALA") is True
|
||||
assert prefiltru_nul("ACHITAT DE CONF.URBAN") is True
|
||||
assert prefiltru_nul("PLATA AVANS") is True
|
||||
assert prefiltru_nul("TAXA DE MEDIU") is True
|
||||
|
||||
|
||||
def test_nr_inmatriculare_nul():
|
||||
assert prefiltru_nul("NR INMATRICULARE") is True
|
||||
assert prefiltru_nul("NUMAR INMATRICULARE") is True
|
||||
assert prefiltru_nul("B 123 ABC") is True # pattern placuta standalone
|
||||
assert prefiltru_nul("CT 44 MKY") is True
|
||||
|
||||
|
||||
def test_tractare_serviciu_nul():
|
||||
# Serviciul de tractare (rmorca) = non-operatie de service.
|
||||
assert prefiltru_nul("TRACTARE CTA-SLOBOZIA") is True
|
||||
assert prefiltru_nul("TRACTARE 100 KM") is True
|
||||
|
||||
|
||||
def test_operatie_reala_nu_e_nul():
|
||||
# Punctul critic: trigger ambiguu intr-un context de piesa reala -> NU e NUL.
|
||||
assert prefiltru_nul("INLOCUIT PLACUTE FRANA") is False
|
||||
assert prefiltru_nul("D/R CARLIG TRACTARE") is False # carlig = piesa, nu serviciu
|
||||
assert prefiltru_nul("D/R CAPAC TRACTARE BARA SPATE") is False
|
||||
assert prefiltru_nul("D/R NR INMATRICULARE") is False # suport placuta = piesa
|
||||
assert prefiltru_nul("D/R ELECTROMOTOR CT 44 MKY") is False # placuta lipita la o operatie reala
|
||||
|
||||
|
||||
def test_zero_fals_pozitiv_pe_set_operatii_reale():
|
||||
"""AC: zero fals-pozitiv pe un set de 20 operatii reale (din docs/operatii-service)."""
|
||||
reale = [
|
||||
"REVIZIE", "SCHIMB ULEI MOTOR", "INLOCUIT PLACUTE FRANA FATA",
|
||||
"D/R BARA FATA", "VOPSIT USA DR FATA", "INLOCUIT FILTRU AER",
|
||||
"AERISIT INSTALATIE FRANA", "INLOCUIT AMORTIZOR SPATE", "ABSORBANT SOC BARA SPATE",
|
||||
"INLOCUIT CUREA DISTRIBUTIE", "REGLAT FARURI", "INLOCUIT BUJII",
|
||||
"REPARAT ARIPA FATA DR", "INLOCUIT DISCURI FRANA", "GRESAT PLANETARA",
|
||||
"INLOCUIT RULMENT ROATA", "MONTAT ANVELOPE", "INLOCUIT BATERIE",
|
||||
"DIAGNOZA COMPUTERIZATA", "INLOCUIT CONTACT PORNIRE",
|
||||
]
|
||||
for op in reale:
|
||||
assert prefiltru_nul(op) is False, f"fals-pozitiv pe operatie reala: {op!r}"
|
||||
|
||||
|
||||
def test_input_gol_nu_e_nul():
|
||||
assert prefiltru_nul("") is False
|
||||
assert prefiltru_nul(None) is False # type: ignore[arg-type]
|
||||
Reference in New Issue
Block a user