cry-vetzdravila 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +17 -0
- package/CLAUDE.md +82 -0
- package/LICENSE.md +16 -0
- package/README.md +376 -0
- package/a.txt +1643 -0
- package/bun.lock +197 -0
- package/dist/atcvet/opisATCvetKode.d.ts +23 -0
- package/dist/atcvet/podatkiATCvetKode.d.ts +20 -0
- package/dist/atcvet/pomeniNivojevATCvet.d.ts +1 -0
- package/dist/atcvet/types/AtcvetFile.d.ts +19 -0
- package/dist/generated/AtcVet.d.ts +9 -0
- package/dist/generated/RegisterZdravil.d.ts +8 -0
- package/dist/generated/seznamZdravil.d.ts +8 -0
- package/dist/index.d.ts +244 -0
- package/dist/index.js +141786 -0
- package/dist/register/MIN_OCENA_PODOBNOSTI.d.ts +2 -0
- package/dist/register/helper/normalizirajNaziv.d.ts +176 -0
- package/dist/register/helper/oblikujRezultatIskanja.d.ts +8 -0
- package/dist/register/helper/oceniPodobnost.d.ts +37 -0
- package/dist/register/helper/poisciZivalskoVrsto.d.ts +33 -0
- package/dist/register/helper/razcleniNaziv.d.ts +2 -0
- package/dist/register/podobnaZdravilaPoATC.d.ts +16 -0
- package/dist/register/podobnaZdravilaPoUcinkovinah.d.ts +18 -0
- package/dist/register/registerZdravil.d.ts +9 -0
- package/dist/register/types/KarencaZdravila.d.ts +24 -0
- package/dist/register/types/PotUporabeZdravila.d.ts +21 -0
- package/dist/register/types/RazclembaZdravila.d.ts +9 -0
- package/dist/register/types/RegisterZdravil.d.ts +2 -0
- package/dist/register/types/UcinkovinaZdravila.d.ts +20 -0
- package/dist/register/types/Zdravilo.d.ts +65 -0
- package/dist/register/types/ZdraviloZUtemeljitvijo.d.ts +9 -0
- package/dist/register/types/ZivalskeVrste.d.ts +158 -0
- package/dist/register/uganiZdravilo.d.ts +43 -0
- package/dist/register/zdravilaZaAtcVetKodo.d.ts +8 -0
- package/dist/register/zdraviloJeVakcinaZa.d.ts +18 -0
- package/docs/vakcine.md +195 -0
- package/package.json +39 -0
- package/src/atcvet/CLAUDE.md +18 -0
- package/src/atcvet/downloadLatestAtcvetPdf.ts +107 -0
- package/src/atcvet/opisATCvetKode.ts +116 -0
- package/src/atcvet/parseAtcvetPdf.ts +215 -0
- package/src/atcvet/podatkiATCvetKode.ts +34 -0
- package/src/atcvet/pomeniNivojevATCvet.ts +8 -0
- package/src/atcvet/types/AtcvetFile.ts +22 -0
- package/src/generate.ts +111 -0
- package/src/generated/AtcVet.ts +56704 -0
- package/src/generated/seznamZdravil.ts +44833 -0
- package/src/importParseAndBuildAll.ts +97 -0
- package/src/index.ts +289 -0
- package/src/interactive.ts +428 -0
- package/src/register/CLAUDE.md +230 -0
- package/src/register/MIN_OCENA_PODOBNOSTI.ts +3 -0
- package/src/register/downloadRegister.ts +148 -0
- package/src/register/helper/analizaVakcin.ts +90 -0
- package/src/register/helper/checkVrste.ts +72 -0
- package/src/register/helper/hashString.ts +27 -0
- package/src/register/helper/normalizirajNaziv.ts +493 -0
- package/src/register/helper/oblikujRezultatIskanja.ts +15 -0
- package/src/register/helper/oceniPodobnost.ts +194 -0
- package/src/register/helper/poisciZivalskoVrsto.ts +100 -0
- package/src/register/helper/razcleniNaziv.ts +105 -0
- package/src/register/helper/testNormalizacije.ts +89 -0
- package/src/register/helper/testPodobnosti.ts +238 -0
- package/src/register/helper/testVakcin.ts +103 -0
- package/src/register/parseRegister.ts +464 -0
- package/src/register/podobnaZdravilaPoATC.ts +71 -0
- package/src/register/podobnaZdravilaPoUcinkovinah.ts +136 -0
- package/src/register/registerZdravil.ts +22 -0
- package/src/register/stats.ts +114 -0
- package/src/register/types/KarencaZdravila.ts +26 -0
- package/src/register/types/PotUporabeZdravila.ts +21 -0
- package/src/register/types/RazclembaZdravila.ts +10 -0
- package/src/register/types/RegisterRaw.ts +23 -0
- package/src/register/types/RegisterZdravil.ts +3 -0
- package/src/register/types/UcinkovinaZdravila.ts +21 -0
- package/src/register/types/Zdravilo.ts +84 -0
- package/src/register/types/ZdraviloZUtemeljitvijo.ts +11 -0
- package/src/register/types/ZivalskeVrste.ts +7 -0
- package/src/register/uganiZdravilo.ts +142 -0
- package/src/register/zdravilaZaAtcVetKodo.ts +28 -0
- package/src/register/zdraviloJeVakcinaZa.ts +202 -0
- package/src/test/testPodobnosti.test.ts +126 -0
- package/src/test/zdravila.json +38693 -0
- package/tsconfig.json +18 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identifikacija vakcin in njihovih ciljnih bolezni
|
|
3
|
+
*
|
|
4
|
+
* Na podlagi dokumentacije v docs/vakcine.md
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { Zdravilo } from "./types/Zdravilo";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Preveri, ali je zdravilo vakcina (ATC koda se začne z QI)
|
|
11
|
+
*/
|
|
12
|
+
export function jeVakcina(zdravilo: Zdravilo): boolean {
|
|
13
|
+
return zdravilo.atcKoda?.startsWith("QI") ?? false;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Preveri, ali je zdravilo vakcina proti steklini (rabies)
|
|
18
|
+
*/
|
|
19
|
+
function jeProtiSteklini(zdravilo: Zdravilo): boolean {
|
|
20
|
+
const imeLower = zdravilo.ime.toLowerCase();
|
|
21
|
+
const ucinkovineLower =
|
|
22
|
+
zdravilo.ucinkovine?.map((u) => u.ucinkovina.toLowerCase()).join(" ") || "";
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
imeLower.includes("rabies") ||
|
|
26
|
+
imeLower.includes("stekli") ||
|
|
27
|
+
ucinkovineLower.includes("rabies") ||
|
|
28
|
+
ucinkovineLower.includes("stekli") ||
|
|
29
|
+
zdravilo.atcKoda === "QI07AA02" ||
|
|
30
|
+
zdravilo.atcKoda?.startsWith("QI07BD") === true
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Preveri, ali je zdravilo vakcina proti leptospirozi
|
|
36
|
+
*/
|
|
37
|
+
function jeProtiLeptospirozi(zdravilo: Zdravilo): boolean {
|
|
38
|
+
const imeLower = zdravilo.ime.toLowerCase();
|
|
39
|
+
const ucinkovineLower =
|
|
40
|
+
zdravilo.ucinkovine?.map((u) => u.ucinkovina.toLowerCase()).join(" ") || "";
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
imeLower.includes("lept") ||
|
|
44
|
+
imeLower.includes("/l4") ||
|
|
45
|
+
imeLower.includes("-l") ||
|
|
46
|
+
ucinkovineLower.includes("leptospir")
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Preveri, ali je zdravilo vakcina proti kužnim boleznim psov
|
|
52
|
+
* (pasja kuga, parvoviroza, pasji hepatitis, parainfluenca)
|
|
53
|
+
*/
|
|
54
|
+
function jeProtiKuznimBoleznim(zdravilo: Zdravilo): boolean {
|
|
55
|
+
const imeLower = zdravilo.ime.toLowerCase();
|
|
56
|
+
const ucinkovineLower =
|
|
57
|
+
zdravilo.ucinkovine?.map((u) => u.ucinkovina.toLowerCase()).join(" ") || "";
|
|
58
|
+
|
|
59
|
+
return (
|
|
60
|
+
imeLower.includes("dhpp") ||
|
|
61
|
+
imeLower.includes("dapp") ||
|
|
62
|
+
/\bdap\b/.test(imeLower) ||
|
|
63
|
+
ucinkovineLower.includes("pasje kuge") ||
|
|
64
|
+
ucinkovineLower.includes("parvo") ||
|
|
65
|
+
ucinkovineLower.includes("adenovirus") ||
|
|
66
|
+
ucinkovineLower.includes("distemper")
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Vzorci za prepoznavanje bolezni iz učinkovin ali imena zdravila
|
|
72
|
+
*/
|
|
73
|
+
const BOLEZNI_VZORCI: { bolezen: string; vzorci: RegExp[] }[] = [
|
|
74
|
+
// Salmonela
|
|
75
|
+
{ bolezen: "salmoneloza", vzorci: [/salmonell?a/i, /salenvac/i] },
|
|
76
|
+
// Atipična kokošja kuga (Newcastle disease)
|
|
77
|
+
{ bolezen: "atipična kokošja kuga", vzorci: [/kokošje kuge/i, /newcastle/i, /\bnd\b/i] },
|
|
78
|
+
// Gumboro (IBD)
|
|
79
|
+
{ bolezen: "gumboro", vzorci: [/gumboro/i, /\bibd\b/i, /bursa/i] },
|
|
80
|
+
// Infekciozni bronhitis (IB)
|
|
81
|
+
{ bolezen: "infekciozni bronhitis", vzorci: [/\bib\b/i, /bronhitis/i] },
|
|
82
|
+
// Marekova bolezen
|
|
83
|
+
{ bolezen: "marekova bolezen", vzorci: [/marek/i, /\bhvt\b/i, /rispens/i] },
|
|
84
|
+
// Kokcidia
|
|
85
|
+
{ bolezen: "kokcidioza", vzorci: [/coccid/i, /kokcid/i, /paracox/i, /livacox/i] },
|
|
86
|
+
// E. coli
|
|
87
|
+
{ bolezen: "escherichia coli", vzorci: [/e\.?\s*coli/i, /escherichia/i] },
|
|
88
|
+
// Clostridium
|
|
89
|
+
{ bolezen: "klostridijske okužbe", vzorci: [/clostrid/i, /covexin/i] },
|
|
90
|
+
// IBR (Infekciozni bovini rinotraheitis)
|
|
91
|
+
{ bolezen: "IBR", vzorci: [/\bibr\b/i, /rinotraheit/i] },
|
|
92
|
+
// BVD (Bovine Viral Diarrhea)
|
|
93
|
+
{ bolezen: "BVD", vzorci: [/\bbvd\b/i, /bovine viral diarr/i] },
|
|
94
|
+
// BRSV (Bovini respiratorni sincicijski virus)
|
|
95
|
+
{ bolezen: "BRSV", vzorci: [/\bbrsv\b/i, /sincicijski/i] },
|
|
96
|
+
// Parainfluenca goveda
|
|
97
|
+
{ bolezen: "parainfluenca Pi3", vzorci: [/\bpi3\b/i, /parainfluenc/i] },
|
|
98
|
+
// PRRS (Prašičji reproduktivni in respiratorni sindrom)
|
|
99
|
+
{ bolezen: "PRRS", vzorci: [/\bprrs\b/i] },
|
|
100
|
+
// Mikoplazma
|
|
101
|
+
{ bolezen: "mikoplazmoza", vzorci: [/myco/i, /m\+pac/i, /mh-one/i, /hyogen/i] },
|
|
102
|
+
// Lawsonia
|
|
103
|
+
{ bolezen: "lawsonija", vzorci: [/lawson/i, /ileitis/i] },
|
|
104
|
+
// Erizipel
|
|
105
|
+
{ bolezen: "erizipel", vzorci: [/ery/i, /erysipel/i] },
|
|
106
|
+
// Borelia
|
|
107
|
+
{ bolezen: "borelija", vzorci: [/borrel/i, /lyme/i] },
|
|
108
|
+
// Bordetela
|
|
109
|
+
{ bolezen: "pasji kašelj", vzorci: [/bordetell?a/i, /\bbb\b/i, /kennel cough/i] },
|
|
110
|
+
// Mačji herpes, kalici, panleukopenia
|
|
111
|
+
{ bolezen: "mačje virusne okužbe", vzorci: [/tricat/i, /\brcp\b/i, /cvr\b/i, /panleukopen/i, /calici/i, /herpes/i] },
|
|
112
|
+
// Rotavirus
|
|
113
|
+
{ bolezen: "rotaviroza", vzorci: [/rotav/i, /rotavec/i] },
|
|
114
|
+
// Koronavirus
|
|
115
|
+
{ bolezen: "koronaviroza", vzorci: [/corona/i] },
|
|
116
|
+
// Trichophyton (dermatofitoza)
|
|
117
|
+
{ bolezen: "dermatofitoza", vzorci: [/trichophyt/i] },
|
|
118
|
+
// Pljučnica aktinobaciloza
|
|
119
|
+
{ bolezen: "aktinobaciloza", vzorci: [/\bapp\b/i, /actinobacill/i, /coglapix/i] },
|
|
120
|
+
// Bluetongue
|
|
121
|
+
{ bolezen: "bolezen modrikastega jezika", vzorci: [/bluetongue/i, /\bbtv\b/i, /bluevac/i] },
|
|
122
|
+
// Kunčja hemoragična bolezen
|
|
123
|
+
{ bolezen: "kunčja hemoragična bolezen", vzorci: [/\brhdv\b/i, /hemoragičn/i] },
|
|
124
|
+
// Reoviroza
|
|
125
|
+
{ bolezen: "reoviroza", vzorci: [/reovir/i, /\breo\b/i] },
|
|
126
|
+
// EDS (Egg Drop Syndrome)
|
|
127
|
+
{ bolezen: "EDS", vzorci: [/\beds\b/i, /egg drop/i] },
|
|
128
|
+
// ART (Avian rhinotracheitis)
|
|
129
|
+
{ bolezen: "ptičji rinotraheitis", vzorci: [/\bart\b/i, /rhinotrache/i] },
|
|
130
|
+
// Metapneumovirus
|
|
131
|
+
{ bolezen: "metapneumoviroza", vzorci: [/metapneumo/i, /\bmmat\b/i] },
|
|
132
|
+
// Anemija piščancev
|
|
133
|
+
{ bolezen: "kokošja anemija", vzorci: [/anemij/i, /thymovac/i] },
|
|
134
|
+
// Encefalomielitis
|
|
135
|
+
{ bolezen: "encefalomielitis", vzorci: [/encefalomielit/i] },
|
|
136
|
+
];
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Poišči bolezni iz učinkovin in imena zdravila
|
|
140
|
+
*/
|
|
141
|
+
function poiscibolezni(zdravilo: Zdravilo): string[] {
|
|
142
|
+
const imeLower = zdravilo.ime.toLowerCase();
|
|
143
|
+
const ucinkovineLower =
|
|
144
|
+
zdravilo.ucinkovine?.map((u) => u.ucinkovina.toLowerCase()).join(" ") || "";
|
|
145
|
+
const iskalniBesedilo = imeLower + " " + ucinkovineLower;
|
|
146
|
+
|
|
147
|
+
const najdene: string[] = [];
|
|
148
|
+
|
|
149
|
+
for (const { bolezen, vzorci } of BOLEZNI_VZORCI) {
|
|
150
|
+
for (const vzorec of vzorci) {
|
|
151
|
+
if (vzorec.test(iskalniBesedilo)) {
|
|
152
|
+
if (!najdene.includes(bolezen)) {
|
|
153
|
+
najdene.push(bolezen);
|
|
154
|
+
}
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return najdene;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Vrne seznam bolezni, proti katerim ščiti zdravilo, če je vakcina.
|
|
165
|
+
* Če zdravilo ni vakcina, vrne undefined.
|
|
166
|
+
*
|
|
167
|
+
* @param zdravilo - Zdravilo iz registra
|
|
168
|
+
* @returns Seznam bolezni ali undefined, če zdravilo ni vakcina
|
|
169
|
+
*/
|
|
170
|
+
export function zdraviloJeVakcinaZa(zdravilo: Zdravilo): string[] | undefined {
|
|
171
|
+
// Če zdravilo ni vakcina, vrni undefined
|
|
172
|
+
if (!jeVakcina(zdravilo)) {
|
|
173
|
+
return undefined;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
const bolezni: string[] = [];
|
|
177
|
+
|
|
178
|
+
if (jeProtiSteklini(zdravilo)) {
|
|
179
|
+
bolezni.push("steklina");
|
|
180
|
+
}
|
|
181
|
+
if (jeProtiLeptospirozi(zdravilo)) {
|
|
182
|
+
bolezni.push("leptospiroza");
|
|
183
|
+
}
|
|
184
|
+
if (jeProtiKuznimBoleznim(zdravilo)) {
|
|
185
|
+
bolezni.push("kužne bolezni psov");
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Poišči dodatne bolezni iz učinkovin
|
|
189
|
+
const dodatneBolezni = poiscibolezni(zdravilo);
|
|
190
|
+
for (const bolezen of dodatneBolezni) {
|
|
191
|
+
if (!bolezni.includes(bolezen)) {
|
|
192
|
+
bolezni.push(bolezen);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Če ni nobene bolezni, vrni "neznana bolezen"
|
|
197
|
+
if (bolezni.length === 0) {
|
|
198
|
+
bolezni.push("neznana bolezen");
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return bolezni;
|
|
202
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test podobnosti - preverja, ali oceniPodobnost pravilno prepozna zdravila
|
|
3
|
+
*
|
|
4
|
+
* Za vsako zdravilo iz registra preveri, ali se pri iskanju samega sebe
|
|
5
|
+
* zdravilo pojavi na prvem mestu (ali med enako ocenjenimi z enakim normaliziranim nazivom).
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { describe, test, expect } from "bun:test";
|
|
9
|
+
import { seznamZdravil } from "../generated/seznamZdravil";
|
|
10
|
+
import { razcleniNaziv } from "../register/helper/razcleniNaziv";
|
|
11
|
+
import { oceniPodobnost } from "../register/helper/oceniPodobnost";
|
|
12
|
+
import type { RazclenjeniNaziv } from "../register/helper/normalizirajNaziv";
|
|
13
|
+
|
|
14
|
+
interface RazclembaZdravila {
|
|
15
|
+
ime: string;
|
|
16
|
+
razclemba: RazclenjeniNaziv;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Predpripravi razčlembe vseh zdravil iz registra
|
|
20
|
+
function pripraviRazclembeRegistra(): RazclembaZdravila[] {
|
|
21
|
+
return seznamZdravil.map((zdravilo) => ({
|
|
22
|
+
ime: zdravilo.ime,
|
|
23
|
+
razclemba: razcleniNaziv(zdravilo.ime),
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
interface RezultatIskanja {
|
|
28
|
+
ime: string;
|
|
29
|
+
ocena: number;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Poišči najboljša ujemanja za dano razčlembo
|
|
33
|
+
function poisciNajboljsa(
|
|
34
|
+
razclembaVhoda: RazclenjeniNaziv,
|
|
35
|
+
razclembeRegistra: RazclembaZdravila[]
|
|
36
|
+
): RezultatIskanja[] {
|
|
37
|
+
const rezultati: RezultatIskanja[] = [];
|
|
38
|
+
|
|
39
|
+
for (const { ime, razclemba } of razclembeRegistra) {
|
|
40
|
+
const utemeljitev = oceniPodobnost(razclembaVhoda, razclemba);
|
|
41
|
+
rezultati.push({ ime, ocena: utemeljitev.ocena });
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Sortiraj po oceni padajoče
|
|
45
|
+
rezultati.sort((a, b) => b.ocena - a.ocena);
|
|
46
|
+
|
|
47
|
+
return rezultati;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
describe("testPodobnosti - vsa zdravila registra", () => {
|
|
51
|
+
const razclembeRegistra = pripraviRazclembeRegistra();
|
|
52
|
+
|
|
53
|
+
test("vsako zdravilo mora biti najdeno na prvem mestu ali med enakimi", () => {
|
|
54
|
+
let uspesno = 0;
|
|
55
|
+
let neuspesno = 0;
|
|
56
|
+
const napake: string[] = [];
|
|
57
|
+
|
|
58
|
+
for (const { ime, razclemba } of razclembeRegistra) {
|
|
59
|
+
// Poišči najboljša ujemanja
|
|
60
|
+
const rezultati = poisciNajboljsa(razclemba, razclembeRegistra);
|
|
61
|
+
|
|
62
|
+
if (rezultati.length === 0) {
|
|
63
|
+
neuspesno++;
|
|
64
|
+
napake.push(`[NI ZADETKA] ${ime}`);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const najvisjaOcena = rezultati[0].ocena;
|
|
69
|
+
|
|
70
|
+
// Poišči vse z najvišjo oceno
|
|
71
|
+
const najboljsi = rezultati.filter((r) => r.ocena === najvisjaOcena);
|
|
72
|
+
|
|
73
|
+
// Preveri, ali je pravi med najboljšimi
|
|
74
|
+
const praviIndex = najboljsi.findIndex((r) => r.ime === ime);
|
|
75
|
+
|
|
76
|
+
if (najboljsi.length === 1) {
|
|
77
|
+
// Natanko en zadetek
|
|
78
|
+
if (najboljsi[0].ime === ime) {
|
|
79
|
+
uspesno++;
|
|
80
|
+
} else {
|
|
81
|
+
neuspesno++;
|
|
82
|
+
napake.push(`[NAPAČEN ZADETEK] ${ime} -> ${najboljsi[0].ime}`);
|
|
83
|
+
}
|
|
84
|
+
} else if (praviIndex >= 0) {
|
|
85
|
+
// Več zadetkov, pravi je med njimi
|
|
86
|
+
// Preveri, ali imajo vsi zadetki pred pravim enak normaliziran naziv (podvojeno zdravilo)
|
|
87
|
+
const normaliziranNaziv = razclemba.normaliziran_naziv;
|
|
88
|
+
const vsiEnaki = najboljsi.slice(0, praviIndex + 1).every((r) => {
|
|
89
|
+
const rRazclemba = razclembeRegistra.find((reg) => reg.ime === r.ime)!.razclemba;
|
|
90
|
+
return rRazclemba.normaliziran_naziv === normaliziranNaziv;
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
if (vsiEnaki || praviIndex === 0) {
|
|
94
|
+
// Podvojeno zdravilo ali prvi je pravi - štejemo kot uspeh
|
|
95
|
+
uspesno++;
|
|
96
|
+
} else {
|
|
97
|
+
neuspesno++;
|
|
98
|
+
napake.push(`[VEČ ZADETKOV, PRAVI NI PRVI] ${ime}`);
|
|
99
|
+
}
|
|
100
|
+
} else {
|
|
101
|
+
// Pravi ni med zadetki z najvišjo oceno
|
|
102
|
+
neuspesno++;
|
|
103
|
+
napake.push(`[NI MED NAJBOLJŠIMI] ${ime} (najboljši: ${najboljsi.slice(0, 3).map((r) => r.ime).join(", ")})`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Izpis napak za lažje odpravljanje
|
|
108
|
+
if (napake.length > 0) {
|
|
109
|
+
console.log("\nNapake:");
|
|
110
|
+
for (const napaka of napake.slice(0, 10)) {
|
|
111
|
+
console.log(` ${napaka}`);
|
|
112
|
+
}
|
|
113
|
+
if (napake.length > 10) {
|
|
114
|
+
console.log(` ... in še ${napake.length - 10} napak`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const skupaj = uspesno + neuspesno;
|
|
119
|
+
const uspesnost = (uspesno / skupaj) * 100;
|
|
120
|
+
console.log(`\nUspešnost: ${uspesno}/${skupaj} (${uspesnost.toFixed(1)}%)`);
|
|
121
|
+
|
|
122
|
+
// Test mora imeti 100% uspešnost
|
|
123
|
+
expect(neuspesno).toBe(0);
|
|
124
|
+
expect(uspesnost).toBe(100);
|
|
125
|
+
});
|
|
126
|
+
});
|