Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 22 additions & 4 deletions docs/etl.md
Original file line number Diff line number Diff line change
Expand Up @@ -253,8 +253,22 @@ Verdict-ът се определя от две прогнозни стойнос

CASE-ът се оценява по ред; печели първото съвпадение:

1. **`value_suspect`** — записана стойност неправдоподобно висока: `eff > 2 000 000 000` **или**
(`procEst >= 1000` **и** `eff > 200 * procEst`). Редът се **поправя, не се хвърля**: `amount_eur`
1. **`value_suspect`** — записана стойност неправдоподобно висока. Три отделни повода, всеки от
които стига сам по себе си:
- `eff > 2 000 000 000` — извън всякакъв мащаб за български договор;
- `procEst >= 1000` **и** `eff > 200 * procEst` — общият праг за неправдоподобно надвишаване;
- **стотинки лента** (#247, #298): пропуснат десетичен знак вдига стойността точно ~100 пъти.
Хваща се на две места, защото грешката може да е спрямо коя да е от двете прогнози:
- спрямо **процедурната**: `procEst >= 1000` **и** `95 * procEst <= eff <= 105 * procEst`;
- спрямо **прогнозата по позиция**: `ownEst >= 1000` **и** `procEst >= 1000` **и**
`eff >= 10 * procEst` **и** `95 * ownEst <= eff <= 105 * ownEst`.

Лентата е тясна нарочно — измерването върху корпуса показва изолирано струпване при ~100x и
нула договора между 105x и 200x. Второто рамо иска и `eff >= 10 * procEst`, защото при рамкови
и единични цени прогнозата по позиция е ЕДИНИЧНА цена и цял call-off законно я надхвърля
стократно; условието за процедурата отсява точно тези случаи.

Редът се **поправя, не се хвърля**: `amount_eur`
става `procEst` (собственият документиран бюджет на поръчката), а показваната нативна сума става
нативната процедурна прогноза. Пада до NULL (изключва се) само когато процедурата няма прогноза, от
която да се поправи. Guard-ът `procEst >= 1000` пази редовете, чиято *прогноза* е грешката
Expand All @@ -270,9 +284,13 @@ CASE-ът се оценява по ред; печели първото съвп
свършил `>= 5x` над подписаната (сбъркано число в анекс — само стъпката не стига, защото има
вериги, при които по-късен анекс сваля грешката обратно под подписаната стойност). Договорът
**се връща към подписаната стойност** за `amount_eur`; надутата текуща стойност се потиска.
4. **`review`** — надхвърляне в сива зона: `eff >= 10 * procEst`. Запазен, флагнат и **брои се по
4. **`annex_total_suspect`** (#305) — водещият анекс е удвоил договора в една стъпка (ЗОП чл. 116
ограничава единично изменение до +50%), а текстът на основанието не дава сигнал, по който
стойността да се поправи. Договорът **се връща към подписаната стойност**, както при
`annex_suspect`.
5. **`review`** — надхвърляне в сива зона: `eff >= 10 * procEst`. Запазен, флагнат и **брои се по
face value**.
5. **`ok`** — всичко останало, брои се по `eff`.
6. **`ok`** — всичко останало, брои се по `eff`.

Водещият принцип е **поправка пред изключване**: само наистина невъзстановими редове напускат
тоталите. Където записаната стойност е недвусмислен боклук, заместваме с най-добрия документиран
Expand Down
Loading