Skip to content

[Данни]: Двойно броене на стойността в анексите (нова обща стойност се добавя към старата) #305

Description

@todorkolev

Какъв е проблемът с данните

Когато анексът обявява нова обща стойност на договора, тя се записва като добавка към старата, вместо да я замени. Изходната стойност се брои двойно.

Измерено на пълен локален пребилд от 12.08.2026 (период 2020 - 11.08.2026, 26 921 анекса).

Доказателството - един запис, сверен с текста на самия анекс. УНП 00010-2023-0006, договор 145652:

Какво казва анексът Какво трябва да е Какво има в базата
„442 000.00 лв. без ДДС се актуализира с 22% или общата стойност на договора ще възлезе на 539 240.00 лв. без ДДС" стойност след: 539 240 лв. (ръст +22%) стойност след: 981 240 лв. (отчетен ръст +122%), тоест 442 000 + 539 240

Мащаб. Дефектът има математически подпис: щом новата обща стойност е по-голяма от старата, сборът винаги дава ръст от 100% нагоре.

  • 7 335 анекса вдигат цената;
  • от тях 686 са с ръст 100% или повече - заподозрените;
  • от тези 686 текущите флагове хващат само 20;
  • остават 666 незасечени, на стойност 475.4 млн. EUR.

Защо #299 не ги хваща. Правилото от #299 (единична стъпка >=10x при сбор >=5x) се цели в друга повреда - сбъркано число, надуло договора десетки пъти. То иска сборът да стигне 5 пъти подписаната стойност, а двойното броене дава около 2 пъти (в примера горе - 2.22). Тоест стои трайно под прага и по конструкция не може да бъде хванато от него. #299 си свърши работата за своя случай: на ниво договор вдигна засечените от 3 на 19.

Подслучай: 199 записа точно на +100%. Когато анексът обявява същата обща стойност, сборът дава точно удвояване. Двата най-големи са недвусмислени:

  • УНП 00210-2024-0024, договор 189325: 77 000 000 -> 154 000 000 лв. Текстът на анекса: „Считано от 01.10.2025 г., отпечатваната върху акцизните бандероли за тютюневи изделия продажна цена се променя от лева в евро." Тоест анексът само сменя валутата, а стойността е удвоена.
  • УНП 00080-2023-0001, договор 84818: 76 769 540.87 -> 153 539 081.74 EUR. Анексът само преструктурира курсове за обучение в рамките на гаранционния период.

Само тези 199 записа внасят 193.4 млн. EUR фиктивен ръст.

Сляпо петно на подписа. Ако анексът обявява обща стойност, която е по-ниска от старата, двойното броене дава ръст под 100% и се скрива сред „чистите" записи. Тоест прагът от 100% е предпазна мярка, а не доказателство за чистота - не може да се твърди, че анексите под 100% не са засегнати.

Флаговете лекуват договора, не анекса. Дори за 20-те засечени записа value_flag поправя показаната стойност на договора, но редът в amendments продължава да носи удвоеното value_after. Времевата линия на анексите на страницата на договора показва грешната стойност.

Източникът е консистентен, дефектът идва от входа. value_delta съвпада с value_after - value_before при 26 826 от 26 864 записа (99.9%), тоест ЦАИС ЕОП е вътрешно непротиворечив и грешното число пристига отвън, а не се получава при сметка в СИГМА.

Засегнати консуматори надолу по веригата:

Възможна посока за поправка. Числата в свободния текст на основанието са четими: в 355 записа стойността, равна на делтата, стои в контекст на „обща / общата / крайна / възлиза", което е сигнатурата на обявена обща стойност. Проверка от вида „ако value_after приблизително е равно на value_before + число, срещано в текста като обща стойност, тогава замени вместо да събереш" изглежда изпълнима, но иска внимание - евристиките върху свободен текст лесно дават лъжливи попадения. Минималната мярка е флаг, който сваля тези записи от агрегатите, както #299 прави за своя случай.

Конкретен пример (адрес / ЕИК / УНП)

00010-2023-0006 (договор 145652); също 00210-2024-0024 и 00080-2023-0001

Източник за правилната стойност (по желание)

Текстът на самия анекс в ЦАИС ЕОП: „442 000.00 лв. без ДДС се актуализира с 22% или общата стойност на договора ще възлезе на 539 240.00 лв. без ДДС"

Преди да изпратите

  • Потърсих съществуващ issue за същия запис или проблем.

Проверени за дублиране: #248 (затворен, за сбъркано число в анекс - друг случай), #286 (затворен, за OCID вместо УНП), #245 (затворен, за двойна конверсия на евро анекси), #247 и PR #304 (стотинки), както и отворените PR-и по пътя на анексите.

Metadata

Metadata

Assignees

No one assigned

    Labels

    data-qualityКачество/коректност на данните (ETL, регистри)etlОбласт: etlpriority: highВисок приоритет

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions