Към съдържанието

Valox Invoice

Собствен инструмент за фактуриране, който издава двуезични фактури по закон и спира с ясна грешка

Роля
Сам, ръководя агенти
Статус
Пуснат
Код
Частно хранилище
Технологии
Next.jsReactTypeScriptSQLiteDrizzlePuppeteerTailwind
€

В числа

1

общ код за изобразяване за прегледа, изтеглянето на PDF и издадения изглед, затова те не могат да се различават

0

мълчаливи подмени на валутата: липсващ курс на ЕЦБ предизвиква грешка

0

автоматизирани теста

Проблемът

Фактурирането на българска фирма има твърди правила: поредни номера без пропуски, бележка с член от закона за ДДС според вида на клиента, суми в евро по курса на ЕЦБ за датата на данъчното събитие и корекции с кредитно известие. Исках инструмент, който налага тези правила, вместо да разчита аз да ги помня.

Подходът

Първо написах спецификация на платформата от 384 реда, после накарах агенти да построят приложение с Next.js за една фирма върху SQLite и Drizzle. Номерацията и бележките за ДДС бяха проверени в самата сесия спрямо българския закон за ДДС и Наредба № Н-18.

Как работи

  1. Един код за изобразяване

    Превръщането в евро е преобразуване в момента на изобразяване в една шаблонна функция, затова прегледът, изтеглянето на PDF и издаденият изглед минават през същия код и изглеждат еднакво.

  2. Валутни курсове с ясна грешка

    Курсът на ЕЦБ се взема за датата на данъчното събитие и се записва в кеш на диска. Мълчаливото връщане към USD беше премахнато, така че изобразяването и формулярът предизвикват грешка, когато курсът липсва, а ръчното въвеждане е изричният начин курсът да се замени.

  3. Корекции без редакции

    Издадените документи не се редактират. Грешката се поправя с кредитно известие и ново издаване, а номерата продължават в последователност без пропуски.

  4. Резервно копие, преди броячът да мръдне

    Базата данни се копира с времева отметка преди всяка промяна. След като агент пренебрегна установената практика при необратима стъпка на издаване, записах правилото, че при стъпка на издаване печели установената практика, а всеки конфликт получава въпрос, преди броячът да се премести.

  5. Почистено копие за друг човек

    Когато предадох инструмента на друг човек, агенти прегледаха всеки файл с изходен код, приложиха 39 корекции чрез скриптове и построиха архив от 106 файла без база данни, лого, спецификация, файлове с настройки на средата и история на git. Проверка за изтичане на данни обхвана всички файлове, както и текста и метаданните на обяснителния PDF, който Puppeteer създаде в шест страници с вградени шрифтове.

Какво избрах и какво отпадна

Избрах

Ясна грешка при липсващ валутен курс

Пред

Мълчаливо връщане към USD

Резервен вариант би сложил грешна цифра в правен документ, без никой да забележи.

Избрах

Кредитно известие и ново издаване

Пред

Редактиране на издадена фактура

Издаденият документ остава какъвто е бил, а редът на номерата остава без пропуски.

Резултатът

Издава моите фактури. Стои в частна мрежа и в самото приложение няма вход с парола. Няма автоматизирани тестове, което е слабото му място, а верността му се опира на единния код за изобразяване и на правилата по-горе.