КатегорияЛогическа грешка — контролни суми
Кога се хващаПри логическите проверки; XSD проверява формата на числата, не сбора
Типичен сигналДекларирани totals ≠ действителен сбор от редовете
Какво значи
Секцията GeneralLedgerEntries започва с декларация: брой записи (NumberOfEntries), общ дебит (TotalDebit) и общ кредит (TotalCredit). Това са контролни суми — приемащата страна ги сверява с действителния сбор от всички редове в секцията. Съвпадат ли, съдържанието е пристигнало цяло; не съвпадат ли — част от записите са отпаднали при експорта (или обратно, totals са сметнати върху друго множество записи).
Схемата и тук мълчи: тя проверява, че TotalDebit е валидно десетично число, но не смята сборове. Затова грешката излиза едва при логическите проверки — след като файлът е минал цялата XSD валидация.
Защо се случва
- Филтри на експорта. Totals се смятат от системата върху всички записи за периода, а после филтър (по тип документ, папка, потребител) отрязва част от редовете при записа във файла. Декларацията и съдържанието вече не говорят за едно и също.
- Прекъснат експорт. Генерирането е спряло преди края — файлът завършва коректно структурно, но последните записи липсват. Броят на записите е първият издайник:
NumberOfEntriesе по-голям от реално наличните. - Ръчна редакция след генериране. Изтрили сте „проблемен“ запис направо в XML-а, за да мине друга проверка — а totals са останали старите.
- Totals от друг момент. Както при салдата: ако заглавната част и редовете са извадени в различно време, междувременно осчетоводеното създава разлика.
Как се поправя
- Сравнете декларираното с действителното: брой записи, сбор дебит, сбор кредит. Посоката на разликата подсказва причината — липсващи редове (действителното е по-малко) или излишни totals.
- Регенерирайте файла в един момент, след приключване на периода. Това оправя случаите „различен момент“ и „прекъснат експорт“.
- Ако разликата остане — проверете филтрите на експорта: има ли тип записи, който влиза в totals, но не и във файла.
- Никога не „закърпвайте“ totals на ръка, за да съвпаднат — разликата е симптом, че съдържанието е непълно, а не че декларацията е сбъркана.
Пример
<NumberOfEntries>3</NumberOfEntries>
<TotalDebit>4500.00</TotalDebit>
<TotalCredit>4500.00</TotalCredit>
<!-- ...а във файла има само 2 записа
с общ дебит 3000.00: третият е
отрязан от филтър на експорта -->
<NumberOfEntries>3</NumberOfEntries>
<TotalDebit>4500.00</TotalDebit>
<TotalCredit>4500.00</TotalCredit>
<!-- и 3 записа, чиито редове дават
точно 4500.00 / 4500.00 -->
Пуснете файла през безплатната проверка: всяка грешка идва с ред, обяснение и съвет. Проверете файла — безплатно, в браузъра.