Valox Invoice
Собствен инструмент за фактуриране, който издава двуезични фактури по закон и спира с ясна грешка
- Роля
- Сам, ръководя агенти
- Статус
- Пуснат
- Код
- Частно хранилище
- Технологии
- Next.jsReactTypeScriptSQLiteDrizzlePuppeteerTailwind
В числа
1
общ код за изобразяване за прегледа, изтеглянето на PDF и издадения изглед, затова те не могат да се различават
0
мълчаливи подмени на валутата: липсващ курс на ЕЦБ предизвиква грешка
0
автоматизирани теста
Проблемът
Фактурирането на българска фирма има твърди правила: поредни номера без пропуски, бележка с член от закона за ДДС според вида на клиента, суми в евро по курса на ЕЦБ за датата на данъчното събитие и корекции с кредитно известие. Исках инструмент, който налага тези правила, вместо да разчита аз да ги помня.
Подходът
Първо написах спецификация на платформата от 384 реда, после накарах агенти да построят приложение с Next.js за една фирма върху SQLite и Drizzle. Номерацията и бележките за ДДС бяха проверени в самата сесия спрямо българския закон за ДДС и Наредба № Н-18.
Как работи
Един код за изобразяване
Превръщането в евро е преобразуване в момента на изобразяване в една шаблонна функция, затова прегледът, изтеглянето на PDF и издаденият изглед минават през същия код и изглеждат еднакво.
Валутни курсове с ясна грешка
Курсът на ЕЦБ се взема за датата на данъчното събитие и се записва в кеш на диска. Мълчаливото връщане към USD беше премахнато, така че изобразяването и формулярът предизвикват грешка, когато курсът липсва, а ръчното въвеждане е изричният начин курсът да се замени.
Корекции без редакции
Издадените документи не се редактират. Грешката се поправя с кредитно известие и ново издаване, а номерата продължават в последователност без пропуски.
Резервно копие, преди броячът да мръдне
Базата данни се копира с времева отметка преди всяка промяна. След като агент пренебрегна установената практика при необратима стъпка на издаване, записах правилото, че при стъпка на издаване печели установената практика, а всеки конфликт получава въпрос, преди броячът да се премести.
Почистено копие за друг човек
Когато предадох инструмента на друг човек, агенти прегледаха всеки файл с изходен код, приложиха 39 корекции чрез скриптове и построиха архив от 106 файла без база данни, лого, спецификация, файлове с настройки на средата и история на git. Проверка за изтичане на данни обхвана всички файлове, както и текста и метаданните на обяснителния PDF, който Puppeteer създаде в шест страници с вградени шрифтове.
Какво избрах и какво отпадна
Избрах
Ясна грешка при липсващ валутен курс
Пред
Мълчаливо връщане към USD
Резервен вариант би сложил грешна цифра в правен документ, без никой да забележи.
Избрах
Кредитно известие и ново издаване
Пред
Редактиране на издадена фактура
Издаденият документ остава какъвто е бил, а редът на номерата остава без пропуски.
Резултатът
Издава моите фактури. Стои в частна мрежа и в самото приложение няма вход с парола. Няма автоматизирани тестове, което е слабото му място, а верността му се опира на единния код за изобразяване и на правилата по-горе.