ADATEL KIR Reprice & Reconciliation Engine v2
Refaktoriši postojeću logiku KIR cenovnik konvertera u deterministički engine za
old/new OPEX mapping, repricing, ugovornu klasifikaciju i bulk reconciliation.
Ovo nije generički LLM spreadsheet agent. Parsiranje, numerika i validacija
moraju biti deterministički — implementirani u kodu, ne u proznom zaključivanju.
Non-goals
- Nema LLM procene cena, šifara, datuma ni ugovornog statusa.
- Nema "pametnog" popunjavanja praznih polja.
- Nema fuzzy matcha kao izvora istine (dozvoljen je samo kao predlog u exception queue).
Input
Svi ulazi su eksplicitni; ništa se ne izvodi iz podrazumevanih vrednosti.
| Ulaz |
Opis |
| KIR xlsx kartica |
originalni source workbook |
| stari Telekom OPEX cenovnik |
old price list |
| novi Telekom OPEX cenovnik |
new price list |
| old↔new mapping tabela |
veza između starih i novih šifara |
| effective dates |
datumi važenja po cenovniku i po kartici |
| commercial-rules tabela |
konfigurabilna, uključujući Art. 3.5 parametre |
| execution/signature/status metadata |
izvršenje, potpis, status kartice |
Ako bilo koji obavezan ulaz nije prisutan ili nije čitljiv, engine se zaustavlja
sa jasnom greškom. Ne nastavljaj sa parcijalnim ulazom.
Pipeline
Koraci se izvršavaju redom. Svaki korak ima proverljiv izlaz.
- Parse source workbook — deterministički parser, bez heuristike nad
layoutom koja nije eksplicitno konfigurisana.
- Canonical line-item ledger — svaka stavka dobija stabilan identitet
(šifra, opis, količina, jedinična cena, iznos, poreklo: sheet + red).
- Reprodukuj originalni source total — izračunaj total iz ledgera.
- Hard stop — ako izračunati source total != workbook total, STOP.
Ne repricing, ne mapping, ne report. Prijavi razliku i lokaciju odstupanja.
- Map old/new codes — svaka stavka dobija tačno jednu klasifikaciju:
EXACT, MAPPED, SPLIT_MERGE, REVIEW.
- Technical value — izračunaj po odgovarajućem cenovniku (old ili new),
biranom na osnovu effective date, ne na osnovu pretpostavke.
- Contractual value — izračunaj odvojeno od technical value. Dve
vrednosti se nikada ne mešaju u istoj koloni.
- Art. 3.5 rule — 70% verifikovane DOT→Telekom stope. Primenjuje se
samo kada su i base i effective-date condition potvrđeni.
- Out-of-scope — stavke van scope-a idu u
EXTRA ili REVIEW. Nikada se
ne primenjuje Art. 3.5 automatski na out-of-scope stavke.
- Exception queue — sve što je
SPLIT_MERGE, REVIEW, EXTRA, ili ima
nepotvrđen Art. 3.5 uslov, ulazi u queue sa razlogom.
- Output — XLSX reconciliation report + machine-readable audit file
(JSON/CSV) sa punim tragom po stavci.
Klasifikacija mappinga
EXACT — old šifra postoji identično u novom cenovniku.
MAPPED — 1:1 veza potvrđena mapping tabelom.
SPLIT_MERGE — 1:N ili N:1 veza; ide u exception queue uz predloženu
dekompoziciju, ali se ne zaključuje automatski.
REVIEW — nema potvrđene veze, ili je veza dvosmislena.
Art. 3.5 gate
Primeni 70% stopu isključivo kada su oba uslova eksplicitno potvrđena:
- Base condition — verifikovana DOT→Telekom bazna stopa za tu stavku.
- Effective-date condition — datum kartice pada u važeći period.
Ako je bilo koji uslov nepotvrđen: REVIEW, sa navedenim uslovom koji fali.
Nema delimične primene, nema podrazumevanog "verovatno važi".
Output
XLSX reconciliation report — po stavci: source vrednosti, klasifikacija,
technical value, contractual value, primenjena pravila, delta, status.
Audit file — machine-readable, dovoljan za rekonstrukciju svake izračunate
cifre: ulazni red, izabrani cenovnik, primenjena pravila, međurezultati.
Oba izlaza moraju biti reproducibilna: isti ulaz → bajt-identičan rezultat
(osim eksplicitnog timestamp polja).
Obavezni golden testovi
Engine se ne smatra ispravnim dok sva tri ne prolaze:
- A — jedna zatvorena OLD-price kartica.
- B — jedna zatvorena NEW-price kartica.
- C — trenutnih 5 KG kartica: source total mora biti 499.594,04 RSD.
Test C je regression guard za korak 3/4. Ako padne, problem je u parsiranju ili
sumiranju, ne u repricingu — ne "popravljaj" ga podešavanjem repricing logike.
Hard rules
- Nikada ne nagađaj šifru, cenu, datum ili ugovorni status.
- Nepotvrđeno ≠ nula. Nepotvrđeno ide u exception queue.
- Numerika ide preko decimalne aritmetike, ne float-a; zaokruživanje je
eksplicitno i definisano na jednom mestu.
- Mismatch source totala je hard stop, ne warning.
- Technical i contractual vrednost ostaju razdvojene kroz ceo pipeline.
- Svaka izlazna cifra mora imati trag do ulaznog reda i primenjenog pravila.
1---2name: kir-reprice3description: Deterministički engine za KIR cenovnik repricing, old/new OPEX mapping, ugovornu klasifikaciju i bulk reconciliation. Use when the user mentions KIR kartice, KIR cenovnik, reprice, repricing, OPEX cenovnik, old/new mapping, Art. 3.5, reconciliation report, or asks to refactor/run the KIR cenovnik konverter.4---56# ADATEL KIR Reprice & Reconciliation Engine v278Refaktoriši postojeću logiku KIR cenovnik konvertera u deterministički engine za9old/new OPEX mapping, repricing, ugovornu klasifikaciju i bulk reconciliation.1011Ovo **nije** generički LLM spreadsheet agent. Parsiranje, numerika i validacija12moraju biti deterministički — implementirani u kodu, ne u proznom zaključivanju.1314## Non-goals1516- Nema LLM procene cena, šifara, datuma ni ugovornog statusa.17- Nema "pametnog" popunjavanja praznih polja.18- Nema fuzzy matcha kao izvora istine (dozvoljen je samo kao predlog u exception queue).1920## Input2122Svi ulazi su eksplicitni; ništa se ne izvodi iz podrazumevanih vrednosti.2324| Ulaz | Opis |25| --- | --- |26| KIR xlsx kartica | originalni source workbook |27| stari Telekom OPEX cenovnik | old price list |28| novi Telekom OPEX cenovnik | new price list |29| old↔new mapping tabela | veza između starih i novih šifara |30| effective dates | datumi važenja po cenovniku i po kartici |31| commercial-rules tabela | konfigurabilna, uključujući Art. 3.5 parametre |32| execution/signature/status metadata | izvršenje, potpis, status kartice |3334Ako bilo koji obavezan ulaz nije prisutan ili nije čitljiv, engine se zaustavlja35sa jasnom greškom. Ne nastavljaj sa parcijalnim ulazom.3637## Pipeline3839Koraci se izvršavaju redom. Svaki korak ima proverljiv izlaz.40411. **Parse source workbook** — deterministički parser, bez heuristike nad42 layoutom koja nije eksplicitno konfigurisana.432. **Canonical line-item ledger** — svaka stavka dobija stabilan identitet44 (šifra, opis, količina, jedinična cena, iznos, poreklo: sheet + red).453. **Reprodukuj originalni source total** — izračunaj total iz ledgera.464. **Hard stop** — ako izračunati source total != workbook total, **STOP**.47 Ne repricing, ne mapping, ne report. Prijavi razliku i lokaciju odstupanja.485. **Map old/new codes** — svaka stavka dobija tačno jednu klasifikaciju:49 `EXACT`, `MAPPED`, `SPLIT_MERGE`, `REVIEW`.506. **Technical value** — izračunaj po odgovarajućem cenovniku (old ili new),51 biranom na osnovu effective date, ne na osnovu pretpostavke.527. **Contractual value** — izračunaj **odvojeno** od technical value. Dve53 vrednosti se nikada ne mešaju u istoj koloni.548. **Art. 3.5 rule** — 70% verifikovane DOT→Telekom stope. Primenjuje se55 **samo** kada su i base i effective-date condition potvrđeni.569. **Out-of-scope** — stavke van scope-a idu u `EXTRA` ili `REVIEW`. Nikada se57 ne primenjuje Art. 3.5 automatski na out-of-scope stavke.5810. **Exception queue** — sve što je `SPLIT_MERGE`, `REVIEW`, `EXTRA`, ili ima59 nepotvrđen Art. 3.5 uslov, ulazi u queue sa razlogom.6011. **Output** — XLSX reconciliation report + machine-readable audit file61 (JSON/CSV) sa punim tragom po stavci.6263## Klasifikacija mappinga6465- `EXACT` — old šifra postoji identično u novom cenovniku.66- `MAPPED` — 1:1 veza potvrđena mapping tabelom.67- `SPLIT_MERGE` — 1:N ili N:1 veza; ide u exception queue uz predloženu68 dekompoziciju, ali se ne zaključuje automatski.69- `REVIEW` — nema potvrđene veze, ili je veza dvosmislena.7071## Art. 3.5 gate7273Primeni 70% stopu isključivo kada su oba uslova eksplicitno potvrđena:74751. **Base condition** — verifikovana DOT→Telekom bazna stopa za tu stavku.762. **Effective-date condition** — datum kartice pada u važeći period.7778Ako je bilo koji uslov nepotvrđen: `REVIEW`, sa navedenim uslovom koji fali.79Nema delimične primene, nema podrazumevanog "verovatno važi".8081## Output8283**XLSX reconciliation report** — po stavci: source vrednosti, klasifikacija,84technical value, contractual value, primenjena pravila, delta, status.8586**Audit file** — machine-readable, dovoljan za rekonstrukciju svake izračunate87cifre: ulazni red, izabrani cenovnik, primenjena pravila, međurezultati.8889Oba izlaza moraju biti reproducibilna: isti ulaz → bajt-identičan rezultat90(osim eksplicitnog timestamp polja).9192## Obavezni golden testovi9394Engine se ne smatra ispravnim dok sva tri ne prolaze:9596- **A** — jedna zatvorena OLD-price kartica.97- **B** — jedna zatvorena NEW-price kartica.98- **C** — trenutnih 5 KG kartica: source total mora biti **499.594,04 RSD**.99100Test C je regression guard za korak 3/4. Ako padne, problem je u parsiranju ili101sumiranju, ne u repricingu — ne "popravljaj" ga podešavanjem repricing logike.102103## Hard rules104105- Nikada ne nagađaj šifru, cenu, datum ili ugovorni status.106- Nepotvrđeno ≠ nula. Nepotvrđeno ide u exception queue.107- Numerika ide preko decimalne aritmetike, ne float-a; zaokruživanje je108 eksplicitno i definisano na jednom mestu.109- Mismatch source totala je hard stop, ne warning.110- Technical i contractual vrednost ostaju razdvojene kroz ceo pipeline.111- Svaka izlazna cifra mora imati trag do ulaznog reda i primenjenog pravila.