Кейс: как построихме SAFTCheck —
валидатор, при който файлът не напуска браузъра
През следващите няколко години почти всяка българска фирма ще мине през едно и също изпитание: SAF-T. Стандартизираният счетоводен файл за НАП се въвежда на вълни от 2026 до 2030 г. по § 17 от ПЗР на ЗДБРБ за 2025 г. — първо големите предприятия над праговете, а до 2030 г. и всички останали, включително ДДС-регистрираните микрофирми. Ритъмът е месечен: файлът се подава до края на месеца, следващ отчетния, а при отхвърляне има само 7 дни за корекция. С други думи — грешките струват скъпо, а времето за реакция е малко.
На този фон екипът ни построи SAFTCheck — безплатен инструмент за проверка на SAF-T файлове с една необичайна архитектурна особеност: файлът никога не напуска браузъра на потребителя. В тази статия разказваме откровено — проектът е наш — какви решения взехме, защо ги взехме и какво научихме по пътя. Не защото искаме да се потупаме по рамото, а защото същите принципи важат за всеки продукт, който работи с чувствителни данни.
Ако обмисляте подобен инструмент за вашия бизнес, това е кейсът, който бихме искали да бяхме прочели, преди да започнем.
Задачата: как печелиш доверие, когато искаш счетоводни данни
Един SAF-T файл не е просто XML. Вътре е цялото счетоводство на фирмата за месеца: обороти по сметки, салда, контрагенти, документи. Това са данни, които счетоводителите по навик (и с основание) пазят като зениците на очите си. Класическият SaaS модел — „качете файла при нас, ние ще го проверим“ — стартира с огромен минус пред тази аудитория. Всяко качване на сървър е въпрос, на който трябва да отговаряш: къде отиват данните, кой има достъп, колко време се пазят, какво става при пробив.
Втората особеност на задачата беше времето. SAF-T идва на вълни и пазарът тепърва се формира — първата вълна засяга големите предприятия от 2026 г., но въпросите започват много по-рано. Искахме инструмент, който е полезен още в момента, в който счетоводителят за първи път се сблъска с изискването, а не чак когато има готов файл за подаване.
Формулирахме задачата така: да махнем всички бариери между потребителя и проверката. Без регистрация, без имейл, без качване, без цена. Всяка премахната бариера е една причина по-малко да не пробваш.
Трите решения, които определиха проекта
Проверката е в браузъра
Валидацията върви локално чрез WebAssembly компилация на libxml2. Няма сървър, който да приема файлове — значи няма и какво да изтече.
Статичен сайт
Около 120 KB първоначално зареждане, brotli компресия, immutable кеш. Отваря се мигновено дори на служебен лаптоп през офисен VPN.
Само първоизточници
Всичко на сайта стъпва директно върху документите на НАП, не върху преразкази. Когато темата е нова, точността е единствената валута.
Решение №1: проверката върви изцяло в браузъра
Най-важното архитектурно решение взехме още в самото начало: валидацията се изпълнява локално, в браузъра на потребителя, чрез WebAssembly. Компилирахме libxml2 — същата библиотека, която десетилетия наред върши XML валидация в индустрията — до WASM модул, който зарежда официалната XSD схема на НАП (v1.0.2) и проверява файла на място.
Но схемата е само началото. XSD казва дали файлът е структурно валиден — не дали е счетоводно смислен. Затова върху нея добавихме собствени проверки:
- Балансови равенства по сметки и съответствие на TotalDebit/TotalCredit
- Кръстосани референции — всеки документ да сочи към реално деклариран контрагент
- UTF-8 кодиране и име на файла по Приложение 3
- Контролна цифра на ЕИК — дребен детайл, който може да провали иначе перфектен файл
Ползата от локалната обработка е двойна. За потребителя: няма какво да изтече, защото нищо не се качва — обещанието за поверителност не е абзац в политика за лични данни, а свойство на архитектурата, което всеки може да провери в мрежовия панел на браузъра си. За нас: няма сървър, който да обработва чужди счетоводни данни, следователно няма и целия оперативен и правен товар, който върви с това.
Решение №2: статичен сайт вместо платформа
Щом валидацията върви при клиента, сървърът няма какво да смята. Затова целият сайт е статичен: първоначалното зареждане е около 120 KB, всичко минава през brotli компресия, а асетите се кешират immutable. На практика инструментът се отваря мигновено дори на служебен лаптоп през офисен VPN — точно средата, в която работи реалната ни аудитория.
Статичната архитектура ни позволи и да сме последователни докрай: сайтът няма бисквитки и външни тракери, а статистиката е собствена и анонимна. Щеше да е нелепо да обещаваме, че файлът не напуска браузъра, и едновременно да пращаме поведението на потребителя към три рекламни платформи.
Решение №3: съдържание само от първоизточници
Третото решение не е техническо, а редакционно: всичко на сайта стъпва директно върху документите на НАП, не върху преразкази. Когато темата е нова и напрегната, точността е единствената валута.
Така около самата проверка израсна цял слой от помощни инструменти. Направихме справочник на всичките 347 елемента от схемата с официалните описания на НАП, плюс номенклатурите и националния сметкоплан. Добавихме калкулатор „В коя вълна съм?“ за сроковете 2026–2030, речник на грешките с десет дълбоки страници и paste-инструмент „Обясни ми грешката“, както и указател с всичките 188 официални въпроса и отговора от документа на НАП (версия 2, 2026).
Най-новото парче е конвертор в бета: подавате оборотка и хронология като CSV и получавате месечен SAF-T XML — отново изцяло в браузъра и безплатно по време на бетата. Това е логичното продължение на същия принцип: щом проверката може да е локална, защо и съставянето да не е? Може да го видите в действие в приложението на конвертора.
Какво научихме
Скоростта е част от доверието
Свикнали сме да мислим за скоростта като SEO метрика. Тук тя се оказа нещо повече: инструмент, който се отваря мигновено и работи без регистрация, изпраща сигнал за сериозност. Обратното също е вярно — бавен сайт с форма за имейл преди резултата казва „първо ти ни дай нещо, после ние на теб“.
Поверителността се доказва, не се декларира
Разликата между „ние не споделяме вашите данни“ и „вашите данни физически не стигат до нас“ е разликата между обещание и факт. Второто е по-трудно за строене, но е несравнимо по-лесно за комуникиране — обяснява се в едно изречение и се проверява от всеки технически грамотен потребител.
Първоизточниците са конкурентно предимство
Съдържание, извлечено директно от схемата и официалните отговори на НАП, е бавна и скучна работа. Точно затова почти никой не я върши — и точно затова тя се отплаща. Няма по-силен аргумент пред професионална аудитория от този да цитираш първоизточника точно.
Какво значи това за вас
Ако вашият бизнес обмисля инструмент, който работи с чувствителни данни — финансови, медицински, лични — кейсът SAFTCheck се свежда до три преносими извода:
- Обработката на страната на клиента вече е реалистична опция. WebAssembly позволява сериозни изчисления направо в браузъра. Ако данните не трябва да напускат потребителя, вече не е и нужно да го правят.
- Не всичко има нужда от платформа. Статичен сайт с умен фронтенд може да носи пълноценен продукт — по-бърз, по-евтин и по-сигурен от еквивалентния SaaS, когато сметките се вършат локално.
- Махнете бариерите пред първата употреба. Регистрацията, качването и цената са три врати, през които потребителят трябва да мине, преди да види стойност. Всяка затворена врата ви струва потребители, за които никога няма да разберете, че сте ги изгубили.
Не всеки продукт може (или трябва) да е изцяло в браузъра. Но въпросът „може ли тази обработка да се случи при клиента?“ заслужава да се зададе в началото на всеки проект с чувствителни данни. Ако отговорът е „да“, получавате архитектура, при която доверието не се гради с думи — то е вградено. А ако търсите партньор, който да зададе този въпрос заедно с вас — знаете къде да ни намерите.