feat(mapare-llm): pivot PRD 5.14 + tooling etichetare OpenRouter
PRD 5.14 rescris cu pivotul arhitectural: LLM doar etichetator OFFLINE, runtime = clasificator local fara API (fuzzy + embeddings), baza de cunostinte GOLD partajata cross-account (validarea unui service ajuta toate). Decizia 8 (corpus per-cont) SUPERSEDED. Tooling nou OpenRouter (free, familia NVIDIA Nemotron): or_common.py (client + corpus pe frecventa, cheie din .env) + or_modeltest.py (comparatie modele, acord ensemble vs Groq). Masurat: super-120b + nano-9b fiabile, 3/3 unanim pe 87% volum; ultra-550b aruncat. Corpus real (4 CSV service, coloana NR=frecventa) + etichete Groq bootstrap incluse ca date de masurare. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
13171
docs/operatii-service/operatii-service-automotive.csv
Normal file
13171
docs/operatii-service/operatii-service-automotive.csv
Normal file
File diff suppressed because it is too large
Load Diff
1669
docs/operatii-service/operatii-service-clever.csv
Normal file
1669
docs/operatii-service/operatii-service-clever.csv
Normal file
File diff suppressed because it is too large
Load Diff
3744
docs/operatii-service/operatii-service-sigma.csv
Normal file
3744
docs/operatii-service/operatii-service-sigma.csv
Normal file
File diff suppressed because it is too large
Load Diff
876
docs/operatii-service/operatii-service-south.csv
Normal file
876
docs/operatii-service/operatii-service-south.csv
Normal file
@@ -0,0 +1,876 @@
|
|||||||
|
" ";"DENOP";"NR"
|
||||||
|
"51";"DIAGNOZA";"809"
|
||||||
|
"160";"EFECTUAT REVIZIE PERIODICA MICA";"279"
|
||||||
|
"159";"EFECTUAT REVIZIE PERIODICA";"214"
|
||||||
|
"152";"EFECTUARE REVIZIE PERIODICA-MARE";"48"
|
||||||
|
"57";"DIAGNOZA SISTEM AD-BLUE SI SCR";"36"
|
||||||
|
"156";"EFECTUAT REVIZIE MICA";"34"
|
||||||
|
"153";"EFECTUARE REVIZIE PERIODICA-MICA";"33"
|
||||||
|
"625";"INLOCUIT SONDA ADBLUE";"29"
|
||||||
|
"801";"REVIZIE ULEI + FILTRE";"28"
|
||||||
|
"791";"REVIZIE MICA PERIODICA";"28"
|
||||||
|
"792";"REVIZIE MICA PROGRAMATA";"27"
|
||||||
|
"805";"SCHIMB ULEI + FILTRE";"24"
|
||||||
|
"155";"EFECTUAT REVIZIE MARE";"24"
|
||||||
|
"598";"INLOCUIT SENZOR NOX 1";"23"
|
||||||
|
"769";"REPARAT SCARA SPATE STG.";"23"
|
||||||
|
"768";"REPARAT SCARA SPATE DRT.";"23"
|
||||||
|
"149";"DTC CONTROL";"22"
|
||||||
|
"164";"E-PDI";"20"
|
||||||
|
"681";"P.D.I.";"20"
|
||||||
|
"599";"INLOCUIT SENZOR NOX 2";"18"
|
||||||
|
"527";"INLOCUIT POMPA ADBLUE";"18"
|
||||||
|
"789";"REVIZIE MARE PROGRAMATA";"17"
|
||||||
|
"524";"INLOCUIT PLACUTE FRANA FATA";"17"
|
||||||
|
"49";"DEZANSAMBLAT ARC AXA SPATE";"15"
|
||||||
|
"168";"FSA 202322 - ECU UPDATE";"15"
|
||||||
|
"545";"INLOCUIT PTO";"13"
|
||||||
|
"525";"INLOCUIT PLACUTE FRANA SPATE";"13"
|
||||||
|
"171";"FSA 202520-F3V17 BCM UPDATE";"13"
|
||||||
|
"788";"REVIZIE MARE";"11"
|
||||||
|
"827";"VERIFICARE FILTRU ULEI MOTOR";"11"
|
||||||
|
"439";"INLOCUIT KIT AMBREIAJ";"11"
|
||||||
|
"453";"INLOCUIT LAMPA GABARIT CABINA DRT.";"10"
|
||||||
|
"794";"REVIZIE PERIODICA ISUZU";"10"
|
||||||
|
"253";"INLOCUIT BECURI LAMPI SPATE";"10"
|
||||||
|
"705";"REGENERARE FORTATA";"10"
|
||||||
|
"103";"D/R CV DE PE AUTO";"9"
|
||||||
|
"173";"FSA202511A-F3V17 UPDATE BCM";"9"
|
||||||
|
"704";"REGENERARE";"9"
|
||||||
|
"661";"INLOCUIT VALVA RAMPA COMBUSTIBIL";"9"
|
||||||
|
"817";"UPDATE BCM";"9"
|
||||||
|
"435";"INLOCUIT INJECTOR ADBLUE";"9"
|
||||||
|
"798";"REVIZIE PROGRAMATA FILTRE + ULEI";"8"
|
||||||
|
"835";"VERIFICARE PIERDERI ULEI MOTOR";"8"
|
||||||
|
"31";"DEMONTAT ARC SPATE";"8"
|
||||||
|
"151";"EFECTUARE REVIZIE PERIODICA";"8"
|
||||||
|
"454";"INLOCUIT LAMPA GABARIT CABINA STG.";"8"
|
||||||
|
"819";"UPDATE ECM";"7"
|
||||||
|
"515";"INLOCUIT PLACA RELEE MARE";"7"
|
||||||
|
"409";"INLOCUIT FOAIE DE ARC SPATE";"7"
|
||||||
|
"410";"INLOCUIT FOAIE 1 ARC SPATE";"7"
|
||||||
|
"70";"D/R ARC SPATE";"7"
|
||||||
|
"440";"INLOCUIT KIT AMBREIAJ + VOLANTA";"7"
|
||||||
|
"203";"INLOCUIT ALTERNATOR";"7"
|
||||||
|
"441";"INLOCUIT KIT AMBREIAJ, VOLANTA + RULMENT VOLANTA";"7"
|
||||||
|
"799";"REVIZIE PROGRAMATA TRAKKER";"6"
|
||||||
|
"743";"REPARAT CABLAJ LAMPI SPATE";"6"
|
||||||
|
"597";"INLOCUIT SENZOR NOX UPSTREAM DOC 1";"6"
|
||||||
|
"218";"INLOCUIT ARC FATA FORD";"6"
|
||||||
|
"55";"DIAGNOZA RESETARE INTERVAL";"6"
|
||||||
|
"618";"INLOCUIT SIMERING ARBORE SPATE";"6"
|
||||||
|
"832";"VERIFICARE MECANICA GENERALA";"5"
|
||||||
|
"273";"INLOCUIT BUJII MOTOR";"5"
|
||||||
|
"72";"D/R BARA FATA";"5"
|
||||||
|
"75";"D/R BARA PROTECTIE FATA";"5"
|
||||||
|
"543";"INLOCUIT PROIECTOR LUCRU DRT.";"5"
|
||||||
|
"752";"REPARAT CV LA BANC";"5"
|
||||||
|
"455";"INLOCUIT LAMPA LATERALA GABARIT";"5"
|
||||||
|
"186";"INDREPTAT SUPORTI + MONTAT ARIPA DRT. PUNTE MOTRICA";"5"
|
||||||
|
"170";"FSA 202511A - F3V17 BCMUPDATE";"5"
|
||||||
|
"464";"INLOCUIT LAMPA SPATE STG";"5"
|
||||||
|
"800";"REVIZIE PROGRAMATA ULEI + FILTRE";"5"
|
||||||
|
"634";"INLOCUIT SUPAPA RETUR POMPA ADBLUE";"5"
|
||||||
|
"330";"INLOCUIT CONDUCTA A/C";"5"
|
||||||
|
"178";"GOLIT REZERVOR COMBUSTIBIL";"4"
|
||||||
|
"862";"VERIFICAT SI INCARCAT INSTALATIE CU A/C";"4"
|
||||||
|
"100";"D/R CUTIE DE VITEZE";"4"
|
||||||
|
"234";"INLOCUIT BASCULA DR FATA";"4"
|
||||||
|
"169";"FSA 202413";"4"
|
||||||
|
"588";"INLOCUIT SENZOR ABS SPATE DR";"4"
|
||||||
|
"611";"INLOCUIT SENZORI PLACUTE FATA";"4"
|
||||||
|
"462";"INLOCUIT LAMPA SPATE DR";"4"
|
||||||
|
"839";"VERIFICARE SI INCARCARE INSTALATIE A/C";"4"
|
||||||
|
"375";"INLOCUIT DISCURI FRINA SPATE";"4"
|
||||||
|
"607";"INLOCUIT SENZOR TEMPERATURA CATALIZATOR";"4"
|
||||||
|
"829";"VERIFICARE INSTALATIE A/C + INCARCARE CU FREON";"4"
|
||||||
|
"828";"VERIFICARE GENERALA";"4"
|
||||||
|
"552";"INLOCUIT RADIATOR RACIRE MOTOR";"4"
|
||||||
|
"25";"CURATAT REZERVOR ADBLUE";"4"
|
||||||
|
"402";"INLOCUIT FILTRU EPURATOR";"4"
|
||||||
|
"857";"VERIFICAT INSTALATIE AC + INCARCAT FREON";"4"
|
||||||
|
"654";"INLOCUIT TURBOSUFLANTA";"4"
|
||||||
|
"683";"PIAGGIO SCHIMB ULEI + FILTRE";"4"
|
||||||
|
"821";"UPDATE TAQ 766187";"4"
|
||||||
|
"78";"D/R BORD AUTO";"4"
|
||||||
|
"530";"INLOCUIT POMPA APA";"4"
|
||||||
|
"813";"TELESERVICII PENTRU LIMITARE";"4"
|
||||||
|
"617";"INLOCUIT SIMERING ARBORE FATA";"4"
|
||||||
|
"824";"VERIF SI INCARCAT AC";"4"
|
||||||
|
"71";"D/R ARIPA FATA STG";"4"
|
||||||
|
"595";"INLOCUIT SENZOR NOX DUPA DPF (ULTIMUL)";"3"
|
||||||
|
"495";"INLOCUIT OGLINDA PIETON";"3"
|
||||||
|
"139";"D/R ROTI AXA 2FATA STG/DR";"3"
|
||||||
|
"521";"INLOCUIT PLACUTE FRANA";"3"
|
||||||
|
"756";"REPARAT INSTALATIE ELECTRICA LAMPI SPATE";"3"
|
||||||
|
"501";"INLOCUIT ORNAMENT ARIPA FATA";"3"
|
||||||
|
"468";"INLOCUIT LEVIER COMANDA + CAPETE DE BARA TRANSV";"3"
|
||||||
|
"549";"INLOCUIT RADIATOR AEROTERMA";"3"
|
||||||
|
"467";"INLOCUIT LAMPI SPATE";"3"
|
||||||
|
"596";"INLOCUIT SENZOR NOX INAINTE DE DPF";"3"
|
||||||
|
"179";"GRESAT";"3"
|
||||||
|
"489";"INLOCUIT OCHELAR PROIECTOR DRT.";"3"
|
||||||
|
"478";"INLOCUIT MANETA SCHIMBATOR VITEZE";"3"
|
||||||
|
"484";"INLOCUIT MONITOR + CAMERA";"3"
|
||||||
|
"673";"MATERIALE ELECTRICE";"3"
|
||||||
|
"290";"INLOCUIT CAMERA SPATE";"3"
|
||||||
|
"575";"INLOCUIT RULMENTI INTERMEDIARI CARDAN";"3"
|
||||||
|
"573";"INLOCUIT RULMENTI AXA SPATE";"3"
|
||||||
|
"698";"REFACUT CABLAJ ELECTRIC USA STG";"3"
|
||||||
|
"675";"MONTAT ARC AXA SPATE";"3"
|
||||||
|
"581";"INLOCUIT SABOTI FRANA MANA";"3"
|
||||||
|
"331";"INLOCUIT CONDUCTA AC";"3"
|
||||||
|
"343";"INLOCUIT CONTACT PEDALA FRANA";"3"
|
||||||
|
"670";"MANOPERA";"3"
|
||||||
|
"666";"INLOCUIT VOLANTA MOTOR";"3"
|
||||||
|
"662";"INLOCUIT VAS EXPANSIUNE";"3"
|
||||||
|
"741";"REPARAT CABLAJ ELECTRIC LA SENZORUL DE PLACUTE STG FATA";"3"
|
||||||
|
"610";"INLOCUIT SENZORI NOX 1 SI 2";"3"
|
||||||
|
"394";"INLOCUIT FILTRU ADBLUE";"3"
|
||||||
|
"184";"INCARCAT INST A/C + VERIFICAT";"3"
|
||||||
|
"187";"INDREPTAT SUPORTI + MONTAT ARIPA STG. PUNTE MOTRICA";"3"
|
||||||
|
"373";"INLOCUIT DISCURI FRANA STG + DR SPATE";"3"
|
||||||
|
"715";"REMEDIAT CABLAJ PANOU COMANDA SUPRASTRUCTURA";"3"
|
||||||
|
"710";"REGLAT FARURUI";"3"
|
||||||
|
"249";"INLOCUIT BECURI";"3"
|
||||||
|
"222";"INLOCUIT ARIPA + ORNAMENT DRT. PUNTE FATA";"3"
|
||||||
|
"233";"INLOCUIT BARA FATA STG";"3"
|
||||||
|
"235";"INLOCUIT BASCULA INFERIOARA FATA STG";"3"
|
||||||
|
"132";"D/R REZERVOR COMBUSTIBIL";"3"
|
||||||
|
"131";"D/R REZERVOR ADBLUE";"3"
|
||||||
|
"779";"REPARATII ELECTRICE";"3"
|
||||||
|
"822";"UPDATE TAS 766161";"3"
|
||||||
|
"101";"D/R CUTIE VITEZA SI INLOCUIT BOLT SELECTOR";"3"
|
||||||
|
"4";"AERISIT INSTALATIE RACIRE";"3"
|
||||||
|
"122";"D/R MOTOR SI ACCESORII MOTOR";"3"
|
||||||
|
"87";"D/R CARDAN";"3"
|
||||||
|
"806";"SERVICE SCHIMB ULEI";"3"
|
||||||
|
"107";"D/R FATA DE USA STANGA";"3"
|
||||||
|
"16";"CURATAT INSTALATIE ALIMENTARE COMBUSTIBIL";"3"
|
||||||
|
"796";"REVIZIE PERIODICA OTOKAR";"3"
|
||||||
|
"288";"INLOCUIT CABLURI TIMONERIE";"2"
|
||||||
|
"560";"INLOCUIT ROLA AC+CUREA";"2"
|
||||||
|
"264";"INLOCUIT BUCSI BARA TORSIUINE FATA STG";"2"
|
||||||
|
"443";"INLOCUIT KIT CUREA DISTRIBUTIE";"2"
|
||||||
|
"699";"REFACUT CABLAJ LAMPA SPATE STG";"2"
|
||||||
|
"671";"MANOPERA ADITIONALA";"2"
|
||||||
|
"424";"INLOCUIT GARNITURI DPF";"2"
|
||||||
|
"433";"INLOCUIT IMPULSOR CV";"2"
|
||||||
|
"83";"D/R CAPAC OGLINDA INF STG";"2"
|
||||||
|
"569";"INLOCUIT RULMENT ROATA FATA STG";"2"
|
||||||
|
"267";"INLOCUIT BUCSI CABINA FATA";"2"
|
||||||
|
"562";"INLOCUIT ROLE + CUREA";"2"
|
||||||
|
"434";"INLOCUIT INJECTOARE";"2"
|
||||||
|
"81";"D/R CADRU FATA AUTO";"2"
|
||||||
|
"456";"INLOCUIT LAMPA NR DR";"2"
|
||||||
|
"457";"INLOCUIT LAMPA NR STG";"2"
|
||||||
|
"714";"REMEDIAT CABLAJ ELECTRIC LAMPI SPATE";"2"
|
||||||
|
"859";"VERIFICAT INSTALATIE COMPACTARE";"2"
|
||||||
|
"713";"REMEDIAT CABLAJ ELECTRIC";"2"
|
||||||
|
"863";"VERIFICAT SI REPARAT INSTALATIE GIDRAULICA SUPRASTRUCTURA";"2"
|
||||||
|
"723";"REMEDIAT PIERDERI AER PE INSTALATIA DE FRANARE";"2"
|
||||||
|
"861";"VERIFICAT INSTALATIE ELECTRICA SISTEM EVACUARE";"2"
|
||||||
|
"803";"REVIZIE 40 000KM";"2"
|
||||||
|
"550";"INLOCUIT RADIATOR APA";"2"
|
||||||
|
"858";"VERIFICAT INSTALATIE ALIMENTARE CU AD-BLUE";"2"
|
||||||
|
"447";"INLOCUIT KIT SINCROANE REDUCTOR CV";"2"
|
||||||
|
"448";"INLOCUIT KIT SINCROANE VIT. 1- 2";"2"
|
||||||
|
"558";"INLOCUIT REZERVOR COMBUSTIBIL";"2"
|
||||||
|
"255";"INLOCUIT BOLTURI ETRIER SPATE";"2"
|
||||||
|
"444";"INLOCUIT KIT DISTRIBUTIE + POMPA DE APA";"2"
|
||||||
|
"856";"VERIFICAT INSTALATIE A/C";"2"
|
||||||
|
"808";"SERVICII VOPSITORIE";"2"
|
||||||
|
"554";"INLOCUIT REGULATOR PRESIUNE AER";"2"
|
||||||
|
"90";"D/R CHIULASA + GARNITURA";"2"
|
||||||
|
"450";"INLOCUIT LAMPA CABINA STG";"2"
|
||||||
|
"291";"INLOCUIT CAMERA VIDEO";"2"
|
||||||
|
"345";"INLOCUIT CRABOTI SELECTOR CV";"2"
|
||||||
|
"344";"INLOCUIT CONTACTOR PEDALA FRANA";"2"
|
||||||
|
"346";"INLOCUIT CRUCE CARDAN";"2"
|
||||||
|
"627";"INLOCUIT SONDA LITROMETRICA";"2"
|
||||||
|
"605";"INLOCUIT SENZOR PTO";"2"
|
||||||
|
"338";"INLOCUIT CONDUCTA RACIRE Y";"2"
|
||||||
|
"600";"INLOCUIT SENZOR PLACUTE";"2"
|
||||||
|
"601";"INLOCUIT SENZOR PM";"2"
|
||||||
|
"342";"INLOCUIT CONDUCTE RACIRE";"2"
|
||||||
|
"602";"INLOCUIT SENZOR PRESIUNE";"2"
|
||||||
|
"358";"INLOCUIT CUZINETI ARBORE COTIT";"2"
|
||||||
|
"372";"INLOCUIT DISCURI FRANA FATA";"2"
|
||||||
|
"360";"INLOCUIT CUZINETI BIELE";"2"
|
||||||
|
"368";"INLOCUIT DISCURI + ROTI AXA SPATE";"2"
|
||||||
|
"369";"INLOCUIT DISCURI + SET PLACUTE FRANA SPATE";"2"
|
||||||
|
"44";"DEMONTAT/MONTAT CV";"2"
|
||||||
|
"58";"DIAGNOZA SISTEM SCR";"2"
|
||||||
|
"623";"INLOCUIT SIMERING SI INEL RT/SP/DR";"2"
|
||||||
|
"374";"INLOCUIT DISCURI FRINA FATA";"2"
|
||||||
|
"376";"INLOCUIT DISCURI SI PLACUTE FRANA FATA";"2"
|
||||||
|
"633";"INLOCUIT SUPAPA MODUL ADBLUE";"2"
|
||||||
|
"303";"INLOCUIT CAPETE TIRANTI";"2"
|
||||||
|
"664";"INLOCUIT VASCOCUPLAJ VENTILATOR";"2"
|
||||||
|
"658";"INLOCUIT ULEI MOTOR + FILTRU";"2"
|
||||||
|
"651";"INLOCUIT TERMOSTATE SISTEM DE RACIRE";"2"
|
||||||
|
"407";"INLOCUIT FILTRU ULEI HIDRAULIC";"2"
|
||||||
|
"294";"INLOCUIT CAP BARA DR";"2"
|
||||||
|
"77";"D/R BARA TORSIUNE STG";"2"
|
||||||
|
"295";"INLOCUIT CAP BARA STG";"2"
|
||||||
|
"665";"INLOCUIT VENTILATOR AEROTERMA";"2"
|
||||||
|
"76";"D/R BARA TORSIUNE DR";"2"
|
||||||
|
"594";"INLOCUIT SENZOR NIVEL LICHID RACIRE OTOKAR";"2"
|
||||||
|
"325";"INLOCUIT COMPRESOR AC";"2"
|
||||||
|
"390";"INLOCUIT FAR FAZA SCURTA STG.";"2"
|
||||||
|
"332";"INLOCUIT CONDUCTA CU SENZOR INCALZIRE ADBLUE";"2"
|
||||||
|
"39";"DEMONTAT SCAUN SOFER SI INLOCUIT PERNA SEZUT";"2"
|
||||||
|
"399";"INLOCUIT FILTRU DE PARTICULE";"2"
|
||||||
|
"403";"INLOCUIT FILTRU HIDRAULIC";"2"
|
||||||
|
"397";"INLOCUIT FILTRU COMBUSTIBIL";"2"
|
||||||
|
"591";"INLOCUIT SENZOR FILTRU COMBUSTIBIL + FILTRU";"2"
|
||||||
|
"396";"INLOCUIT FILTRU AER";"2"
|
||||||
|
"158";"EFECTUAT REVIZIE M2";"2"
|
||||||
|
"194";"INLOCUIRE GARNITURA CULBUTORI";"2"
|
||||||
|
"748";"REPARAT CABLAJ SUPRASTRUCTURA";"2"
|
||||||
|
"127";"D/R PRAG USA DR";"2"
|
||||||
|
"165";"FACTURA TRACTARE ANB0093/07.04.2026";"2"
|
||||||
|
"502";"INLOCUIT ORNAMENT ARIPA STG. PUNTE FATA";"2"
|
||||||
|
"534";"INLOCUIT POMPA DE ULEI";"2"
|
||||||
|
"157";"EFECTUAT REVIZIE MOTOR AUXILIAR";"2"
|
||||||
|
"129";"D/R RADIATOARE + CONDENSOARE";"2"
|
||||||
|
"507";"INLOCUIT PINION VIT 1";"2"
|
||||||
|
"104";"D/R DIFERENTIAL AXA SPATE";"2"
|
||||||
|
"536";"INLOCUIT POMPA ULEI";"2"
|
||||||
|
"868";"VF. + INLOCUIT MONITOR";"2"
|
||||||
|
"746";"REPARAT CABLAJ SENZORI PLACUTE FRANA";"2"
|
||||||
|
"745";"REPARAT CABLAJ MOTOR";"2"
|
||||||
|
"167";"FSA 202415B1";"2"
|
||||||
|
"172";"FSA202420-INLOCUIT FLANSA + BOLT CARDAN";"2"
|
||||||
|
"8";"COMPLETARE FREON + VERIFICARE INST A/C";"2"
|
||||||
|
"786";"REVIZIE EO-MPE00000";"2"
|
||||||
|
"870";"VF. SI INCARCAT SISTEM AC CU FREON";"2"
|
||||||
|
"176";"GOLIT INSTALATIE RACIRE MOT.";"2"
|
||||||
|
"174";"GOLIT INSTALATIE A/C";"2"
|
||||||
|
"121";"D/R MOTOR DE PE AUTO";"2"
|
||||||
|
"757";"REPARAT INSTALATIE ELECTRICA SUPRASTRUCTURA";"2"
|
||||||
|
"784";"REVIZIE ULEI + FILTRE";"2"
|
||||||
|
"797";"REVIZIE PERIODICA ULEI SI FILTRE";"2"
|
||||||
|
"869";"VF. + REMEDIAT I.E. ILUMINAT EXTERIOR";"2"
|
||||||
|
"490";"INLOCUIT OCHELAR PROIECTOR STG.";"2"
|
||||||
|
"492";"INLOCUIT OGLINDA BORDURA";"2"
|
||||||
|
"499";"INLOCUIT OGLINDA STG ELECTRICA";"2"
|
||||||
|
"531";"INLOCUIT POMPA APA MOTOR";"2"
|
||||||
|
"224";"INLOCUIT ARIPA FATA STG";"2"
|
||||||
|
"219";"INLOCUIT ARC SPATE";"2"
|
||||||
|
"475";"INLOCUIT MACARA STG";"2"
|
||||||
|
"512";"INLOCUIT PIVOTI INF + SUP (AMBELE PARTI)";"2"
|
||||||
|
"466";"INLOCUIT LAMPI LATERALE GABARIT";"2"
|
||||||
|
"514";"INLOCUIT PLACA RELEE";"2"
|
||||||
|
"14";"CURATAT INSTALATIA ADMISIE";"2"
|
||||||
|
"138";"D/R ROTI AXA FATA STG/DR";"2"
|
||||||
|
"469";"INLOCUIT LEVIER DE COMANDA";"2"
|
||||||
|
"98";"D/R CONDUCTE COMBUSTIBIL PARTIAL";"2"
|
||||||
|
"771";"REPARAT TOBA FINALA";"2"
|
||||||
|
"519";"INLOCUIT PLACUTE FR FATA";"2"
|
||||||
|
"133";"D/R RIGIDIZARE TREAPTA STG";"2"
|
||||||
|
"520";"INLOCUIT PLACUTE FR FATA + SPATE";"2"
|
||||||
|
"729";"REMEDIAT PIERDERI ULEI CILINDRU COMPACTARE STG.";"2"
|
||||||
|
"776";"REPARATIE GRUP DIFERENTIAL";"2"
|
||||||
|
"510";"INLOCUIT PIVOTI AXA FATA";"2"
|
||||||
|
"511";"INLOCUIT PIVOTI FATA STG + DR";"2"
|
||||||
|
"99";"D/R CUTIE DE VITEZA AUTO";"2"
|
||||||
|
"217";"INLOCUIT ARBORE MOTOR";"2"
|
||||||
|
"206";"INLOCUIT AMORTIZOARE AXA FATA";"2"
|
||||||
|
"609";"INLOCUIT SENZOR ULEI MOTOR";"1"
|
||||||
|
"517";"INLOCUIT PLACUTE AXA FATA";"1"
|
||||||
|
"586";"INLOCUIT SENZOR ABS DR SPATE";"1"
|
||||||
|
"587";"INLOCUIT SENZOR ABS FATA DR";"1"
|
||||||
|
"834";"VERIFICARE PIERDERI ULEI";"1"
|
||||||
|
"526";"INLOCUIT PLACUTE FRINA";"1"
|
||||||
|
"846";"VERIFICARI ELECTRICE SI UDT";"1"
|
||||||
|
"836";"VERIFICARE PRESIUNE INSTALATIE ADBLUE";"1"
|
||||||
|
"590";"INLOCUIT SENZOR AXA CAME";"1"
|
||||||
|
"845";"VERIFICARE ULEI GRUP DIFERENTIAL";"1"
|
||||||
|
"589";"INLOCUIT SENZOR AMONIAC";"1"
|
||||||
|
"518";"INLOCUIT PLACUTE AXA SPATE";"1"
|
||||||
|
"522";"INLOCUIT PLACUTE FRANA + AERISIT";"1"
|
||||||
|
"523";"INLOCUIT PLACUTE FRANA AXA FATA";"1"
|
||||||
|
"841";"VERIFICARE SISTEM ALIMENTARE";"1"
|
||||||
|
"840";"VERIFICARE SISTEM A/C";"1"
|
||||||
|
"604";"INLOCUIT SENZOR PRESIUNE ULEI";"1"
|
||||||
|
"874";"VOPSIT PRIZA AER STG";"1"
|
||||||
|
"606";"INLOCUIT SENZOR STANGA FATA";"1"
|
||||||
|
"838";"VERIFICARE SERVODIRECTIE";"1"
|
||||||
|
"603";"INLOCUIT SENZOR PRESIUNE DIFERENTIALA";"1"
|
||||||
|
"593";"INLOCUIT SENZOR LIFT PUBELE";"1"
|
||||||
|
"872";"VOPSIT BARA FATA STG";"1"
|
||||||
|
"592";"INLOCUIT SENZOR LICHID DE RACIRE";"1"
|
||||||
|
"844";"VERIFICARE ULEI CV";"1"
|
||||||
|
"608";"INLOCUIT SENZOR ULEI";"1"
|
||||||
|
"837";"VERIFICARE SENZORI UZURA SI ABS";"1"
|
||||||
|
"842";"VERIFICARE SISTEM ELECTRIC AD-BLUE";"1"
|
||||||
|
"873";"VOPSIT CAPOTA MOTOR";"1"
|
||||||
|
"875";"VOPSITORIE + MATERIALE VOPSITORIE";"1"
|
||||||
|
"843";"VERIFICARE SISTEM FRANARE";"1"
|
||||||
|
"585";"INLOCUIT SENZOR + CABLAJ NOX";"1"
|
||||||
|
"539";"INLOCUIT PRESOSTAT";"1"
|
||||||
|
"538";"INLOCUIT POMPITA STERGATOR";"1"
|
||||||
|
"537";"INLOCUIT POMPITA SPALATOR PARBRIZ";"1"
|
||||||
|
"867";"VERIFICAT UZURA CILINDRI SI BLOC MOTOR";"1"
|
||||||
|
"557";"INLOCUIT RELEU BUJII";"1"
|
||||||
|
"540";"INLOCUIT PREZOANE ROATA DR";"1"
|
||||||
|
"559";"INLOCUIT REZISTENTA AEROTERMA";"1"
|
||||||
|
"561";"INLOCUIT ROLA GHIDARE + CUREA TRANSMISIE";"1"
|
||||||
|
"852";"VERIFICAT INCARCARE ALTERNATOR";"1"
|
||||||
|
"563";"INLOCUIT RULMENT AMBREIAJ";"1"
|
||||||
|
"855";"VERIFICAT INSTALATI ELECTRICA A/C";"1"
|
||||||
|
"854";"VERIFICAT INJECTOARE";"1"
|
||||||
|
"853";"VERIFICAT/ INCARCAT INSTALATIE A/C";"1"
|
||||||
|
"541";"INLOCUIT PROIECTOARE";"1"
|
||||||
|
"860";"VERIFICAT INSTALATIE ELECTRICA SI INLOCUIT BUTON AVARIE";"1"
|
||||||
|
"553";"INLOCUIT RAMA PROIECTOR + BEC";"1"
|
||||||
|
"547";"INLOCUIT RACORD RACIRE EGR";"1"
|
||||||
|
"548";"INLOCUIT RADIATOR A/C";"1"
|
||||||
|
"864";"VERIFICAT SISTEM ALIMENTARE";"1"
|
||||||
|
"551";"INLOCUIT RADIATOR RACIRE";"1"
|
||||||
|
"546";"INLOCUIT RACORD FLEXIBIL EVACUARE";"1"
|
||||||
|
"555";"INLOCUIT REGULATOR PRESIUNE COMBUSTIBIL";"1"
|
||||||
|
"556";"INLOCUIT RELEE - 2 BUC";"1"
|
||||||
|
"542";"INLOCUIT PROIECTOR CEATA STG.";"1"
|
||||||
|
"865";"VERIFICAT SISTEM EVACUARE";"1"
|
||||||
|
"544";"INLOCUIT PROTECTII FOAIE DE ARC TRANSVERSALA";"1"
|
||||||
|
"866";"VERIFICAT SISTEM FRANARE";"1"
|
||||||
|
"564";"INLOCUIT RULMENT AXA SPATE";"1"
|
||||||
|
"580";"INLOCUIT SABOTI AXA SPATE";"1"
|
||||||
|
"529";"INLOCUIT POMPA AMOR";"1"
|
||||||
|
"849";"VERIFICAT BUJII + APRINDERE";"1"
|
||||||
|
"577";"INLOCUIT RULMENTI ROTI SPATE";"1"
|
||||||
|
"578";"INLOCUIT RULMRNT PRESIUNE AMBREIAJ";"1"
|
||||||
|
"579";"INLOCUIT RULMRNT PRIZA CV";"1"
|
||||||
|
"582";"INLOCUIT SABOTI SPATE";"1"
|
||||||
|
"847";"VERIFICAT + AERISIT SIST FRANARE";"1"
|
||||||
|
"871";"VF. SI REMEDIAT CABLAJ ELECTROMOTOR";"1"
|
||||||
|
"584";"INLOCUIT SEMNALIZARE DR PE OGLINDA";"1"
|
||||||
|
"528";"INLOCUIT POMPA AMBREIAJ";"1"
|
||||||
|
"583";"INLOCUIT SELECTOR VITEZE";"1"
|
||||||
|
"848";"VERIFICAT ADMISIE AER";"1"
|
||||||
|
"576";"INLOCUIT RULMENTI ROTI FATA AMBELE PARTI";"1"
|
||||||
|
"568";"INLOCUIT RULMENT ROATA FATA DR";"1"
|
||||||
|
"535";"INLOCUIT POMPA INALTA PRESIUNE";"1"
|
||||||
|
"570";"INLOCUIT RULMENT ROATA SPATE";"1"
|
||||||
|
"565";"INLOCUIT RULMENT BUTUC DR. SPATE";"1"
|
||||||
|
"566";"INLOCUIT RULMENT DIFERENTIAL";"1"
|
||||||
|
"567";"INLOCUIT RULMENT GRUP DIF.";"1"
|
||||||
|
"533";"INLOCUIT POMPA DE AMORSARE INST DE COMBUSTIBIL";"1"
|
||||||
|
"574";"INLOCUIT RULMENTI FATA (AMBELE PARTI)";"1"
|
||||||
|
"850";"VERIFICAT CABLAJ ELECTRIC";"1"
|
||||||
|
"532";"INLOCUIT POMPA DE AMBREIAJ";"1"
|
||||||
|
"571";"INLOCUIT RULMENT VOLANTA";"1"
|
||||||
|
"572";"INLOCUIT RULMENTI AXA FATA";"1"
|
||||||
|
"851";"VERIFICAT CONCENTRATIE + COMPLETAT ANTIGEL";"1"
|
||||||
|
"726";"REMEDIAT PIERDERI DE AER PE SISTEMUL DE FRANARE";"1"
|
||||||
|
"725";"REMEDIAT PIERDERI APA LA INSTALATIA DE SPALAT";"1"
|
||||||
|
"728";"REMEDIAT PIERDERI ULEI CILINDRU ACTIONARE LIFT STG.";"1"
|
||||||
|
"727";"REMEDIAT PIERDERI DE ULEI MOTOR";"1"
|
||||||
|
"724";"REMEDIAT PIERDERI ANTIGEL";"1"
|
||||||
|
"720";"REMEDIAT INSTALATIE ELECTRICA";"1"
|
||||||
|
"719";"REMEDIAT FCT. PROIECTOARE SPATE";"1"
|
||||||
|
"722";"REMEDIAT LUMINI MI";"1"
|
||||||
|
"721";"REMEDIAT INTRERUPERI CABLAJ MOTOR";"1"
|
||||||
|
"736";"REPARAT ARIPA SPATE STG";"1"
|
||||||
|
"735";"REPARAT ARC DR FATA";"1"
|
||||||
|
"738";"REPARAT BARA STG. FATA";"1"
|
||||||
|
"737";"REPARAT BARA DRT. FATA";"1"
|
||||||
|
"734";"REMEDIERE PRINDERE COMP AC";"1"
|
||||||
|
"731";"REMEDIAT PRINDERE COLIER TURBOSUFLANTA";"1"
|
||||||
|
"730";"REMEDIAT PIULITA GRUP DIFERENTIAL";"1"
|
||||||
|
"733";"REMEDIAT PRINDERI CONDUCTA A/C";"1"
|
||||||
|
"732";"REMEDIAT PRINDERI ACTIONARE LIFT SUPERIOARE STG. + DRT.";"1"
|
||||||
|
"718";"REMEDIAT DEFECTIUNI PORNIRE";"1"
|
||||||
|
"810";"SPALAT MOTOR CU SOLUTIE";"1"
|
||||||
|
"703";"REFACUT SUPORT TABLOU SIGURANTE";"1"
|
||||||
|
"706";"REGLARE FARURI";"1"
|
||||||
|
"809";"SPALAT INSTALATIE ALIMENTARE AD-BLUE";"1"
|
||||||
|
"702";"REFACUT INSTALATIE ELECTRICA SUPRASTRUCTURA";"1"
|
||||||
|
"700";"REFACUT CABLAJ SENZOR PLACUTE SPATE";"1"
|
||||||
|
"697";"REFACTURARE CURATARE DPF";"1"
|
||||||
|
"811";"TELESERVICII";"1"
|
||||||
|
"701";"REFACUT CABLAJ TABLOU CMD. HYDRO-MAK";"1"
|
||||||
|
"716";"REMEDIAT CABLAJ SENZOR MARSARIER";"1"
|
||||||
|
"807";"SERVICII TERTI FACTURA 30/14.02.2025 REPARATIE INJECTOARE";"1"
|
||||||
|
"804";"REVOPSIT USA STG FATA";"1"
|
||||||
|
"717";"REMEDIAT CONDUCTA EVACURE";"1"
|
||||||
|
"712";"REGLAT VOLAN";"1"
|
||||||
|
"708";"REGLAT CULBUTORI";"1"
|
||||||
|
"707";"REGLAT CABLURI FRANA";"1"
|
||||||
|
"711";"REGLAT FRANA MANA";"1"
|
||||||
|
"709";"REGLAT FARURI";"1"
|
||||||
|
"739";"REPARAT CABLAJ LAMPA SPATE";"1"
|
||||||
|
"782";"RESOFTARE";"1"
|
||||||
|
"765";"REPARAT PARABICICLISTI DR";"1"
|
||||||
|
"766";"REPARAT PRINDERE GIROFAR FATA";"1"
|
||||||
|
"781";"RESETAT INTERVAL REVIZIE";"1"
|
||||||
|
"764";"REPARAT PANOU COMANDA COMPACTOR";"1"
|
||||||
|
"762";"REPARAT MUFE ELECTRICE BOBINE";"1"
|
||||||
|
"785";"REVIZIE DIFERENTIAL";"1"
|
||||||
|
"763";"REPARAT ORNAMENT TOBA";"1"
|
||||||
|
"783";"REV 20000";"1"
|
||||||
|
"774";"REPARATIE BOLT SUPRASTRUCTURA COMPACTARE";"1"
|
||||||
|
"773";"REPARAT USA STG FATA";"1"
|
||||||
|
"777";"REPARATIE LONJERON STG";"1"
|
||||||
|
"775";"REPARATIE CABLAJ ELECTRIC";"1"
|
||||||
|
"772";"REPARAT TRAVERSA SPATE SASIU";"1"
|
||||||
|
"780";"REPROGRAMARE BODY COMPUTER";"1"
|
||||||
|
"767";"REPARAT SCARA DREAPTA";"1"
|
||||||
|
"770";"REPARAT SISTEM EVACUARE";"1"
|
||||||
|
"778";"REPARATIE LUMINI LAMPI SPATE";"1"
|
||||||
|
"761";"REPARAT MUFA ELECTRICA PE CABLAJ NOX";"1"
|
||||||
|
"750";"REPARAT CONDUCTA SISTEM PNEUMATIC SPATE";"1"
|
||||||
|
"749";"REPARAT CABLAJ TABLOU CMD.";"1"
|
||||||
|
"753";"REPARAT INST. ELECTRICA SENZOR PEDALA FR";"1"
|
||||||
|
"751";"REPARAT CUTIE VITEZE";"1"
|
||||||
|
"747";"REPARAT CABLAJ SI INLOCUIT LAMPA SPATE";"1"
|
||||||
|
"802";"REVIZIE ULEI +FILTRE";"1"
|
||||||
|
"740";"REPARAT CABLAJ COMUTATOR FTANA MANA";"1"
|
||||||
|
"744";"REPARAT CABLAJ LUMINI SPATE";"1"
|
||||||
|
"742";"REPARAT CABLAJ ELECTRIC SISTEM EVACUARE";"1"
|
||||||
|
"790";"REVIZIE MICA - PROGRAMATA";"1"
|
||||||
|
"759";"REPARAT LIFT SUPRASTRUCTURA";"1"
|
||||||
|
"760";"REPARAT MANETA COMENZI HIDRAULICE";"1"
|
||||||
|
"787";"REVIZIE FILTRE + ULEI";"1"
|
||||||
|
"758";"REPARAT INSTALATIE HIDRAULICA SUPRASTRUCTURA";"1"
|
||||||
|
"755";"REPARAT INSTALATIE ELECTRICA";"1"
|
||||||
|
"754";"REPARAT INSTALATIE ELECRICA ILUMINAT";"1"
|
||||||
|
"793";"REVIZIE MOTOR AUXILIAR";"1"
|
||||||
|
"795";"REVIZIE PERIODICA MARE";"1"
|
||||||
|
"696";"REFACTURARE ALEZAJ BLOC MOTOR";"1"
|
||||||
|
"638";"INLOCUIT SUPORT FAR STG";"1"
|
||||||
|
"637";"INLOCUIT SUPORT CAPOTA INFERIOR STG";"1"
|
||||||
|
"640";"INLOCUIT SUPORTI BARA SPATE STG + DR";"1"
|
||||||
|
"639";"INLOCUIT SUPORT INF. DR CAPOTA";"1"
|
||||||
|
"823";"UPDATE VBR 768840";"1"
|
||||||
|
"635";"INLOCUIT SUPAPA SISTEM ALIMENTARE RAMPA";"1"
|
||||||
|
"826";"VERIFICARE ELECTRICA";"1"
|
||||||
|
"825";"VERIFICARE AUTO/CONSTATARE";"1"
|
||||||
|
"636";"INLOCUIT SUPAPA SUPRASTRUCTURA";"1"
|
||||||
|
"647";"INLOCUIT TAMPOANE CABINA FATA";"1"
|
||||||
|
"646";"INLOCUIT TAMPOANE ARCURI SPATE";"1"
|
||||||
|
"649";"INLOCUIT TAMPOANE SUPERIOARE RIGIDIZARE FATA";"1"
|
||||||
|
"648";"INLOCUIT TAMPOANE INFERIOARE PUNTE FATA";"1"
|
||||||
|
"645";"INLOCUIT TAMBURI SPATE AXA 3";"1"
|
||||||
|
"642";"INLOCUIT SURUBURI FUZETA SPATE";"1"
|
||||||
|
"641";"INLOCUIT SURUB AMORTIZOR FATA STG/DR";"1"
|
||||||
|
"644";"INLOCUIT TAMBURI FRANA AXA 2 FATA";"1"
|
||||||
|
"643";"INLOCUIT SURUBURI VOLANTA";"1"
|
||||||
|
"632";"INLOCUIT SUPAPA GV";"1"
|
||||||
|
"831";"VERIFICARE INSTALATIE ELECTRA SISTEM AD-BLUE";"1"
|
||||||
|
"833";"VERIFICARE PIERDERI COMBUSTIBIL";"1"
|
||||||
|
"620";"INLOCUIT SIMERING BUTUC SPATE";"1"
|
||||||
|
"619";"INLOCUIT SIMERING AX CAME";"1"
|
||||||
|
"616";"INLOCUIT SIMERERING GRUP DIFERENTIAL";"1"
|
||||||
|
"613";"INLOCUIT SENZOT PTO";"1"
|
||||||
|
"612";"INLOCUIT SENZORI TEMPERATURA EVACUARE";"1"
|
||||||
|
"615";"INLOCUIT SIGURANTA 7.5 AH";"1"
|
||||||
|
"614";"INLOCUIT SERPENTINA ADBLUE";"1"
|
||||||
|
"629";"INLOCUIT STUT";"1"
|
||||||
|
"830";"VERIFICARE INSTALATIE ALIMENTARE CU AD-BLUE";"1"
|
||||||
|
"631";"INLOCUIT SUPAPA EGR";"1"
|
||||||
|
"630";"INLOCUIT SUPAPA CUTIE DE VITEZA";"1"
|
||||||
|
"628";"INLOCUIT SONDA REZERVOR";"1"
|
||||||
|
"622";"INLOCUIT SIMERING PALIER SPATE";"1"
|
||||||
|
"621";"INLOCUIT SIMERING FATA MOTOR";"1"
|
||||||
|
"626";"INLOCUIT SONDA LAMBDA";"1"
|
||||||
|
"624";"INLOCUIT SINE SCAUN SOFER";"1"
|
||||||
|
"650";"INLOCUIT TERMOFLOT";"1"
|
||||||
|
"685";"PREGATIRE ELEMENTE DIN PLASTIC";"1"
|
||||||
|
"684";"PIESE MARUNTE";"1"
|
||||||
|
"686";"PREGATIRE ELEMENTE METALICE";"1"
|
||||||
|
"812";"TELESERVICII IVECO INLOCUIRE INSTRUMENTE BORD";"1"
|
||||||
|
"814";"TELESERVICII- SOFT ALM";"1"
|
||||||
|
"679";"MONTAT PARABICICLISTI STG";"1"
|
||||||
|
"678";"MONTAT CONDUCTA ALIMENTARE PENTRU INCALZIRE AUXILIARA";"1"
|
||||||
|
"682";"PIAGGIO INLOCUIT DISCURI SI PLACUTE FRANA FATA";"1"
|
||||||
|
"680";"MONTAT PROIECTOARE FATA";"1"
|
||||||
|
"693";"RAMPA INJECTOARE DEMONTATA";"1"
|
||||||
|
"692";"PURJAT FILTRU MOTORINA";"1"
|
||||||
|
"695";"RECTIFICAT FILETE COMPRESOR A/C";"1"
|
||||||
|
"694";"RECTIFICAT FILET AXA DR SPATE";"1"
|
||||||
|
"691";"PROGRAMARE CHEIE";"1"
|
||||||
|
"688";"PRINDERE CONDUCTA EVACUARE PE SASIU";"1"
|
||||||
|
"687";"PREGATIRE PENTRU VOPSIRE";"1"
|
||||||
|
"690";"PROGRAMARE BODY COMPUTER";"1"
|
||||||
|
"689";"PRINDERE CONDUCTE A/C";"1"
|
||||||
|
"677";"MONTAT BUTUC ROATA SPATE DR";"1"
|
||||||
|
"660";"INLOCUIT USA STG FATA";"1"
|
||||||
|
"659";"INLOCUIT UNITATE CONTROL BUJII";"1"
|
||||||
|
"818";"UPDATE BCM 76618 ATAQ";"1"
|
||||||
|
"820";"UPDATE SOFT FSA 202418";"1"
|
||||||
|
"657";"INLOCUIT ULEI CV";"1"
|
||||||
|
"653";"INLOCUIT TURBINA MOTOR AUXILIAR";"1"
|
||||||
|
"652";"INLOCUIT TREAPTA CABINA ARIPA DR";"1"
|
||||||
|
"656";"INLOCUIT ULEI CUTIE VITEZE";"1"
|
||||||
|
"655";"INLOCUIT ULEI + FILTRU ULEI";"1"
|
||||||
|
"674";"MONTAT APARATOARE NOROI SPATE";"1"
|
||||||
|
"672";"MASURAT UZURA ARBORE SI INLOCUIT CUZINETI PALIER (6 +1 AXIAL)";"1"
|
||||||
|
"676";"MONTAT ARC AXA SPATE DR";"1"
|
||||||
|
"815";"TEST ACUMULATORI";"1"
|
||||||
|
"816";"TEST FRANARE";"1"
|
||||||
|
"667";"INLOCUIT 2 BIELE MOTOR";"1"
|
||||||
|
"663";"INLOCUIT VAS EXPANSIUNE CU SENZOR";"1"
|
||||||
|
"669";"LIMITARE VITEZA LA 110KM/H";"1"
|
||||||
|
"668";"LIMITARE AUTO 110 KM/H";"1"
|
||||||
|
"183";"INCARCAT INSTALATIE A/C CU FREON";"1"
|
||||||
|
"182";"INCARCARE INSTALATIE A/C";"1"
|
||||||
|
"185";"INDREPTAT CAPAC SPATE PARTEA DRT.";"1"
|
||||||
|
"189";"INL. INCHIZ CAPOTA DR";"1"
|
||||||
|
"188";"INL DUBLURA INTERIOARA LONGERON FATA STG";"1"
|
||||||
|
"181";"IINLOCUIT TERMOSTAT";"1"
|
||||||
|
"166";"FACTURA VOPSITORIE F1897";"1"
|
||||||
|
"163";"EFECTUAT TESTE + REGENERARE";"1"
|
||||||
|
"175";"GOLIT INSTALATIE RACIRE";"1"
|
||||||
|
"180";"GRESAT PUNCTE";"1"
|
||||||
|
"177";"GOLIT REZERVOR AD-BLUE";"1"
|
||||||
|
"198";"INLOCUIRE VENTILATOR AEROTERMA";"1"
|
||||||
|
"197";"INLOCUIRE RIGIDIZARE STALP EXT. INT. DR";"1"
|
||||||
|
"199";"INLOCUIT + REGLAT CABLURI TIMONERIE";"1"
|
||||||
|
"201";"INLOCUIT ACUMULATORI";"1"
|
||||||
|
"200";"INLOCUIT ACUMULATOR";"1"
|
||||||
|
"196";"INLOCUIRE PERNA AER PUNTE MOTRICA DRT. SPRE FATA";"1"
|
||||||
|
"191";"INLOCOUIT FAR FAZA LUNGA STG.";"1"
|
||||||
|
"190";"INL. INCHIZ CAPOTA STG";"1"
|
||||||
|
"192";"INLOCUIRE BARA FATA STG";"1"
|
||||||
|
"195";"INLOCUIRE PERNA AER PUNTE MOTRICA";"1"
|
||||||
|
"193";"INLOCUIRE BARA PROTECTIE FATA";"1"
|
||||||
|
"136";"D/R ROATA SPATE DR AXA 4";"1"
|
||||||
|
"135";"D/R ROATA DR SPATE";"1"
|
||||||
|
"137";"D/R ROTI ( AXA 1/2/3) SI VERIFICAT ELEMENTE DE FRANARE";"1"
|
||||||
|
"141";"D/R SCAUN SOFER";"1"
|
||||||
|
"140";"D/R SCARA USA STG";"1"
|
||||||
|
"134";"D/R ROATA";"1"
|
||||||
|
"125";"D/R POMPA DE APA";"1"
|
||||||
|
"124";"D/R PARASOC STG BARA FATA";"1"
|
||||||
|
"126";"D/R PRAG STG";"1"
|
||||||
|
"130";"D/R RADIATOR APA SI VERIFICAT ETANSEITATE";"1"
|
||||||
|
"128";"D/R PROIECTOR FATA DR";"1"
|
||||||
|
"150";"ECHIPAT ANEXE PE MOTOR";"1"
|
||||||
|
"148";"D/R TURBOSUFLANTA";"1"
|
||||||
|
"154";"EFECTUAT REGLAJ DIRECTIE";"1"
|
||||||
|
"162";"EFECTUAT TEST FRANARE";"1"
|
||||||
|
"161";"EFECTUAT REVIZIE PERIODICA-MICA";"1"
|
||||||
|
"147";"D/R TURBINA";"1"
|
||||||
|
"143";"D/R SI INLOCUIRE SEMNALIZATOR FAT DR";"1"
|
||||||
|
"142";"D/R SEMNALIZARE LATERALA DR";"1"
|
||||||
|
"144";"D/R SUPORT STG BARA FATA";"1"
|
||||||
|
"146";"D/R TREAPTA ARIPA DR CABINA";"1"
|
||||||
|
"145";"D/R SUSPENSIE FATA";"1"
|
||||||
|
"202";"INLOCUIT ALM";"1"
|
||||||
|
"242";"INLOCUIT BEC FAR ST + DR";"1"
|
||||||
|
"241";"INLOCUIT BEC FAR DR";"1"
|
||||||
|
"243";"INLOCUIT BEC FAZA SCURTA";"1"
|
||||||
|
"245";"INLOCUIT BEC POZITIE";"1"
|
||||||
|
"244";"INLOCUIT BEC LAMPA NR";"1"
|
||||||
|
"240";"INLOCUIT BCM";"1"
|
||||||
|
"236";"INLOCUIT BASCULA STG";"1"
|
||||||
|
"232";"INLOCUIT BARA FATA DR";"1"
|
||||||
|
"237";"INLOCUIT BASCULA STG FATA";"1"
|
||||||
|
"239";"INLOCUIT BASCULE FATA";"1"
|
||||||
|
"238";"INLOCUIT BASCULA SUPERIOARA FATA STG";"1"
|
||||||
|
"256";"INLOCUIT BORNA BATERIE MINUS";"1"
|
||||||
|
"254";"INLOCUIT BECURI PE LAMPILE GABARIT";"1"
|
||||||
|
"257";"INLOCUIT BRATE SUSPENSIE FATA";"1"
|
||||||
|
"259";"INLOCUIT BUCSI ARCURI FATA";"1"
|
||||||
|
"258";"INLOCUIT BROASCA USA FATA STG";"1"
|
||||||
|
"252";"INLOCUIT BECURI LAMPI GABARIT";"1"
|
||||||
|
"247";"INLOCUIT BEC STOP";"1"
|
||||||
|
"246";"INLOCUIT BEC SEMNALIZARE SI POZITIE";"1"
|
||||||
|
"248";"INLOCUIT BEC STOP FRANA";"1"
|
||||||
|
"251";"INLOCUIT BECURI FARURI FATA";"1"
|
||||||
|
"250";"INLOCUIT BECURI FARURI";"1"
|
||||||
|
"212";"INLOCUIT AMORTIZOR CABINA FATA STG/DR";"1"
|
||||||
|
"211";"INLOCUIT AMORTIZOR AXA FATA (AMBELE PARTI)";"1"
|
||||||
|
"213";"INLOCUIT AMORTIZOR DR FATA";"1"
|
||||||
|
"215";"INLOCUIT ANSAMBLU BASCULA FATA STG";"1"
|
||||||
|
"214";"INLOCUIT ANSAMBLU BASCULA FATA DR";"1"
|
||||||
|
"210";"INLOCUIT AMORTIZOARE SPATE";"1"
|
||||||
|
"205";"INLOCUIT AMORTIOARE FATA";"1"
|
||||||
|
"204";"INLOCUIT AMBREIAJ";"1"
|
||||||
|
"207";"INLOCUIT AMORTIZOARE CABINA FATA";"1"
|
||||||
|
"209";"INLOCUIT AMORTIZOARE FATA S + D";"1"
|
||||||
|
"208";"INLOCUIT AMORTIZOARE FATA";"1"
|
||||||
|
"228";"INLOCUIT BALAMALE USA STG FATA";"1"
|
||||||
|
"227";"INLOCUIT BALAMALE USA DR";"1"
|
||||||
|
"229";"INLOCUIT BARA DRT. FATA";"1"
|
||||||
|
"231";"INLOCUIT BARA FATA + SUPORTI BARA";"1"
|
||||||
|
"230";"INLOCUIT BARA FATA";"1"
|
||||||
|
"226";"INLOCUIT ARIPA ROATA FATA STG";"1"
|
||||||
|
"220";"INLOCUIT ARC SPATE STG";"1"
|
||||||
|
"216";"INLOCUIT ANSAMBLU USCATOR AER";"1"
|
||||||
|
"221";"INLOCUIT ARC SPATE(O PARTE)";"1"
|
||||||
|
"225";"INLOCUIT ARIPA ROATA FATA DR";"1"
|
||||||
|
"223";"INLOCUIT ARIPA + ORNAMENT STG. PUNTE FATA";"1"
|
||||||
|
"123";"D/R ORNAMENT STG GRILA";"1"
|
||||||
|
"36";"DEMONTAT FURCI CUPLARE CV";"1"
|
||||||
|
"35";"DEMONTAT COMPRESOR A/C";"1"
|
||||||
|
"37";"DEMONTAT REZERVOR COMBUSTIBIL";"1"
|
||||||
|
"40";"DEMONTAT SEGMENTI CILINDRU EXPULZIE";"1"
|
||||||
|
"38";"DEMONTAT ROTI AXA SPATE";"1"
|
||||||
|
"34";"DEMONTAT BORD SI INLOCUIT CEASURI";"1"
|
||||||
|
"29";"DEMONTAT ANEXE DE PE MOTOR";"1"
|
||||||
|
"28";"DEMNTAT BUTUC AXA SPATE DR";"1"
|
||||||
|
"30";"DEMONTAT ARC AXA SPATE STG";"1"
|
||||||
|
"33";"DEMONTAT BORD DREAPTA";"1"
|
||||||
|
"32";"DEMONTAT BORD AUTO";"1"
|
||||||
|
"50";"DEZANSAMBLAT ARC AXA SPATE STG";"1"
|
||||||
|
"48";"DESFACUT SI REPARAT CILINDRI COMPACTARE";"1"
|
||||||
|
"52";"DIAGNOZA NOX";"1"
|
||||||
|
"54";"DIAGNOZA PTO";"1"
|
||||||
|
"53";"DIAGNOZA: MARTOR CHECK ENGINE";"1"
|
||||||
|
"47";"DESCARCAT-INCARCAT INST A/C";"1"
|
||||||
|
"42";"DEMONTAT/MONTAT CAPAC BAIE ULEI";"1"
|
||||||
|
"41";"DEMONTAT SISTEM EVACUARE";"1"
|
||||||
|
"43";"DEMONTAT/MONTAT CILINDRU EXPULZIE";"1"
|
||||||
|
"46";"DEPRESAT RULMENTI";"1"
|
||||||
|
"45";"DEMONTAT/MONTAT CV PE AUTO";"1"
|
||||||
|
"10";"COMPLETAT CU FREON";"1"
|
||||||
|
"9";"COMPLETARE LICHID FRANA";"1"
|
||||||
|
"11";"COMPLETAT INSTALATIE FREON";"1"
|
||||||
|
"13";"CURATAT FILTRU DE PARTICULE";"1"
|
||||||
|
"12";"CURATAT BIELA SI INLOCUIT CUZINETI (6 BIELE)";"1"
|
||||||
|
"7";"APARATOARE ARIPA";"1"
|
||||||
|
"2";"AERISIT INSTALATIE FRANARE";"1"
|
||||||
|
"1";"AERISIT FRANE";"1"
|
||||||
|
"3";"AERISIT INSTALATIE HIDRAULICA";"1"
|
||||||
|
"6";"ANSAMBLAT BORD AUTO";"1"
|
||||||
|
"5";"AERISIT SISTEM HIDRAULIC AMBREIAJ";"1"
|
||||||
|
"23";"CURATAT PINI";"1"
|
||||||
|
"22";"CURATAT MUFE SI CABLAJE";"1"
|
||||||
|
"24";"CURATAT PISTOANE SI INLOCUIT SEGMENTI ( 6 PISTOANE)";"1"
|
||||||
|
"27";"DECONECTAT CONDUCTE COMBUSTIBIL";"1"
|
||||||
|
"26";"CURATAT SUPAPA DEBIT GAZE";"1"
|
||||||
|
"21";"CURATAT INTRECOOLER";"1"
|
||||||
|
"17";"CURATAT INSTALATIE DE AER";"1"
|
||||||
|
"15";"CURATAT INSTALATIE ADBLUE";"1"
|
||||||
|
"18";"CURATAT INSTALATIE DRENARE A/C";"1"
|
||||||
|
"20";"CURATAT INSTALATIE RACIRE";"1"
|
||||||
|
"19";"CURATAT INSTALATIE ELECTRICA PORNIRE";"1"
|
||||||
|
"56";"DIAGNOZA SI UPDATE AUTO";"1"
|
||||||
|
"105";"D/R DISC FRANA SI BUTUC ROATA DR SPATE";"1"
|
||||||
|
"102";"D/R CUTIE VITEZE";"1"
|
||||||
|
"106";"D/R EPURATOR GAZE SI INLOCUIT RACORD";"1"
|
||||||
|
"109";"D/R FILTRU DE PARTICULE SI INLOCUIT GARNITURI + COLIERE";"1"
|
||||||
|
"108";"D/R FATA DE USA STG";"1"
|
||||||
|
"97";"D/R CONDUCTA PRESIUNE POMPA SERVO";"1"
|
||||||
|
"93";"D/R CILINDRU DE EXPULZIE";"1"
|
||||||
|
"92";"D/R CILINDRI HIDRAULICI SPATE COMPACTOR";"1"
|
||||||
|
"94";"D/R CILINDRU EXPULZIE";"1"
|
||||||
|
"96";"D/R COMPONENTE CATALIZATOR";"1"
|
||||||
|
"95";"D/R COLTAR FATA DR";"1"
|
||||||
|
"117";"D/R LAMPA SEMNALIZARE DR";"1"
|
||||||
|
"116";"D/R KIT AMBREIAJ + VOLANTA";"1"
|
||||||
|
"118";"D/R MANER CAPOTA MOTOR";"1"
|
||||||
|
"120";"D/R MOTOR";"1"
|
||||||
|
"119";"D/R MODUL ALIMENTARE AD-BLUE";"1"
|
||||||
|
"115";"D/R JANTA FATA STG";"1"
|
||||||
|
"111";"D/R GEAM INF USA DR";"1"
|
||||||
|
"110";"D/R FILTRU PARTICULE";"1"
|
||||||
|
"112";"D/R GRILA RADIATOR";"1"
|
||||||
|
"114";"D/R JANTA FATA DR";"1"
|
||||||
|
"113";"D/R INJECTOARE";"1"
|
||||||
|
"66";"D/R + REPARAT ELECTROMOTOR";"1"
|
||||||
|
"65";"D/R RADIATOARE";"1"
|
||||||
|
"67";"D/R ANVELOPA FATA DR";"1"
|
||||||
|
"69";"D/R APARATOARE";"1"
|
||||||
|
"68";"D/R ANVELOPA FATA STG";"1"
|
||||||
|
"64";"D/M SI REPARAT CILINDRU LIFT";"1"
|
||||||
|
"60";"D/M FILTRU PARTICULE";"1"
|
||||||
|
"59";"D/M CHIULASA MOTOR SI INLOCUIT GARNITURA CHIULASA";"1"
|
||||||
|
"61";"D/M GRUP DIFERENTIAL";"1"
|
||||||
|
"63";"D/M SI REPARAT CILINDRU GHEARA";"1"
|
||||||
|
"62";"D/M SI REPARAT CILINDRU EXPULZIE";"1"
|
||||||
|
"86";"D/R CAPITONAJ USA DR SP\";"1"
|
||||||
|
"85";"D/R CAPITONAJ FATA DR CABINA";"1"
|
||||||
|
"88";"D/R CATALIZATOR X 2";"1"
|
||||||
|
"91";"D/R CHIULOASA MOTOR";"1"
|
||||||
|
"89";"D/R CAUTATOR CV";"1"
|
||||||
|
"84";"D/R CAPAC SUPERIOR OGLINDA EXT DR";"1"
|
||||||
|
"74";"D/R BARA FATA DR SI INLOCUIT";"1"
|
||||||
|
"73";"D/R BARA FATA DR";"1"
|
||||||
|
"79";"D/R BUTUC ROATA SPATE";"1"
|
||||||
|
"82";"D/R CADRU MOTOR FATA";"1"
|
||||||
|
"80";"D/R BUTUCI ROATA SPATE";"1"
|
||||||
|
"260";"INLOCUIT BUCSI ARCURI SPATE + BRIDE";"1"
|
||||||
|
"418";"INLOCUIT FURTUN RACIRE COMPRESOR";"1"
|
||||||
|
"417";"INLOCUIT FURTUN INTERCOOLER";"1"
|
||||||
|
"419";"INLOCUIT FURTUNE INSTALATIE HIDRAULICA";"1"
|
||||||
|
"421";"INLOCUIT FUZETA FATA DR";"1"
|
||||||
|
"420";"INLOCUIT FURTUNE RACIRE";"1"
|
||||||
|
"416";"INLOCUIT FURTUN INFERIOR RADIATOR APA";"1"
|
||||||
|
"412";"INLOCUIT FOAIE 2 ARC SPATE STG";"1"
|
||||||
|
"411";"INLOCUIT FOAIE 2 ARC SPATE DR";"1"
|
||||||
|
"413";"INLOCUIT FOAIE 3 ARC SPATE";"1"
|
||||||
|
"415";"INLOCUIT FURTUN COMPRESOR AER";"1"
|
||||||
|
"414";"INLOCUIT FULIE ALTERNATOR";"1"
|
||||||
|
"430";"INLOCUIT GEAM OGLINDA MICA DR";"1"
|
||||||
|
"429";"INLOCUIT GEAM OGLINDA MIC STG";"1"
|
||||||
|
"431";"INLOCUIT GIROFAR FATA";"1"
|
||||||
|
"436";"INLOCUIT INTINZATOR ALTERNATOR";"1"
|
||||||
|
"432";"INLOCUIT GRILA SUPERIOARA";"1"
|
||||||
|
"428";"INLOCUIT GARNITURI RACITOR DE ULEI MOTOR";"1"
|
||||||
|
"423";"INLOCUIT GARNITURA CHIULOASA";"1"
|
||||||
|
"422";"INLOCUIT GARNITURA CAPAC CUVA";"1"
|
||||||
|
"425";"INLOCUIT GARNITURI EGR";"1"
|
||||||
|
"427";"INLOCUIT GARNITURI FILTRU";"1"
|
||||||
|
"426";"INLOCUIT GARNITURI ETANSARE DPF";"1"
|
||||||
|
"386";"INLOCUIT ETRIER STG";"1"
|
||||||
|
"385";"INLOCUIT ETRIER FRANA DR SPATE";"1"
|
||||||
|
"387";"INLOCUIT FAR DR";"1"
|
||||||
|
"389";"INLOCUIT FAR DR COMPLET";"1"
|
||||||
|
"388";"INLOCUIT FAR DR + LAMPA POZITIE";"1"
|
||||||
|
"384";"INLOCUIT ELECTROVALVA";"1"
|
||||||
|
"380";"INLOCUIT DOZATOR ADBLUE";"1"
|
||||||
|
"379";"INLOCUIT DISTRIBUITOR LIFT";"1"
|
||||||
|
"381";"INLOCUIT ECU GEARBOX";"1"
|
||||||
|
"383";"INLOCUIT ECU ULEI MOTOR";"1"
|
||||||
|
"382";"INLOCUIT ECU PTO";"1"
|
||||||
|
"404";"INLOCUIT FILTRU POLEN";"1"
|
||||||
|
"401";"INLOCUIT FILTRU DPF";"1"
|
||||||
|
"405";"INLOCUIT FILTRU SCRUF";"1"
|
||||||
|
"408";"INLOCUIT FOAIE DE ARC FATA";"1"
|
||||||
|
"406";"INLOCUIT FILTRU ULEI";"1"
|
||||||
|
"400";"INLOCUIT FILTRU DE ULEI";"1"
|
||||||
|
"392";"INLOCUIT FERODOURI AXA 2 FATA STG/DR";"1"
|
||||||
|
"391";"INLOCUIT FAR STG";"1"
|
||||||
|
"393";"INLOCUIT FILTRE MOTORINA";"1"
|
||||||
|
"398";"INLOCUIT FILTRU DE AER MOTOR";"1"
|
||||||
|
"395";"INLOCUIT FILTRU ADBLUE+CAPAC FILTRU ADBLUE";"1"
|
||||||
|
"437";"INLOCUIT KIT ACCESORII";"1"
|
||||||
|
"491";"INLOCUIT OGLINDA STG";"1"
|
||||||
|
"488";"INLOCUIT NUCA SCHIMBATOR";"1"
|
||||||
|
"493";"INLOCUIT OGLINDA DR";"1"
|
||||||
|
"496";"INLOCUIT OGLINDA SI BUSON REZERVOR";"1"
|
||||||
|
"494";"INLOCUIT OGLINDA MICA STG.";"1"
|
||||||
|
"487";"INLOCUIT MOTOR ELECTRIC ACTIONARE LIFT";"1"
|
||||||
|
"482";"INLOCUIT MODUL DOZARE UPSTREAM CATALIZATOR";"1"
|
||||||
|
"481";"INLOCUIT MODUL - POMPA ADBLUE";"1"
|
||||||
|
"483";"INLOCUIT MODULATOR ABS/EBS";"1"
|
||||||
|
"486";"INLOCUIT MONITOR+CAMERA VIDE";"1"
|
||||||
|
"485";"INLOCUIT MONITOR LED";"1"
|
||||||
|
"508";"INLOCUIT PINION VIT2 + SINCROANE 1/2";"1"
|
||||||
|
"506";"INLOCUIT PINION CV VIT. 6";"1"
|
||||||
|
"509";"INLOCUIT PIVOTI";"1"
|
||||||
|
"516";"INLOCUIT PLACUTE FR";"1"
|
||||||
|
"513";"INLOCUIT PLACA DE COMANDA LIFT";"1"
|
||||||
|
"505";"INLOCUIT PINION CV VIT 2";"1"
|
||||||
|
"498";"INLOCUIT OGLINDA STG";"1"
|
||||||
|
"497";"INLOCUIT OGLINDA ST";"1"
|
||||||
|
"500";"INLOCUIT ORNAMENT ARIPA DRT. PUNTE FATA";"1"
|
||||||
|
"504";"INLOCUIT PERNA AER";"1"
|
||||||
|
"503";"INLOCUIT ORNAMENT PROIECTOR";"1"
|
||||||
|
"458";"INLOCUIT LAMPA NUMAR";"1"
|
||||||
|
"452";"INLOCUIT LAMPA DR PE CABINA";"1"
|
||||||
|
"459";"INLOCUIT LAMPA SEMNAL PE OGLINDA DREAPA";"1"
|
||||||
|
"461";"INLOCUIT LAMPA SEMNALIZARE STG PE OGLINDA";"1"
|
||||||
|
"460";"INLOCUIT LAMPA SEMNAL STANGA IN BARA";"1"
|
||||||
|
"451";"INLOCUIT LAMPA CORN STG SPATE";"1"
|
||||||
|
"442";"INLOCUIT KIT CUREA ACCESORII";"1"
|
||||||
|
"438";"INLOCUIT KIT AMBREAJ";"1"
|
||||||
|
"445";"INLOCUIT KIT GARNITURI CILINDRU EXPULZIE";"1"
|
||||||
|
"449";"INLOCUIT LAMPA CABINA DR";"1"
|
||||||
|
"446";"INLOCUIT KIT HIDRAULIC";"1"
|
||||||
|
"476";"INLOCUIT MANER USA DR FATA";"1"
|
||||||
|
"474";"INLOCUIT MACARA GEAM USA FATA STG";"1"
|
||||||
|
"477";"INLOCUIT MANER USA FATA STG";"1"
|
||||||
|
"480";"INLOCUIT MANSETE LA CILINDRU DE EXPULZIE";"1"
|
||||||
|
"479";"INLOCUIT MANETA SEMNALIZARE";"1"
|
||||||
|
"473";"INLOCUIT MACARA GEAM STG";"1"
|
||||||
|
"465";"INLOCUIT LAMPI";"1"
|
||||||
|
"463";"INLOCUIT LAMPA SPATE DRT.";"1"
|
||||||
|
"470";"INLOCUIT LICHID RACIRE";"1"
|
||||||
|
"472";"INLOCUIT MACARA GEAM DR FATA";"1"
|
||||||
|
"471";"INLOCUIT MACARA CU MOTORAS USA STG";"1"
|
||||||
|
"378";"INLOCUIT DISTRIBUITOR HIDRAULIC PRINCIPAL";"1"
|
||||||
|
"298";"INLOCUIT CAPETE BARA AXA VIRATOARE S +D";"1"
|
||||||
|
"297";"INLOCUIT CAPAC VIZITARE FAR STG SUPERIOR";"1"
|
||||||
|
"299";"INLOCUIT CAPETE BARA ST + DR";"1"
|
||||||
|
"301";"INLOCUIT CAPETE DE BARA LA CASETA DE DIRECTIE";"1"
|
||||||
|
"300";"INLOCUIT CAPETE BARA TRANSVERSALA S + D AXA 1";"1"
|
||||||
|
"296";"INLOCUIT CAPAC VIZITARE FAR STG INFERIOR";"1"
|
||||||
|
"287";"INLOCUIT CABLURI FRANA PARCARE";"1"
|
||||||
|
"286";"INLOCUIT CABLURI FRANA MANA";"1"
|
||||||
|
"289";"INLOCUIT CAMERA SI MONITOR";"1"
|
||||||
|
"293";"INLOCUIT CAP BARA DIRECTIE ST + DR";"1"
|
||||||
|
"292";"INLOCUIT CAP BARA (AMBELE PARTI)";"1"
|
||||||
|
"310";"INLOCUIT CAUTATOR CV";"1"
|
||||||
|
"309";"INLOCUIT CATALIZATOR";"1"
|
||||||
|
"311";"INLOCUIT CHIULASA COMPRESOR";"1"
|
||||||
|
"313";"INLOCUIT CILINDRU LATERAL";"1"
|
||||||
|
"312";"INLOCUIT CILINDRU AMBREIAJ";"1"
|
||||||
|
"308";"INLOCUIT CASETA DE DIRECTIE";"1"
|
||||||
|
"304";"INLOCUIT CAPOTA MOTOR";"1"
|
||||||
|
"302";"INLOCUIT CAPETE DE BARA S + D";"1"
|
||||||
|
"305";"INLOCUIT CARCASA OGLINDA DR";"1"
|
||||||
|
"307";"INLOCUIT CARDAN";"1"
|
||||||
|
"306";"INLOCUIT CARCASA OGLINDA STG.";"1"
|
||||||
|
"270";"INLOCUIT BUJIE INCANDESCENTA (4)";"1"
|
||||||
|
"269";"INLOCUIT BUCSI ETRIERI FATA";"1"
|
||||||
|
"271";"INLOCUIT BUJIE MOTOR 1 BUCATA";"1"
|
||||||
|
"274";"INLOCUIT BUJII 2 BUCATI";"1"
|
||||||
|
"272";"INLOCUIT BUJII";"1"
|
||||||
|
"268";"INLOCUIT BUCSI CABINA SPATE";"1"
|
||||||
|
"262";"INLOCUIT BUCSI BARA STABILIZATIOARE FATA";"1"
|
||||||
|
"261";"INLOCUIT BUCSI BARA STAB SPATE";"1"
|
||||||
|
"263";"INLOCUIT BUCSI BARA STABILIZATOARE FATA";"1"
|
||||||
|
"266";"INLOCUIT BUCSI BASCULA FATA STG + DR";"1"
|
||||||
|
"265";"INLOCUIT BUCSI BARA TORSIUNE FATA DR";"1"
|
||||||
|
"282";"INLOCUIT CABLU AMBREIAJ";"1"
|
||||||
|
"281";"INLOCUIT CABLU ACCELERATIE";"1"
|
||||||
|
"283";"INLOCUIT CABLU TIMONERIE";"1"
|
||||||
|
"285";"INLOCUIT CABLURI FRANA DE MANA";"1"
|
||||||
|
"284";"INLOCUIT CABLURI FRANA DE MANA";"1"
|
||||||
|
"280";"INLOCUIT CABLAJ POMPA ADBLUE";"1"
|
||||||
|
"276";"INLOCUIT BUTUC ROATA";"1"
|
||||||
|
"275";"INLOCUIT BUTUC FATA DREAPTA";"1"
|
||||||
|
"277";"INLOCUIT BUTUC ROATA FATA + RULMENT DR";"1"
|
||||||
|
"279";"INLOCUIT CABLAJ NOXE";"1"
|
||||||
|
"278";"INLOCUIT BUTUCI FATA CU RULMENTI";"1"
|
||||||
|
"314";"INLOCUIT CILINDRU RECEPTOR";"1"
|
||||||
|
"354";"INLOCUIT CUREA ALTERNATOR";"1"
|
||||||
|
"353";"INLOCUIT CUREA ALTERBATOR";"1"
|
||||||
|
"355";"INLOCUIT CUREA +ROLA TRANSMISIE";"1"
|
||||||
|
"357";"INLOCUIT CUREA TRANSMISIE";"1"
|
||||||
|
"356";"INLOCUIT CUREA SI ROLE";"1"
|
||||||
|
"352";"INLOCUIT CUREA A/C";"1"
|
||||||
|
"348";"INLOCUIT CRUCI CARDANICE";"1"
|
||||||
|
"347";"INLOCUIT CRUCE CRADAN";"1"
|
||||||
|
"349";"INLOCUIT CULISANTE ETRIER SPATE STG/DR";"1"
|
||||||
|
"351";"INLOCUIT CUREA + ROLA DISTRIBUTIE";"1"
|
||||||
|
"350";"INLOCUIT CUREA + ROLA AC";"1"
|
||||||
|
"367";"INLOCUIT DISCURI + PLACUTE FATA";"1"
|
||||||
|
"366";"INLOCUIT DISC SI PLACUTE AXA FATA";"1"
|
||||||
|
"370";"INLOCUIT DISCURI FATA";"1"
|
||||||
|
"377";"INLOCUIT DISTRIBUITOR COMPACTARE";"1"
|
||||||
|
"371";"INLOCUIT DISCURI FATA + PLACUTE";"1"
|
||||||
|
"365";"INLOCUIT DISC FRINA + PLACUTE SPATE";"1"
|
||||||
|
"361";"INLOCUIT DISC AMBREIAJ";"1"
|
||||||
|
"359";"INLOCUIT CUZINETI BIELA + 1 BIELA";"1"
|
||||||
|
"362";"INLOCUIT DISC FR SP (AMBELE)";"1"
|
||||||
|
"364";"INLOCUIT DISC FRANA(AMBELE)";"1"
|
||||||
|
"363";"INLOCUIT DISC FRANA FATA STG/DR";"1"
|
||||||
|
"322";"INLOCUIT COMPRESOR + CUREA";"1"
|
||||||
|
"321";"INLOCUIT COMANDA LIFT";"1"
|
||||||
|
"323";"INLOCUIT COMPRESOR A.C.";"1"
|
||||||
|
"326";"INLOCUIT COMPRESOR AER";"1"
|
||||||
|
"324";"INLOCUIT COMPRESOR A/C";"1"
|
||||||
|
"320";"INLOCUIT COLIERE TURBO";"1"
|
||||||
|
"316";"INLOCUIT CIRCUIT HIDRAULIC AMBREIAJ";"1"
|
||||||
|
"315";"INLOCUIT CILINDRU RECEPTOR AMBREIAJ";"1"
|
||||||
|
"317";"INLOCUIT CLAPETA ACCELERATIE";"1"
|
||||||
|
"319";"INLOCUIT COLIERE SI GARNITURI EVACUARE";"1"
|
||||||
|
"318";"INLOCUIT COLIERE FURTUN TURBINA";"1"
|
||||||
|
"337";"INLOCUIT CONDUCTA RACIRE EGR";"1"
|
||||||
|
"336";"INLOCUIT CONDUCTA RACIRE COMPRESOR/CHIULOASA";"1"
|
||||||
|
"339";"INLOCUIT CONDUCTA SISTEM INCALZIRE AD-BLUE";"1"
|
||||||
|
"341";"INLOCUIT CONDUCTE ALIMENTARE COMBUSTIBIL";"1"
|
||||||
|
"340";"INLOCUIT CONDUCTA ULEI TURBINA";"1"
|
||||||
|
"335";"INLOCUIT CONDUCTA POMPA RABATARE";"1"
|
||||||
|
"328";"INLOCUIT COMUTATOT STOP FRANA";"1"
|
||||||
|
"327";"INLOCUIT COMUTATOR MI";"1"
|
||||||
|
"329";"INLOCUIT CONDUCT RACIRE VAS - RADIATOR";"1"
|
||||||
|
"334";"INLOCUIT CONDUCTA INJECTOR";"1"
|
||||||
|
"333";"INLOCUIT CONDUCTA EGR";"1"
|
||||||
|
224
docs/prd/prd-5.14-mapare-llm-distilata.md
Normal file
224
docs/prd/prd-5.14-mapare-llm-distilata.md
Normal file
@@ -0,0 +1,224 @@
|
|||||||
|
<!-- plan sub /autoplan -->
|
||||||
|
# PRD 5.14 — Mapare automata operatii service prin distilare LLM
|
||||||
|
|
||||||
|
## Problema
|
||||||
|
|
||||||
|
La ingestie (canal API si import web), o prestatie poate veni cu `cod_op_service`
|
||||||
|
+ `denumire` in loc de `cod_prestatie` RAR. Daca nu exista mapare, submission-ul
|
||||||
|
intra in `needs_mapping` si asteapta confirmare umana. Service-urile reale au
|
||||||
|
**volume mari de denumiri particulare** (masurat: 17.435 denumiri DISTINCTE in 4
|
||||||
|
CSV-uri de clienti reali — `automotive` 13.170, `sigma` 3.743, `clever` 1.668,
|
||||||
|
`south` 875). Maparea manuala a acestora, prin editorul `needs_mapping`, e
|
||||||
|
prohibitiva: zeci de mii de operatii × confirmare umana.
|
||||||
|
|
||||||
|
Nomenclatorul RAR are doar **18 coduri** foarte largi (REPARATIE, INTRETINERE,
|
||||||
|
REVIZIE PERIODICA, etc. — `nomenclator_seed.py`). Deci problema nu e potrivire de
|
||||||
|
sinonime, ci **clasificare** a mii de operatii granulare in 18 categorii abstracte
|
||||||
|
+ detectare de „gunoi" (linii care nu sunt operatii: `ITP CT 12 ABC`, `DISCOUNT
|
||||||
|
MATERIALE 5%`, `MANOPERA`, nr. inmatriculare).
|
||||||
|
|
||||||
|
## Viziune (pivot 2026-06-28)
|
||||||
|
|
||||||
|
LLM-ul **NU ruleaza la runtime**. Rol unic: **etichetator offline** care
|
||||||
|
construieste un set de date (denumire -> cod). La runtime ruleaza un **clasificator
|
||||||
|
local mic, fara API** (similaritate / fuzzy / embeddings), „distilat" din etichetele
|
||||||
|
LLM + maparile validate de oameni. Trei straturi:
|
||||||
|
|
||||||
|
1. **Etichetare offline (LLM, periodic):** acopera denumirile cu cele mai multe
|
||||||
|
aparitii (frecventa) si grupeaza denumirile asemanatoare ca sa eticheteze ieftin.
|
||||||
|
2. **Clasificator runtime (fara AI):** exact -> fuzzy/substring -> similaritate
|
||||||
|
semantica (embeddings) peste baza de cunostinte. Zero cost per cerere, ruleaza pe
|
||||||
|
LXC.
|
||||||
|
3. **Baza de cunostinte PARTAJATA:** maparile validate de oameni din TOATE conturile
|
||||||
|
de service contribuie la clasificare (strat „gold" comun), peste etichetele LLM
|
||||||
|
(„silver" bootstrap). Munca de validare a unui service ajuta toate service-urile.
|
||||||
|
|
||||||
|
Viitor (nu acum): un LLM generativ local pe LXC. Pasul curent foloseste un model de
|
||||||
|
**embedding** (nu generativ): mic, CPU, milisecunde/text.
|
||||||
|
|
||||||
|
## Premise
|
||||||
|
|
||||||
|
1. **Volumul de denumiri distincte e finit si se schimba lent.** Odata etichetate,
|
||||||
|
90%+ din traficul viitor sunt repetari ale acelorasi denumiri (service-ul
|
||||||
|
refoloseste propriul vocabular). Lege Zipf: top 100 denumiri = 43.6% volum,
|
||||||
|
top 500 = 67.7%, top 1000 = 76.2% (din 155.195 operatii totale).
|
||||||
|
2. **RAR accepta NUMAI coduri din nomenclator.** Un cod necunoscut -> HTTP 500
|
||||||
|
(`ORA-12899`) + record PARTIAL FINALIZATA (terminal). Deci orice cod propus de
|
||||||
|
un sistem automat TREBUIE validat fata de nomenclator inainte de enqueue
|
||||||
|
(invariant existent in `resolve_prestatii(..., valid_codes)`).
|
||||||
|
3. **Maparea gresita are cost asimetric:** un cod gresit trimis = FINALIZATA
|
||||||
|
ireversibil la RAR. Deci pragul de auto-trimitere ramane conservator; incertul
|
||||||
|
ramane `needs_mapping` cu om in bucla. Etichetele LLM NEVALIDATE = sugestie, nu
|
||||||
|
auto-trimitere (vezi scara de incredere).
|
||||||
|
4. **Hardware LLM local generativ e prea lent acum** (masurat: Ollama LXC 104
|
||||||
|
generativ 180-320s/op). Embeddings locale insa sunt rapide pe CPU si suficiente
|
||||||
|
pentru similaritate la runtime.
|
||||||
|
5. **Datele nu sunt sensibile** (confirmat utilizator): denumirile de operatii pot
|
||||||
|
merge la API-uri cloud pentru etichetare. PII incidental (nr. inmatriculare/VIN)
|
||||||
|
se face scrub inainte de trimitere (F3).
|
||||||
|
|
||||||
|
## Masuratori
|
||||||
|
|
||||||
|
### Bootstrap (anterior, Groq)
|
||||||
|
- Groq `llama-3.3-70b`: 28ms/op, acord 94% cu heuristica pe cazuri clare, detectare
|
||||||
|
gunoi excelenta (`NUL`). Abandonat ca furnizor: cap zilnic free atins + cheie expusa.
|
||||||
|
|
||||||
|
### OpenRouter free — NVIDIA Nemotron (masurat 2026-06-28)
|
||||||
|
Furnizor nou pentru etichetare: cheie utilizator, modele GRATUITE, date ne-sensibile.
|
||||||
|
|
||||||
|
- **Capcane de cont (rezolvate):** modelele free dau initial `404 No allowed
|
||||||
|
providers` din cauza unui allowlist de provideri pe cont (venice/together/fireworks/
|
||||||
|
atlas-cloud) — `open-inference`/`google-ai-studio`/`nvidia` erau excluse. Fix:
|
||||||
|
eliminat restrictia in Settings -> Preferences + activat toggle-ul de privacy
|
||||||
|
„free endpoints may publish/train". WAF: User-Agent `Mozilla/5.0` obligatoriu.
|
||||||
|
- **Set fiabil = familia NVIDIA Nemotron.** Restul modelelor sunt 429 (rate-limited
|
||||||
|
upstream, partajat global: llama-3.3-70b, qwen3-next, gemma, hermes, dolphin) sau
|
||||||
|
404 (gpt-oss). Cap free tier ~50 cereri/zi fara credit.
|
||||||
|
- **Test ensemble pe top 120 dupa frecventa (46.4% din volum), 2026-06-28:**
|
||||||
|
|
||||||
|
| Model | ms/op | parse-fail | acord vs Groq (overlap) |
|
||||||
|
|---|---|---|---|
|
||||||
|
| nemotron-3-super-120b | 1463 | 0 | 100% |
|
||||||
|
| nemotron-nano-9b-v2 | 1248 | 0 | 100% |
|
||||||
|
| nemotron-3-ultra-550b | 6450 | 0 | 100% |
|
||||||
|
|
||||||
|
Acord ensemble ponderat pe volum: **3/3 unanim = 87% volum**, 2/3 = 13%, dezacord
|
||||||
|
total = **0%**. Din unanim: 7 NUL (gunoi), 100 coduri reale.
|
||||||
|
- **Decizie model:** pastram `super-120b` + `nano-9b`; **aruncam `ultra-550b`**
|
||||||
|
(4-5x mai lent, zero castig de acuratete). Caveat: ensemble din aceeasi familie
|
||||||
|
NVIDIA -> acordul supraestimeaza increderea fata de un ensemble cross-family.
|
||||||
|
- **Dezacordurile (13%) sunt cazuri de granita taxonomica reala**, nu zgomot:
|
||||||
|
`REGLAT DIRECTIE/FARURI` (OE-2 intretinere vs OE-4 reglare), `MANOPERA
|
||||||
|
TINICHIGERIE` (NUL vs OE-1), `DEZECHIPAT usa/bara` (pas de demontare), `INLOCUIT
|
||||||
|
FILTRU AER` (OE-1 vs OE-3). Astea trebuie sa cada in `needs_mapping`.
|
||||||
|
|
||||||
|
## Solutia
|
||||||
|
|
||||||
|
### Stratul 1 — Etichetare offline (LLM, fara cod runtime)
|
||||||
|
|
||||||
|
Tool CLI (`tools/mapare-llm/`, stil `tools/apikey`). Etichetatorul OpenRouter
|
||||||
|
(`or_common.py` + `or_label.py`) clasifica denumirile in cele 18 coduri RAR + `NUL`:
|
||||||
|
|
||||||
|
1. **Prioritizare pe FRECVENTA (NR), nu alfabetic.** Etichetam intai denumirile cu
|
||||||
|
cele mai multe aparitii (acopera cel mai mult volum per apel).
|
||||||
|
2. **Grupare pe similaritate inainte de etichetare.** Denumirile aproape identice
|
||||||
|
(`REGLAT DIRECTIE` / `REGLAT DIRECTIA` / `REGLARE DIRECTIE`) se grupeaza; LLM
|
||||||
|
eticheteaza doar **reprezentantul grupului**, codul se propaga la tot grupul.
|
||||||
|
Maximizeaza acoperirea per apel LLM (critic pe cap free de ~50 cereri/zi).
|
||||||
|
3. **Ensemble NVIDIA** (`super-120b` + `nano-9b`): acord -> incredere mai mare;
|
||||||
|
dezacord -> ramane pentru `needs_mapping`. Vot pe coduri, nu self-confidence.
|
||||||
|
4. **Scrub PII** (regex nr. inmatriculare/VIN) inainte de trimitere (F3, exista).
|
||||||
|
5. Output: dataset etichetat cu `denumire, cod, sursa, confidence` (provenienta).
|
||||||
|
`NUL` marcat separat (ancore negative + supresie), NU se promoveaza la cod RAR.
|
||||||
|
|
||||||
|
Prompt cu reguli explicite (avarii grave DOAR la accident; vopsire = reparatie;
|
||||||
|
ulei+filtru = revizie; gunoi -> NUL). Batch mare (cap free tier), retry/backoff pe
|
||||||
|
429, respecta `Retry-After`.
|
||||||
|
|
||||||
|
### Stratul 2 — Clasificator runtime (FARA AI, fara API)
|
||||||
|
|
||||||
|
Pentru o denumire din prezentare (canal API sau import), in `app/mapping.py`:
|
||||||
|
|
||||||
|
1. **Exact** in baza de cunostinte (`operations_mapping` + strat partajat) -> cod direct.
|
||||||
|
2. **Fuzzy/substring** (`operation_text_rules`, `rapidfuzz`) — exista deja.
|
||||||
|
3. **Similaritate semantica (embeddings)** — NOU: model multilingv mic (ex.
|
||||||
|
`intfloat/multilingual-e5-small` sau `paraphrase-multilingual-MiniLM`), CPU.
|
||||||
|
Vectorizam baza etichetata o data; la runtime vectorizam denumirea noua si luam
|
||||||
|
cel mai apropiat vecin (sau top-k cu vot). Optional: clasificator `scikit-learn`
|
||||||
|
(regresie logistica / kNN) antrenat pe (embedding -> cod) pentru generalizare
|
||||||
|
dincolo de vecinul exact. „Antrenarea pe datele de test" = acest pas, secunde,
|
||||||
|
ruleaza oriunde.
|
||||||
|
4. Cod propus -> validat OBLIGATORIU `valid_codes` (garda ORA-12899). Peste pragul
|
||||||
|
de incredere -> conform scarii; altfel `needs_mapping`.
|
||||||
|
|
||||||
|
Decizie de gazduire runtime: ramane deschisa pentru reviziile plan (in-proces in
|
||||||
|
gateway vs microserviciu pe LXC/Flowise). Default propus: in-proces (cel mai simplu).
|
||||||
|
|
||||||
|
### Stratul 3 — Baza de cunostinte PARTAJATA cross-account
|
||||||
|
|
||||||
|
**Schimbare fata de versiunea anterioara** (care izola corpusul per cont):
|
||||||
|
|
||||||
|
- **Strat GOLD partajat:** maparile **validate de oameni** (din `needs_mapping`, in
|
||||||
|
ORICE cont) intra intr-un store partajat `denumire_normalizata -> cod`. Astfel
|
||||||
|
validarea facuta de un service ridica increderea pentru toate. Cheia = denumire
|
||||||
|
normalizata (scrub PII, lower, strip), nu textul brut.
|
||||||
|
- **Strat SILVER:** etichetele LLM (bootstrap) — sugestii, NU auto-trimitere.
|
||||||
|
- **Override per-cont:** daca un cont mapeaza explicit o denumire la alt cod decat
|
||||||
|
cel partajat (conflict legitim de vocabular), override-ul contului castiga pentru
|
||||||
|
acel cont. Conflictele inter-cont se rezolva cu provenienta + (optional) majoritate.
|
||||||
|
|
||||||
|
Confirmarile umane curg organic prin folosirea normala a editorului `needs_mapping`
|
||||||
|
— FARA sesiune separata de adjudecare manuala (cerinta utilizator).
|
||||||
|
|
||||||
|
### Scara de incredere (runtime, per operatie din prezentare)
|
||||||
|
|
||||||
|
| Treapta | Sursa | Actiune | Frictiune |
|
||||||
|
|---|---|---|---|
|
||||||
|
| Certa | exact in stratul GOLD (validat de om, orice cont) sau override cont | auto-trimite | zero |
|
||||||
|
| Inalta | embedding NN cu similaritate FOARTE inalta la o mapare GOLD + ensemble LLM unanim | auto-trimite (prag calibrat) | zero |
|
||||||
|
| Medie | LLM silver / similaritate medie | `needs_mapping` cu sugestie pre-completata -> 1 click | minima |
|
||||||
|
| Joasa | similaritate slaba / coduri apropiate | `needs_mapping` manual | normala |
|
||||||
|
| NUL | non-operatie (ITP, discount, nr. inmatriculare) | marcat „nu e operatie", suprimat | — |
|
||||||
|
|
||||||
|
**Invariant F1 (pastrat):** o eticheta pur-LLM NEVALIDATA nu auto-trimite singura;
|
||||||
|
auto-send cere ori GOLD (validat de om), ori treapta „inalta" calibrata. Tensiunea
|
||||||
|
centrala (utilizatorul se bazeaza pe LLM, dar FINALIZATA e ireversibil) = intrebarea
|
||||||
|
cheie pentru reviziile plan: unde fix se aseaza bara treptei „inalta".
|
||||||
|
|
||||||
|
## Integrare
|
||||||
|
|
||||||
|
- Stratul 1: tool CLI offline `tools/mapare-llm/` (exista: `or_common.py`,
|
||||||
|
`or_modeltest.py`; de adaugat `or_label.py` cu grupare + propagare).
|
||||||
|
- Stratul 2: `suggest_from_corpus` + similaritate embeddings in `app/mapping.py`,
|
||||||
|
apelata in `pending_unmapped` pentru sugestia din editor. Model embedding incarcat
|
||||||
|
la pornire / serviciu, vectori pre-calculati pe baza.
|
||||||
|
- Stratul 3: store partajat (tabela noua `shared_mappings` sau coloana de scope pe
|
||||||
|
`operations_mapping`), seed la confirmare umana; override per-cont.
|
||||||
|
- Validare `valid_codes` pe tot lantul (exista).
|
||||||
|
|
||||||
|
## Non-obiective
|
||||||
|
|
||||||
|
- Nu inlocuim confirmarea umana pentru cazuri incerte.
|
||||||
|
- Nu trimitem automat coduri sub prag / etichete LLM nevalidate.
|
||||||
|
- Nu adaugam dependenta cloud la RUNTIME (LLM doar offline pentru etichetare).
|
||||||
|
- Nu antrenam un LLM generativ local acum (viitor).
|
||||||
|
|
||||||
|
## Riscuri
|
||||||
|
|
||||||
|
- Etichete LLM gresite tratate ca adevar daca scapa garda F1 (seed direct in GOLD).
|
||||||
|
- Ensemble aceeasi familie (NVIDIA) -> acord corelat-gresit; supraestimare incredere.
|
||||||
|
- Strat partajat cross-account: o denumire poate insemna lucruri diferite la
|
||||||
|
service-uri diferite -> conflict; mitigat prin override per-cont + provenienta.
|
||||||
|
- Drift: denumiri noi neacoperite; embeddings ajuta dar nu elimina.
|
||||||
|
- Free tier OpenRouter flaky (429/404, cap 50/zi) -> etichetarea bulk e lenta;
|
||||||
|
e offline, deci tolerabil, dar nu pe calea critica de productie.
|
||||||
|
- Model embedding ales: calitate pe limba romana de verificat empiric.
|
||||||
|
|
||||||
|
<!-- AUTONOMOUS DECISION LOG -->
|
||||||
|
## Decision Audit Trail
|
||||||
|
|
||||||
|
| # | Faza | Decizie | Clasificare | Principiu | Rationament | Respins |
|
||||||
|
|---|------|---------|-------------|-----------|-------------|---------|
|
||||||
|
| 1 | Eng | Seed-ul NU intra direct in stratul auto-send; etichetele LLM = strat SILVER (sugestii). Auto-send cere GOLD (validat de om) sau treapta inalta calibrata | TASTE (critic) | P1, P5 | `resolve_prestatii`->`queued` direct => seed auto = AUTO-TRIMITERE ghiciri la FINALIZATA ireversibil (Premisa 3) | seed direct in auto-send |
|
||||||
|
| 2 | Eng | Seeder = `INSERT OR IGNORE` / refuza overwrite pe randuri validate de om | MECHANICAL | P1 | re-rularea ar clobber-ui maparile umane cu ghiciri LLM | ON CONFLICT UPDATE |
|
||||||
|
| 3 | Eng | Scrub regex (nr. inmatriculare/VIN) inainte de trimitere la LLM | TASTE | P1 | gunoiul contine `ITP CT 12 ABC` = nr. inmatriculare = PII | trimitere text brut |
|
||||||
|
| 4 | Eng | NUL = ancore negative in corpus + lista supresie | MECHANICAL | P1 | altfel gunoiul recurent reintra mereu in needs_mapping si fuzzy ii da cod gresit | exclude NUL |
|
||||||
|
| 5 | Eng | Coloana `source`/`confidence` (provenienta) pe baza de cunostinte | MECHANICAL | P1 | audit + rollback batch model prost + safe re-seed | fara provenienta |
|
||||||
|
| 6 | Eng | Runtime = embeddings + clasificator mic (sklearn), NU LLM generativ | TASTE | P3, P5 | LLM generativ local prea lent (Premisa 4); embeddings CPU suficiente + rapide | LLM la runtime |
|
||||||
|
| 8 | Eng | **SUPERSEDED:** corpus partajat cross-account (strat GOLD comun), NU per-cont izolat; override per-cont pe conflict | TASTE | P1, P2 | cerinta utilizator: validarea unui service ajuta toate; muncă compusa. Conflictul de vocabular rezolvat prin override + provenienta | (vechi: corpus strict per-cont) |
|
||||||
|
| 9 | Eng | Furnizor etichetare = OpenRouter free, ensemble NVIDIA (super-120b + nano-9b); aruncat ultra-550b | MECHANICAL | P3 | masurat 2026-06-28: doar NVIDIA routeaza fiabil; ultra 4-5x lent fara castig | Groq (cap atins) / ultra |
|
||||||
|
| 10 | Eng | Etichetare prioritizata pe frecventa + grupare pe similaritate (eticheteaza reprezentant, propaga) | MECHANICAL | P2 | acopera mult mai mult volum per apel; critic pe cap free ~50/zi | etichetare alfabetica |
|
||||||
|
|
||||||
|
## Istoric review (pre-pivot)
|
||||||
|
|
||||||
|
Versiunea anterioara a trecut prin `/autoplan` (mod SELECTIVE EXPANSION, subagent-only,
|
||||||
|
Codex indisponibil). Constatari portante atunci: **F1 CRITIC** (seed=auto-send),
|
||||||
|
F2/F3/F4 HIGH (idempotenta seed, scrub PII, ancore NUL), F5/F6/F7/F8 MEDIUM. Acele
|
||||||
|
decizii sunt incorporate in Decision Audit Trail de mai sus. Pivotul 2026-06-28
|
||||||
|
(LLM offline-only + runtime embeddings + strat partajat cross-account) NECESITA o
|
||||||
|
noua rulare de review (CEO / Eng / Design) — de aceea sectiunea GSTACK REVIEW REPORT
|
||||||
|
e goala momentan si se completeaza la urmatoarea rulare.
|
||||||
|
|
||||||
|
## GSTACK REVIEW REPORT
|
||||||
|
|
||||||
|
(de completat la rularea reviziilor pe versiunea pivotata — plan-ceo / plan-eng / plan-design)
|
||||||
85
tools/mapare-llm/bigtest.py
Normal file
85
tools/mapare-llm/bigtest.py
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
import json, urllib.request, math, time, csv, glob, random, re, unicodedata
|
||||||
|
|
||||||
|
IP="10.0.20.161"; MODEL="nomic-embed-text"; N=140
|
||||||
|
random.seed(42)
|
||||||
|
|
||||||
|
def embed(t):
|
||||||
|
req=urllib.request.Request(f"http://{IP}:11434/api/embeddings",
|
||||||
|
data=json.dumps({"model":MODEL,"prompt":t,"keep_alive":"30m"}).encode(),
|
||||||
|
headers={"Content-Type":"application/json"})
|
||||||
|
with urllib.request.urlopen(req,timeout=120) as r: return json.load(r)["embedding"]
|
||||||
|
def cos(a,b): return sum(x*y for x,y in zip(a,b))/(math.sqrt(sum(x*x for x in a))*math.sqrt(sum(y*y for y in b)))
|
||||||
|
|
||||||
|
ANCORE={
|
||||||
|
"OE-1":"REPARATIE: inlocuit sau reparat piesa defecta: placute frana, kit ambreaj, kit distributie, amortizoare, rulment, toba esapament, alternator, pompa, radiator, demontat montat piesa, vopsit usa aripa, reparat caroserie, vulcanizare, sudura",
|
||||||
|
"OE-2":"INTRETINERE curenta: aerisit frane, gresat, curatat, verificat si completat nivele lichide, intretinere periodica minora",
|
||||||
|
"OE-3":"REVIZIE PERIODICA la kilometri: schimb ulei motor si filtru ulei, filtru aer polen combustibil, revizie 15000 30000 60000 km",
|
||||||
|
"OE-4":"REGLARE FUNCTIONALA: reglaj faruri, geometrie directie, supape, calibrare senzori, adaptare actuator, fara inlocuire piese",
|
||||||
|
"OE-5":"MODIFICARE CONSTRUCTIVA: montare carlig remorcare, GPL, transformare omologata",
|
||||||
|
"OE-6":"RECONSTRUCTIE vehicul avariat sever dupa dauna totala",
|
||||||
|
"OE-7":"ACTUALIZARE SOFTWARE: update software calculator, programare ECU, codare module, flash",
|
||||||
|
"OE-8":"INLOCUIRE SEZONIERA A ANVELOPELOR: montat anvelope iarna vara, schimb sezonier cauciucuri",
|
||||||
|
"OE-D":"AVARIE GRAVA sistem directie in urma unui accident",
|
||||||
|
"OE-F":"AVARIE GRAVA sistem franare in urma unui accident",
|
||||||
|
"OE-C":"AVARIE GRAVA structura caroserie in urma unui accident",
|
||||||
|
"OE-S":"AVARIE GRAVA structura sasiu in urma unui accident",
|
||||||
|
"OE-R":"AVARIE GRAVA sistem retinere airbag centuri in urma unui accident",
|
||||||
|
"OE-A":"AVARIE GRAVA sistem ADAS asistenta condus in urma unui accident",
|
||||||
|
"OE-I":"ISTORIC INDICATIE ODOMETRU vehicule inmatriculate anterior in alte tari",
|
||||||
|
"AITLV":"INREGISTRARE ATELIER inspectie tahografe limitatoare viteza",
|
||||||
|
"R-ODO":"REPARATIE ODOMETRU kilometraj ceas bord",
|
||||||
|
"I-ODO":"INLOCUIRE ODOMETRU kilometraj ceas bord"}
|
||||||
|
|
||||||
|
# heuristica de referinta (doar pe cazuri clare) pentru un semnal de acord
|
||||||
|
def norm(s): return ''.join(c for c in unicodedata.normalize('NFD',s.upper()) if unicodedata.category(c)!='Mn')
|
||||||
|
def heur(op):
|
||||||
|
s=norm(op)
|
||||||
|
if re.search(r'\bITP\b|ACHITAT|CONF\.|FACTUR|MANOPERA|DEPLAS|^[A-Z]{1,2} ?\d{2,3} ?[A-Z]{3}$',s): return "NUL"
|
||||||
|
if 'ANVELOP' in s or 'CAUCIUC' in s or 'JANT' in s: return "OE-8"
|
||||||
|
if 'SOFTWARE' in s or 'CODARE' in s or 'PROGRAMARE' in s or 'UPDATE' in s: return "OE-7"
|
||||||
|
if 'REVIZIE' in s or ('ULEI' in s and 'MOTOR' in s) or 'FILTRU ULEI' in s: return "OE-3"
|
||||||
|
if 'REGLAJ' in s or 'REGLARE' in s or 'GEOMETRIE' in s or 'CALIBRARE' in s: return "OE-4"
|
||||||
|
if 'AERISIT' in s or 'GRESAT' in s or 'CURATAT' in s: return "OE-2"
|
||||||
|
if s.startswith('INLOCUIT') or s.startswith('INLOC') or 'REPARAT' in s or s.startswith('D/R') or 'VOPSIT' in s or 'SCHIMBAT' in s or 'MONTAT' in s:
|
||||||
|
return "OE-1"
|
||||||
|
return None # necunoscut -> nu evaluam
|
||||||
|
|
||||||
|
# incarca toate operatiile distincte
|
||||||
|
ops=set()
|
||||||
|
for f in sorted(glob.glob("/workspace/autopass/docs/operatii-service/*.csv")):
|
||||||
|
for r in list(csv.reader(open(f,encoding="utf-8",errors="replace"),delimiter=";"))[1:]:
|
||||||
|
if len(r)>1 and r[1].strip(): ops.add(r[1].strip())
|
||||||
|
ops=sorted(ops); sample=random.sample(ops,N)
|
||||||
|
print(f"{len(ops)} operatii distincte; esantion random {N}\n",flush=True)
|
||||||
|
|
||||||
|
t0=time.time()
|
||||||
|
anc=[(c,embed(d)) for c,d in ANCORE.items()]
|
||||||
|
print(f"ancore embed: {time.time()-t0:.0f}s",flush=True)
|
||||||
|
|
||||||
|
THR=0.55 # prag de incredere
|
||||||
|
res=[]
|
||||||
|
for op in sample:
|
||||||
|
e=embed(op)
|
||||||
|
rang=sorted(((cos(e,v),c) for c,v in anc),reverse=True)
|
||||||
|
sim,cod=rang[0]; sim2=rang[1][0]
|
||||||
|
res.append((op,cod,sim,sim-sim2))
|
||||||
|
|
||||||
|
# statistici
|
||||||
|
from collections import Counter
|
||||||
|
dist=Counter(c for _,c,_,_ in res)
|
||||||
|
acc=sum(1 for _,_,s,_ in res if s>=THR)
|
||||||
|
amb=sum(1 for _,_,_,m in res if m<0.03)
|
||||||
|
# acord cu heuristica pe subsetul clar
|
||||||
|
ev=[(op,cod) for (op,cod,_,_) in res if heur(op) is not None]
|
||||||
|
agree=sum(1 for op,cod in ev if heur(op)==cod)
|
||||||
|
print(f"\n--- {N} operatii in {time.time()-t0:.0f}s ({(time.time()-t0)/N:.1f}s/op) ---")
|
||||||
|
print("Distributie coduri:", dict(dist.most_common()))
|
||||||
|
print(f"Peste prag {THR}: {acc}/{N} ({100*acc//N}%) | Ambigue(marja<0.03): {amb}")
|
||||||
|
print(f"Acord cu heuristica pe {len(ev)} cazuri clare: {agree}/{len(ev)} ({100*agree//max(len(ev),1)}%)")
|
||||||
|
print("\nDEZACORDURI fata de heuristica (de inspectat):")
|
||||||
|
for op,cod in ev:
|
||||||
|
if heur(op)!=cod: print(f" {op:<40} embed={cod:<6} heur={heur(op)}")
|
||||||
|
print("\nESANTION (primele 45):")
|
||||||
|
for op,cod,sim,m in res[:45]:
|
||||||
|
flag="LOW" if sim<THR else ("AMB" if m<0.03 else "")
|
||||||
|
print(f" {op:<42}{cod:<6}{sim:.3f} {flag}")
|
||||||
81
tools/mapare-llm/eval_det.py
Normal file
81
tools/mapare-llm/eval_det.py
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
"""Evalueaza un clasificator DETERMINIST (fara AI la runtime) construit din
|
||||||
|
etichetele Groq. Split 90/10: 'antrenam' pe 90% (lookup exact + fuzzy NN +
|
||||||
|
Naive Bayes pe tokeni), testam pe 10% nevazute. Masuram acoperire + acuratete
|
||||||
|
per strat si global, fata de etichetele Groq (referinta)."""
|
||||||
|
import json, re, unicodedata, random, math, time, os
|
||||||
|
from collections import defaultdict, Counter
|
||||||
|
from rapidfuzz import process, fuzz
|
||||||
|
|
||||||
|
OUT="/tmp/claude-1000/-workspace-autopass/4177677c-7995-4fab-bbd5-16735cb335e3/scratchpad/labels.json"
|
||||||
|
random.seed(7)
|
||||||
|
|
||||||
|
def norm(s):
|
||||||
|
s=''.join(c for c in unicodedata.normalize('NFD',s.upper()) if unicodedata.category(c)!='Mn')
|
||||||
|
s=re.sub(r'[^A-Z0-9/ ]',' ',s); s=re.sub(r'\s+',' ',s).strip()
|
||||||
|
return s
|
||||||
|
def toks(s): return [t for t in norm(s).split() if len(t)>1]
|
||||||
|
|
||||||
|
labels=json.load(open(OUT))
|
||||||
|
items=list(labels.items())
|
||||||
|
random.shuffle(items)
|
||||||
|
cut=int(len(items)*0.9)
|
||||||
|
train=items[:cut]; test=items[cut:]
|
||||||
|
print(f"{len(items)} etichetate | train {len(train)} | test {len(test)}")
|
||||||
|
|
||||||
|
# --- strat 1: lookup exact normalizat ---
|
||||||
|
exact={}
|
||||||
|
for op,c in train: exact[norm(op)]=c # ultima castiga (rar conflicte)
|
||||||
|
|
||||||
|
# --- strat 2: fuzzy NN (rapidfuzz) ---
|
||||||
|
train_norm=[norm(op) for op,_ in train]
|
||||||
|
train_code=[c for _,c in train]
|
||||||
|
norm2code={}
|
||||||
|
for n,c in zip(train_norm,train_code): norm2code.setdefault(n,c)
|
||||||
|
choices=list(norm2code.keys())
|
||||||
|
FUZZ_THR=88
|
||||||
|
|
||||||
|
# --- strat 3: Naive Bayes pe tokeni (invatat din etichete) ---
|
||||||
|
classes=Counter(c for _,c in train)
|
||||||
|
prior={c:math.log(n/len(train)) for c,n in classes.items()}
|
||||||
|
tok_cnt=defaultdict(lambda: defaultdict(int)); tok_tot=defaultdict(int)
|
||||||
|
vocab=set()
|
||||||
|
for op,c in train:
|
||||||
|
for t in toks(op): tok_cnt[c][t]+=1; tok_tot[c]+=1; vocab.add(t)
|
||||||
|
V=len(vocab)
|
||||||
|
def nb(op):
|
||||||
|
best=None; bests=-1e18
|
||||||
|
for c in classes:
|
||||||
|
s=prior[c]
|
||||||
|
for t in toks(op):
|
||||||
|
s+=math.log((tok_cnt[c][t]+1)/(tok_tot[c]+V))
|
||||||
|
if s>bests: bests=s; best=c
|
||||||
|
return best
|
||||||
|
MAJ=classes.most_common(1)[0][0]
|
||||||
|
|
||||||
|
def predict(op):
|
||||||
|
n=norm(op)
|
||||||
|
if n in exact: return exact[n],"exact"
|
||||||
|
m=process.extractOne(n,choices,scorer=fuzz.WRatio)
|
||||||
|
if m and m[1]>=FUZZ_THR: return norm2code[m[0]],"fuzzy"
|
||||||
|
if toks(op): return nb(op),"nb"
|
||||||
|
return MAJ,"default"
|
||||||
|
|
||||||
|
t0=time.time()
|
||||||
|
layer=Counter(); ok=Counter(); tot=Counter()
|
||||||
|
mis=[]
|
||||||
|
for op,truth in test:
|
||||||
|
pred,lyr=predict(op)
|
||||||
|
layer[lyr]+=1; tot[lyr]+=1
|
||||||
|
if pred==truth: ok[lyr]+=1
|
||||||
|
elif len(mis)<25: mis.append((op,pred,truth,lyr))
|
||||||
|
dt=time.time()-t0
|
||||||
|
TOTAL=len(test); OKALL=sum(ok.values())
|
||||||
|
print(f"\nPredictie {TOTAL} cazuri in {dt:.2f}s ({1000*dt/TOTAL:.2f} ms/op) - FARA AI")
|
||||||
|
print(f"\nACURATETE GLOBALA (vs Groq): {OKALL}/{TOTAL} = {100*OKALL/TOTAL:.1f}%")
|
||||||
|
print(f"\n{'strat':<8}{'aparitii':>9}{'corecte':>9}{'acuratete':>11}{'acoperire':>11}")
|
||||||
|
for lyr in ["exact","fuzzy","nb","default"]:
|
||||||
|
if tot[lyr]:
|
||||||
|
print(f"{lyr:<8}{tot[lyr]:>9}{ok[lyr]:>9}{100*ok[lyr]/tot[lyr]:>10.1f}%{100*tot[lyr]/TOTAL:>10.1f}%")
|
||||||
|
print("\nExemple gresite (pred != Groq):")
|
||||||
|
for op,p,t,l in mis[:20]:
|
||||||
|
print(f" [{l}] {op:<42} pred={p:<6} groq={t}")
|
||||||
86
tools/mapare-llm/f7_ensemble.py
Normal file
86
tools/mapare-llm/f7_ensemble.py
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
import json, urllib.request, urllib.error, time, os, csv, glob, random, re
|
||||||
|
from collections import Counter
|
||||||
|
|
||||||
|
KEY=os.environ["GROQ_KEY"]; N=150; BATCH=30
|
||||||
|
MODELS=["llama-3.3-70b-versatile","openai/gpt-oss-120b","qwen/qwen3-32b"]
|
||||||
|
OUT="/tmp/claude-1000/-workspace-autopass/4177677c-7995-4fab-bbd5-16735cb335e3/scratchpad/f7_result.json"
|
||||||
|
random.seed(123)
|
||||||
|
|
||||||
|
CODURI=("OE-1=REPARATIE, OE-2=INTRETINERE, OE-3=REVIZIE PERIODICA, OE-4=REGLARE FUNCTIONALA, "
|
||||||
|
"OE-5=MODIFICARE CONSTRUCTIVA, OE-6=RECONSTRUCTIE, OE-7=ACTUALIZARE SOFTWARE, "
|
||||||
|
"OE-8=INLOCUIRE SEZONIERA ANVELOPE, OE-D=AVARIE GRAVA DIRECTIE, OE-F=AVARIE GRAVA FRANARE, "
|
||||||
|
"OE-C=AVARIE GRAVA CAROSERIE, OE-S=AVARIE GRAVA SASIU, OE-R=AVARIE GRAVA RETINERE/AIRBAG, "
|
||||||
|
"OE-A=AVARIE GRAVA ADAS, OE-I=ISTORIC ODOMETRU, AITLV=ATELIER TAHOGRAFE, "
|
||||||
|
"R-ODO=REPARATIE ODOMETRU, I-ODO=INLOCUIRE ODOMETRU, NUL=NU e operatie de service")
|
||||||
|
SYS=("Esti expert RAR AUTOPASS. Clasifici fiecare operatie de service-auto in EXACT unul din coduri:\n"+CODURI+
|
||||||
|
"\nReguli: AVARIILE GRAVE (OE-D/F/C/S/R/A) DOAR pentru daune in urma unui accident, NU reparatii curente. "
|
||||||
|
"Vopsire/revopsire/retus = REPARATIE (OE-1). Inlocuire/D-R/reparare piese = REPARATIE (OE-1). "
|
||||||
|
"Schimb ulei motor + filtre = REVIZIE (OE-3). Aerisit/gresat/completat nivele = INTRETINERE (OE-2). "
|
||||||
|
"Text care nu e operatie efectiva (ITP, plata, discount, manopera generica, nr inmatriculare, doar nume piesa) -> NUL. "
|
||||||
|
"Raspunde DOAR JSON {\"rez\":[{\"i\":<numar>,\"cod\":\"...\"}]}.")
|
||||||
|
|
||||||
|
# F3: scrub PII (nr inmatriculare) inainte de trimitere
|
||||||
|
PLATE=re.compile(r'\b[A-Z]{1,2}\s?\d{2,3}\s?[A-Z]{3}\b')
|
||||||
|
VIN=re.compile(r'\b[A-HJ-NPR-Z0-9]{17}\b')
|
||||||
|
def scrub(s): return VIN.sub('[VIN]',PLATE.sub('[NR]',s))
|
||||||
|
|
||||||
|
def call(model,batch):
|
||||||
|
msgs=[{"role":"system","content":SYS},
|
||||||
|
{"role":"user","content":"\n".join(f"{i+1}. {scrub(o)}" for i,o in enumerate(batch))}]
|
||||||
|
body={"model":model,"messages":msgs,"temperature":0,"response_format":{"type":"json_object"}}
|
||||||
|
data=json.dumps(body).encode()
|
||||||
|
for attempt in range(8):
|
||||||
|
req=urllib.request.Request("https://api.groq.com/openai/v1/chat/completions",
|
||||||
|
data=data,headers={"Authorization":f"Bearer {KEY}","Content-Type":"application/json","User-Agent":"Mozilla/5.0"})
|
||||||
|
try:
|
||||||
|
with urllib.request.urlopen(req,timeout=180) as r: d=json.load(r)
|
||||||
|
out=json.loads(d["choices"][0]["message"]["content"])["rez"]
|
||||||
|
m={x["i"]:x["cod"] for x in out}
|
||||||
|
return [m.get(i+1,"?") for i in range(len(batch))]
|
||||||
|
except urllib.error.HTTPError as e:
|
||||||
|
if e.code in (429,500,502,503):
|
||||||
|
wait=float(e.headers.get("retry-after",0)) or min(2**attempt,30); time.sleep(wait); continue
|
||||||
|
raise
|
||||||
|
except Exception:
|
||||||
|
time.sleep(min(2**attempt,20)); continue
|
||||||
|
return ["?"]*len(batch)
|
||||||
|
|
||||||
|
# corpus + esantion random
|
||||||
|
ops=set()
|
||||||
|
for f in sorted(glob.glob("/workspace/autopass/docs/operatii-service/*.csv")):
|
||||||
|
for r in list(csv.reader(open(f,encoding="utf-8",errors="replace"),delimiter=";"))[1:]:
|
||||||
|
if len(r)>1 and r[1].strip(): ops.add(r[1].strip())
|
||||||
|
sample=random.sample(sorted(ops),N)
|
||||||
|
print(f"esantion random {N} din {len(ops)} distincte",flush=True)
|
||||||
|
|
||||||
|
votes={m:[] for m in MODELS}
|
||||||
|
t0=time.time()
|
||||||
|
for m in MODELS:
|
||||||
|
res=[]
|
||||||
|
nb=(N+BATCH-1)//BATCH
|
||||||
|
for bi,k in enumerate(range(0,N,BATCH)):
|
||||||
|
res+=call(m,sample[k:k+BATCH])
|
||||||
|
print(f" {m} batch {bi+1}/{nb} ({time.time()-t0:.0f}s)",flush=True)
|
||||||
|
time.sleep(6) # pacing sub TPM 12000
|
||||||
|
votes[m]=res
|
||||||
|
print(f" {m}: GATA ({time.time()-t0:.0f}s)",flush=True)
|
||||||
|
|
||||||
|
rows=[]
|
||||||
|
for i,op in enumerate(sample):
|
||||||
|
vs=[votes[m][i] for m in MODELS]
|
||||||
|
c=Counter(vs); top,cnt=c.most_common(1)[0]
|
||||||
|
level=3 if cnt==3 else (2 if cnt==2 else 1)
|
||||||
|
rows.append({"op":op,"votes":vs,"cod":top,"agree":level})
|
||||||
|
|
||||||
|
json.dump(rows,open(OUT,"w"),ensure_ascii=False,indent=1)
|
||||||
|
a3=[r for r in rows if r["agree"]==3]; a2=[r for r in rows if r["agree"]==2]; a1=[r for r in rows if r["agree"]==1]
|
||||||
|
print(f"\n=== F7 ENSEMBLE ({N} ops, {time.time()-t0:.0f}s) ===")
|
||||||
|
print(f"ACORD 3/3 (candidat auto-send): {len(a3)} ({100*len(a3)//N}%)")
|
||||||
|
print(f"ACORD 2/3: {len(a2)} ({100*len(a2)//N}%)")
|
||||||
|
print(f"DEZACORD total (1+1+1): {len(a1)} ({100*len(a1)//N}%)")
|
||||||
|
n3=sum(1 for r in a3 if r['cod']=='NUL')
|
||||||
|
print(f" din 3/3: {n3} sunt NUL (gunoi), {len(a3)-n3} coduri reale")
|
||||||
|
print(f"\nrezultat complet salvat: {OUT}")
|
||||||
|
print("\n--- ACORD 2/3 si DEZACORD (astea ar merge la needs_mapping) ---")
|
||||||
|
for r in a2+a1:
|
||||||
|
print(f" {r['op']:<42} {r['cod']:<6} voturi={r['votes']}")
|
||||||
61
tools/mapare-llm/label_common.py
Normal file
61
tools/mapare-llm/label_common.py
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
import json, urllib.request, urllib.error, time, os, csv, glob, re
|
||||||
|
from collections import Counter
|
||||||
|
|
||||||
|
KEY=os.environ["GROQ_KEY"]; MODEL="llama-3.3-70b-versatile"; BATCH=40
|
||||||
|
OUT="/tmp/claude-1000/-workspace-autopass/4177677c-7995-4fab-bbd5-16735cb335e3/scratchpad/labels.json"
|
||||||
|
|
||||||
|
CODURI=("OE-1=REPARATIE, OE-2=INTRETINERE, OE-3=REVIZIE PERIODICA, OE-4=REGLARE FUNCTIONALA, "
|
||||||
|
"OE-5=MODIFICARE CONSTRUCTIVA, OE-6=RECONSTRUCTIE, OE-7=ACTUALIZARE SOFTWARE, "
|
||||||
|
"OE-8=INLOCUIRE SEZONIERA ANVELOPE, OE-D=AVARIE GRAVA DIRECTIE, OE-F=AVARIE GRAVA FRANARE, "
|
||||||
|
"OE-C=AVARIE GRAVA CAROSERIE, OE-S=AVARIE GRAVA SASIU, OE-R=AVARIE GRAVA RETINERE/AIRBAG, "
|
||||||
|
"OE-A=AVARIE GRAVA ADAS, OE-I=ISTORIC ODOMETRU, AITLV=ATELIER TAHOGRAFE, "
|
||||||
|
"R-ODO=REPARATIE ODOMETRU, I-ODO=INLOCUIRE ODOMETRU, NUL=NU e operatie de service")
|
||||||
|
SYS=("Esti expert RAR AUTOPASS. Clasifici fiecare operatie de service-auto in EXACT unul din coduri:\n"+CODURI+
|
||||||
|
"\nReguli: AVARIILE GRAVE DOAR pentru daune in urma unui accident, NU reparatii curente. "
|
||||||
|
"Vopsire/revopsire/retus = REPARATIE (OE-1). Inlocuire/D-R/reparare piese = REPARATIE (OE-1). "
|
||||||
|
"Schimb ulei motor + filtre = REVIZIE (OE-3). Aerisit/gresat/completat nivele = INTRETINERE (OE-2). "
|
||||||
|
"Text care nu e operatie efectiva (ITP, plata, discount, manopera generica, nr inmatriculare, doar nume piesa) -> NUL. "
|
||||||
|
"Raspunde DOAR JSON {\"rez\":[{\"i\":<numar>,\"cod\":\"...\"}]}.")
|
||||||
|
PLATE=re.compile(r'\b[A-Z]{1,2}\s?\d{2,3}\s?[A-Z]{3}\b'); VIN=re.compile(r'\b[A-HJ-NPR-Z0-9]{17}\b')
|
||||||
|
def scrub(s): return VIN.sub('[VIN]',PLATE.sub('[NR]',s))
|
||||||
|
|
||||||
|
def classify(batch):
|
||||||
|
msgs=[{"role":"system","content":SYS},{"role":"user","content":"\n".join(f"{i+1}. {scrub(o)}" for i,o in enumerate(batch))}]
|
||||||
|
body={"model":MODEL,"messages":msgs,"temperature":0,"response_format":{"type":"json_object"}}
|
||||||
|
data=json.dumps(body).encode()
|
||||||
|
for attempt in range(8):
|
||||||
|
req=urllib.request.Request("https://api.groq.com/openai/v1/chat/completions",data=data,
|
||||||
|
headers={"Authorization":f"Bearer {KEY}","Content-Type":"application/json","User-Agent":"Mozilla/5.0"})
|
||||||
|
try:
|
||||||
|
with urllib.request.urlopen(req,timeout=180) as r: d=json.load(r)
|
||||||
|
m={x["i"]:x["cod"] for x in json.loads(d["choices"][0]["message"]["content"])["rez"]}
|
||||||
|
return [m.get(i+1,"?") for i in range(len(batch))]
|
||||||
|
except urllib.error.HTTPError as e:
|
||||||
|
if e.code in (429,500,502,503):
|
||||||
|
time.sleep(float(e.headers.get("retry-after",0)) or min(2**attempt,30)); continue
|
||||||
|
raise
|
||||||
|
except Exception:
|
||||||
|
time.sleep(min(2**attempt,20)); continue
|
||||||
|
return ["?"]*len(batch)
|
||||||
|
|
||||||
|
# presence in CSV-uri
|
||||||
|
files=sorted(glob.glob("/workspace/autopass/docs/operatii-service/*.csv"))
|
||||||
|
presence=Counter()
|
||||||
|
for f in files:
|
||||||
|
seen=set()
|
||||||
|
for r in list(csv.reader(open(f,encoding="utf-8",errors="replace"),delimiter=";"))[1:]:
|
||||||
|
if len(r)>1 and r[1].strip(): seen.add(r[1].strip())
|
||||||
|
for op in seen: presence[op]+=1
|
||||||
|
|
||||||
|
labels=json.load(open(OUT))
|
||||||
|
todo=sorted([op for op,c in presence.items() if c>=2 and op not in labels])
|
||||||
|
print(f"comune (>=2 service) de etichetat: {len(todo)} (peste {len(labels)} deja)",flush=True)
|
||||||
|
|
||||||
|
t0=time.time(); nb=(len(todo)+BATCH-1)//BATCH
|
||||||
|
for bi,k in enumerate(range(0,len(todo),BATCH)):
|
||||||
|
b=todo[k:k+BATCH]
|
||||||
|
for o,c in zip(b,classify(b)): labels[o]=c
|
||||||
|
json.dump(labels,open(OUT,"w"),ensure_ascii=False)
|
||||||
|
print(f" batch {bi+1}/{nb} -> total {len(labels)} ({time.time()-t0:.0f}s)",flush=True)
|
||||||
|
time.sleep(4)
|
||||||
|
print(f"GATA comune: {len(labels)} etichete totale ({time.time()-t0:.0f}s)",flush=True)
|
||||||
1
tools/mapare-llm/labels-groq-partial.json
Normal file
1
tools/mapare-llm/labels-groq-partial.json
Normal file
File diff suppressed because one or more lines are too long
1570
tools/mapare-llm/modeltest-result.json
Normal file
1570
tools/mapare-llm/modeltest-result.json
Normal file
File diff suppressed because it is too large
Load Diff
112
tools/mapare-llm/or_common.py
Normal file
112
tools/mapare-llm/or_common.py
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
"""Comun pentru etichetarea operatii->coduri RAR prin OpenRouter (modele FREE).
|
||||||
|
|
||||||
|
Difera de tooling-ul Groq (label_common.py / f7_ensemble.py) prin:
|
||||||
|
- endpoint OpenRouter (OpenAI-compatibil), cheie din .env (nu env exportat);
|
||||||
|
- corpus ordonat pe FRECVENTA (suma NR per denumire distincta), nu alfabetic.
|
||||||
|
|
||||||
|
Refoloseste IDENTIC: cele 18 coduri RAR, promptul de sistem si scrub-ul PII (F3).
|
||||||
|
"""
|
||||||
|
import json, urllib.request, urllib.error, time, os, csv, glob, re
|
||||||
|
from collections import Counter
|
||||||
|
|
||||||
|
# --- cheie din .env (gitignored). Tool-urile Groq citeau os.environ; aici din fisier,
|
||||||
|
# fiindca shell-ul non-interactiv nu pastreaza export-urile intre apeluri. ---
|
||||||
|
def _load_key():
|
||||||
|
if os.environ.get("OPENROUTER_KEY"):
|
||||||
|
return os.environ["OPENROUTER_KEY"]
|
||||||
|
env = os.path.join(os.path.dirname(__file__), "..", "..", ".env")
|
||||||
|
for line in open(env, encoding="utf-8", errors="replace"):
|
||||||
|
line = line.strip()
|
||||||
|
if line.startswith("OPENROUTER_KEY="):
|
||||||
|
return line.split("=", 1)[1].strip()
|
||||||
|
raise RuntimeError("OPENROUTER_KEY lipseste din .env si din mediu")
|
||||||
|
|
||||||
|
KEY = _load_key()
|
||||||
|
URL = "https://openrouter.ai/api/v1/chat/completions"
|
||||||
|
|
||||||
|
# --- nomenclator + prompt: identic cu label_common.py / f7_ensemble.py (sursa de adevar) ---
|
||||||
|
CODURI = ("OE-1=REPARATIE, OE-2=INTRETINERE, OE-3=REVIZIE PERIODICA, OE-4=REGLARE FUNCTIONALA, "
|
||||||
|
"OE-5=MODIFICARE CONSTRUCTIVA, OE-6=RECONSTRUCTIE, OE-7=ACTUALIZARE SOFTWARE, "
|
||||||
|
"OE-8=INLOCUIRE SEZONIERA ANVELOPE, OE-D=AVARIE GRAVA DIRECTIE, OE-F=AVARIE GRAVA FRANARE, "
|
||||||
|
"OE-C=AVARIE GRAVA CAROSERIE, OE-S=AVARIE GRAVA SASIU, OE-R=AVARIE GRAVA RETINERE/AIRBAG, "
|
||||||
|
"OE-A=AVARIE GRAVA ADAS, OE-I=ISTORIC ODOMETRU, AITLV=ATELIER TAHOGRAFE, "
|
||||||
|
"R-ODO=REPARATIE ODOMETRU, I-ODO=INLOCUIRE ODOMETRU, NUL=NU e operatie de service")
|
||||||
|
SYS = ("Esti expert RAR AUTOPASS. Clasifici fiecare operatie de service-auto in EXACT unul din coduri:\n" + CODURI +
|
||||||
|
"\nReguli: AVARIILE GRAVE (OE-D/F/C/S/R/A) DOAR pentru daune in urma unui accident, NU reparatii curente. "
|
||||||
|
"Vopsire/revopsire/retus = REPARATIE (OE-1). Inlocuire/D-R/reparare piese = REPARATIE (OE-1). "
|
||||||
|
"Schimb ulei motor + filtre = REVIZIE (OE-3). Aerisit/gresat/completat nivele = INTRETINERE (OE-2). "
|
||||||
|
"Text care nu e operatie efectiva (ITP, plata, discount, manopera generica, nr inmatriculare, doar nume piesa) -> NUL. "
|
||||||
|
"Raspunde DOAR JSON {\"rez\":[{\"i\":<numar>,\"cod\":\"...\"}]}.")
|
||||||
|
|
||||||
|
# --- F3: scrub PII inainte de a trimite la LLM ---
|
||||||
|
PLATE = re.compile(r'\b[A-Z]{1,2}\s?\d{2,3}\s?[A-Z]{3}\b')
|
||||||
|
VIN = re.compile(r'\b[A-HJ-NPR-Z0-9]{17}\b')
|
||||||
|
def scrub(s): return VIN.sub('[VIN]', PLATE.sub('[NR]', s))
|
||||||
|
|
||||||
|
VALID = {c.split("=")[0] for c in CODURI.replace(", ", ",").split(",")}
|
||||||
|
|
||||||
|
|
||||||
|
def call(model, batch, timeout=180, max_attempts=6):
|
||||||
|
"""Un apel OpenRouter pe un batch. Intoarce (coduri, meta) unde meta are latenta si erori.
|
||||||
|
|
||||||
|
coduri: lista paralela cu batch; "?" pe pozitiile fara raspuns / parse-fail.
|
||||||
|
"""
|
||||||
|
msgs = [{"role": "system", "content": SYS},
|
||||||
|
{"role": "user", "content": "\n".join(f"{i+1}. {scrub(o)}" for i, o in enumerate(batch))}]
|
||||||
|
body = {"model": model, "messages": msgs, "temperature": 0,
|
||||||
|
"response_format": {"type": "json_object"}}
|
||||||
|
data = json.dumps(body).encode()
|
||||||
|
t0 = time.time()
|
||||||
|
for attempt in range(max_attempts):
|
||||||
|
req = urllib.request.Request(URL, data=data, headers={
|
||||||
|
"Authorization": f"Bearer {KEY}", "Content-Type": "application/json",
|
||||||
|
"User-Agent": "Mozilla/5.0", # WAF: Python-urllib -> 403
|
||||||
|
"HTTP-Referer": "https://gitea.romfast.ro/romfast/autopass",
|
||||||
|
"X-Title": "autopass-mapare-llm"})
|
||||||
|
try:
|
||||||
|
with urllib.request.urlopen(req, timeout=timeout) as r:
|
||||||
|
d = json.load(r)
|
||||||
|
content = d["choices"][0]["message"]["content"]
|
||||||
|
out = json.loads(content)["rez"]
|
||||||
|
m = {x["i"]: x["cod"] for x in out}
|
||||||
|
codes = [m.get(i + 1, "?") for i in range(len(batch))]
|
||||||
|
return codes, {"ms": int((time.time() - t0) * 1000), "err": None}
|
||||||
|
except urllib.error.HTTPError as e:
|
||||||
|
if e.code in (429, 500, 502, 503):
|
||||||
|
wait = float(e.headers.get("retry-after", 0)) or min(2 ** attempt, 30)
|
||||||
|
time.sleep(wait); continue
|
||||||
|
return ["?"] * len(batch), {"ms": int((time.time() - t0) * 1000), "err": f"HTTP {e.code}"}
|
||||||
|
except Exception as e:
|
||||||
|
if attempt < max_attempts - 1:
|
||||||
|
time.sleep(min(2 ** attempt, 20)); continue
|
||||||
|
return ["?"] * len(batch), {"ms": int((time.time() - t0) * 1000), "err": type(e).__name__}
|
||||||
|
return ["?"] * len(batch), {"ms": int((time.time() - t0) * 1000), "err": "max_attempts"}
|
||||||
|
|
||||||
|
|
||||||
|
def corpus_by_freq():
|
||||||
|
"""Toate denumirile distincte, cu frecventa = suma NR pe toate CSV-urile, desc.
|
||||||
|
|
||||||
|
Intoarce lista de (denop, nr_total). NR = de cate ori apare denumirea in prezentari.
|
||||||
|
"""
|
||||||
|
freq = Counter()
|
||||||
|
for f in sorted(glob.glob(os.path.join(os.path.dirname(__file__), "..", "..",
|
||||||
|
"docs", "operatii-service", "*.csv"))):
|
||||||
|
for r in list(csv.reader(open(f, encoding="utf-8", errors="replace"), delimiter=";"))[1:]:
|
||||||
|
if len(r) > 2 and r[1].strip():
|
||||||
|
try:
|
||||||
|
freq[r[1].strip()] += int(r[2].strip() or 0)
|
||||||
|
except ValueError:
|
||||||
|
freq[r[1].strip()] += 0
|
||||||
|
return freq.most_common()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
c = corpus_by_freq()
|
||||||
|
tot = sum(n for _, n in c)
|
||||||
|
print(f"distincte: {len(c)} volum total (suma NR): {tot}")
|
||||||
|
for cut in (100, 500, 1000):
|
||||||
|
cov = sum(n for _, n in c[:cut])
|
||||||
|
print(f" top {cut}: {100*cov/tot:.1f}% din volum")
|
||||||
|
print("--- top 15 dupa frecventa ---")
|
||||||
|
for op, n in c[:15]:
|
||||||
|
print(f" {n:>6} {op}")
|
||||||
137
tools/mapare-llm/or_modeltest.py
Normal file
137
tools/mapare-llm/or_modeltest.py
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
"""Compara modele FREE OpenRouter la clasificarea operatii->coduri RAR (RO).
|
||||||
|
|
||||||
|
Ruleaza fiecare model candidat pe top-N denumiri DUPA FRECVENTA (cele care conteaza
|
||||||
|
la volum), si raporteaza per model:
|
||||||
|
- latenta (ms/batch), rata de eroare/parse-fail (cate "?"),
|
||||||
|
- cate NUL detecteaza (gunoi), distributia codurilor,
|
||||||
|
- acord cu etichetele Groq existente (labels-groq-partial.json) ca referinta silver,
|
||||||
|
- acord pereche intre modele + vot majoritar (candidat treapta auto-send).
|
||||||
|
|
||||||
|
Salveaza voturile brute in modeltest-result.json pentru adjudicare de catre om.
|
||||||
|
|
||||||
|
Rulare: python3 tools/mapare-llm/or_modeltest.py [N] [model1 model2 ...]
|
||||||
|
N = cate denumiri (top dupa frecventa). Default 120.
|
||||||
|
modelN = override lista de modele. Default = set curat din modele free live.
|
||||||
|
"""
|
||||||
|
import sys, os, json, time
|
||||||
|
from collections import Counter
|
||||||
|
sys.path.insert(0, os.path.dirname(__file__))
|
||||||
|
import or_common as oc
|
||||||
|
|
||||||
|
HERE = os.path.dirname(__file__)
|
||||||
|
GROQ_LABELS = os.path.join(HERE, "labels-groq-partial.json")
|
||||||
|
OUT = os.path.join(HERE, "modeltest-result.json")
|
||||||
|
BATCH = 40 # batch mare = mai putine cereri (cap free tier ~50/zi fara credit)
|
||||||
|
PACE = 4.0 # sec intre batch-uri (free tier OpenRouter ~20 req/min)
|
||||||
|
|
||||||
|
# Set FIABIL pe free tier (probat live 2026-06-28): doar familia NVIDIA Nemotron
|
||||||
|
# routeaza fara 429/404. llama/qwen/gemma/gpt-oss/hermes = rate-limited sau provider
|
||||||
|
# blocat. CAVEAT F7: aceeasi familie -> acordul supraestimeaza increderea; scale
|
||||||
|
# diferite (9B/120B/550B) dau totusi divergenta pe cazuri grele.
|
||||||
|
DEFAULT_MODELS = [
|
||||||
|
"nvidia/nemotron-3-super-120b-a12b:free", # 120B, rapid (~3s)
|
||||||
|
"nvidia/nemotron-nano-9b-v2:free", # 9B, scala mica
|
||||||
|
"nvidia/nemotron-3-ultra-550b-a55b:free", # 550B, lent (~36s) dar capabil
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def run_model(model, sample):
|
||||||
|
codes, total_ms, errs = [], 0, []
|
||||||
|
nb = (len(sample) + BATCH - 1) // BATCH
|
||||||
|
for bi, k in enumerate(range(0, len(sample), BATCH)):
|
||||||
|
batch = sample[k:k + BATCH]
|
||||||
|
c, meta = oc.call(model, batch)
|
||||||
|
codes += c
|
||||||
|
total_ms += meta["ms"]
|
||||||
|
if meta["err"]:
|
||||||
|
errs.append(meta["err"])
|
||||||
|
print(f" {model:<45} batch {bi+1}/{nb} {meta['ms']}ms err={meta['err']}", flush=True)
|
||||||
|
time.sleep(PACE)
|
||||||
|
return codes, total_ms, errs
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
args = sys.argv[1:]
|
||||||
|
n = 120
|
||||||
|
models = DEFAULT_MODELS
|
||||||
|
if args and args[0].isdigit():
|
||||||
|
n = int(args[0]); args = args[1:]
|
||||||
|
if args:
|
||||||
|
models = args
|
||||||
|
|
||||||
|
corpus = oc.corpus_by_freq()
|
||||||
|
sample = [op for op, _ in corpus[:n]]
|
||||||
|
freq = {op: nr for op, nr in corpus[:n]}
|
||||||
|
vol_total = sum(freq.values())
|
||||||
|
print(f"esantion: top {n} dupa frecventa = {vol_total} volum "
|
||||||
|
f"({100*vol_total/sum(nr for _,nr in corpus):.1f}% din total)\n", flush=True)
|
||||||
|
|
||||||
|
groq = {}
|
||||||
|
if os.path.exists(GROQ_LABELS):
|
||||||
|
groq = json.load(open(GROQ_LABELS, encoding="utf-8"))
|
||||||
|
|
||||||
|
results = {}
|
||||||
|
t0 = time.time()
|
||||||
|
for m in models:
|
||||||
|
print(f"=== {m} ===", flush=True)
|
||||||
|
codes, total_ms, errs = run_model(m, sample)
|
||||||
|
results[m] = {"codes": codes, "total_ms": total_ms, "errs": errs}
|
||||||
|
print(f" -> {total_ms/1000:.0f}s total\n", flush=True)
|
||||||
|
|
||||||
|
# vot majoritar + nivel de acord, ponderat pe frecventa
|
||||||
|
rows = []
|
||||||
|
for i, op in enumerate(sample):
|
||||||
|
votes = {m: results[m]["codes"][i] for m in models}
|
||||||
|
valid = [v for v in votes.values() if v not in ("?",)]
|
||||||
|
c = Counter(valid)
|
||||||
|
top, cnt = (c.most_common(1)[0] if c else ("?", 0))
|
||||||
|
rows.append({"op": op, "nr": freq[op], "votes": votes,
|
||||||
|
"maj": top, "agree": cnt, "n_models": len(models),
|
||||||
|
"groq": groq.get(op)})
|
||||||
|
|
||||||
|
json.dump({"models": models, "n": n, "rows": rows}, open(OUT, "w"),
|
||||||
|
ensure_ascii=False, indent=1)
|
||||||
|
|
||||||
|
# --- raport per model ---
|
||||||
|
print("=" * 78)
|
||||||
|
print(f"RAPORT ({n} ops, {time.time()-t0:.0f}s, ponderare pe frecventa NR)")
|
||||||
|
print("=" * 78)
|
||||||
|
print(f"{'model':<46} {'ms/op':>6} {'?fail':>6} {'NUL':>5} {'~Groq':>7}")
|
||||||
|
for m in models:
|
||||||
|
codes = results[m]["codes"]
|
||||||
|
fails = sum(1 for x in codes if x == "?")
|
||||||
|
nul = sum(1 for x in codes if x == "NUL")
|
||||||
|
# acord vs Groq pe overlap (ponderat pe frecventa)
|
||||||
|
ov_w = ov_match = 0
|
||||||
|
for i, op in enumerate(sample):
|
||||||
|
g = groq.get(op)
|
||||||
|
if g and codes[i] != "?":
|
||||||
|
ov_w += freq[op]
|
||||||
|
if codes[i] == g:
|
||||||
|
ov_match += freq[op]
|
||||||
|
agr = f"{100*ov_match/ov_w:.0f}%" if ov_w else "n/a"
|
||||||
|
msop = results[m]["total_ms"] / max(1, len(codes))
|
||||||
|
print(f"{m:<46} {msop:>6.0f} {fails:>6} {nul:>5} {agr:>7}")
|
||||||
|
|
||||||
|
# --- acord ensemble ponderat pe frecventa ---
|
||||||
|
print("\n--- ACORD ENSEMBLE (ponderat pe volum) ---")
|
||||||
|
nm = len(models)
|
||||||
|
for lvl in range(nm, 0, -1):
|
||||||
|
w = sum(r["nr"] for r in rows if r["agree"] == lvl)
|
||||||
|
cnt = sum(1 for r in rows if r["agree"] == lvl)
|
||||||
|
tag = " <- candidat auto-send" if lvl == nm else ""
|
||||||
|
print(f" acord {lvl}/{nm}: {cnt:>4} ops, {100*w/vol_total:.0f}% volum{tag}")
|
||||||
|
unan = [r for r in rows if r["agree"] == nm]
|
||||||
|
nul_un = sum(1 for r in unan if r["maj"] == "NUL")
|
||||||
|
print(f" din unanim {nm}/{nm}: {nul_un} NUL (gunoi), {len(unan)-nul_un} coduri reale")
|
||||||
|
|
||||||
|
print(f"\nbrut salvat: {OUT}")
|
||||||
|
print("--- esantion dezacord (volum mare, de adjudecat de om) ---")
|
||||||
|
disp = sorted([r for r in rows if r["agree"] < nm], key=lambda r: -r["nr"])[:20]
|
||||||
|
for r in disp:
|
||||||
|
vs = "/".join(sorted(set(r["votes"].values())))
|
||||||
|
print(f" {r['nr']:>5} {r['op']:<40} maj={r['maj']:<6} ({vs})")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user