# От фактурата до файла за НАП: bagabuch
** bagabuch ** е счетоводна програма за българския пазар, написана върху [екосистемата на Бага](ekosistema-baga-bg.md). Не е демо върху чужда база и чужд фреймуърк. Backend-ът е Baga + fmrbaga, парите са `bagadecimal` (низ в JSON, никога `f64`), датите са ISO, XML-ът за НАП е `xmlbaga` + `zipbaga`, печатът е `reportbaga`. Базата е [boilaDB](boiladb-dual-get-bg.md) на порт 6575, говореща PostgreSQL v3 wire. Три процеса, три порта, нищо вградено.
> *„Счетоводството не е витрина за езика. То е тест: ако фактурата не стигне до дневника, до ДДС клетката и до файла за НАП — вертикалът е лъжа."*
2026 година. България е в еврозоната. Базовата валута е евро. Курсовете идват от ЕЦБ. ДДС дневникът трябва да излезе в Windows-1251, защото порталът на НАП още чете така. SAF-T иска улица, номер на сграда и регион, не един дълъг адрес. Това не са „бъдещи фази". Това е работният ден.
Какво прави програмата
Цикълът е познат на всеки счетоводител и нарочно е тесен: документ → запис → справка → декларация.
**Фирма и номенклатури.** Реквизити, ДДС регистрация и период, управител, счетоводител, IBAN. Сметкоплан по НСС, със търсачка към номенклатурата на НАП (`NRA_Nom_Accounts`) — при нова фирма се зарежда от каталога, не се пише на ръка. Контрагент от VIES: име и суров адрес от Европейската комисия; ако фирмата има Mistral ключ, адресът се цепи към SAF-T полета (улица, сграда, град, код, регион). Стоки и услуги с продажна цена, себестойност, складов флаг и сметки 304 / 702.
**Фактури.** Типове по ППДДС — фактура, кредитно, дебитно, протокол, проформа. Автоматичен номер от кочан. Данъчно събитие. ДДС по ред: 20 %, 9 %, 0 %, освободени, вътреобщностни. Печат оригинал/копие (PDF, DOCX, ODT). UBL експорт. Осчетоводяването е еднократно, в транзакция; втори пост връща 409.
изходяща: Дт 411 / Кт 702 + Кт 4532
при стока: Дт 702 / Кт 304 по себестойност (WAC / FIFO / LIFO)
входяща: Дт 304 или 602 + Дт 4531 / Кт 401
Проформата не влиза в дневниците. Затворен счетоводен месец спира поста — чернова още може да се пази.
**Дневник и справки.** Записи от пост и ръчни. Дебит = кредит. Оборотна ведомост, главна книга, хронологичен журнал със FIFO сдвояване, справка по контрагент. Експортът е същият път като печата на фактурата: HTML таблица → reportbaga → PDF / Excel / ODS. В Excel сумите са числа, не текст — българският Excel ги показва със запетая.
**ДДС за НАП.** Не отделна таблица „ДДС журнал". Истината е дневникът плюс ставките и основанията по редовете на фактурата. Екранът `/vat` има дневници покупки и продажби, клетки ППДДС 01-01…01-82, дължим / за възстановяване. Файловете DEKLAR, POKUPKI, PRODAGBI се пишат в Windows-1251 и се пакетират в ZIP — точно това, което порталът очаква.
**SAF-T BG.** Месечен, on-demand или годишен XML. Номенклатурите на НАП (движения, режими, плащания, фактури, данъци, мерки, области, сметки) са каталог в кода, не CRUD таблица: подаването иска точно тези кодове.
## Склад, обекти, производство
Фирмата има търговски обекти (`OFFICE`, `STORE`, `WAREHOUSE`, `BRANCH`) — една номенклатура, не втора таблица „складове". Наличността по обект живее в партидите. Фирменият тотал е върху продукта.
Вътрешният приемо-предавателен протокол мести стоки и ДМА между обекти **без** запис в дневника. Дт 304 / Кт 304 с „друг обект" надува оборотната ведомост без покупка и без продажба. Количеството се мести; оборотът стои.
Производството е нарочно тънко. Рецепта: изходен артикул + материали + фира. Поръчка: копира редовете, скалира количествата. Потвърждението в една транзакция изписва материалите (WAC / FIFO / LIFO), заприходява готовата продукция по материалната себестойност и прави записа:
Дт 611 / Кт 302 (материали в производство)
Дт 303 / Кт 611 (готова продукция)
Ако 611 / 302 / 303 липсват в сметкоплана, има запас към 601 / 304. Завършената поръчка не се трие. Затворен месец спира и това потвърждение. Няма работни центрове, технологични операции и QC — това е друг продукт. Тук производството е складов и счетоводен факт, вързан към вече съществуващите `inv_issue` / `inv_receive`.
SAF-T каталогът вече държи кодовете 70 (запаси към производство) и 20 (продукция от производство). XML по обект още не се пълни от поръчката — куката е там.
## Банки, дивиденти, ДМА
Банкови сметки с IBAN, счетоводна и буферна сметка. Извлечения: OBB XML, ISO camt.053, PostBank XML, MT-940, CSV. Преглед с дубликати преди импорт, после осчетоводяване или разнасяне от буфера.
Дивиденти към действителните собственици от настройките на фирмата. Дялът се снима (име, ЕГН, процент) в момента на протокола, за да не се размести историята, ако после някой смени собственика. Данък 5 % по ЗДДФЛ. Остатъкът след закръгляне отива при последния. Плащане — само след одобрение.
ДМА с категории по ЗКПО, счетоводна и данъчна амортизация, преоценка, преместване по обект, консервация, снемане. Начални салда по НСС клас — не са обороти, не влизат в дневника. Периодите заключват месеца.
## Сканиране без да се изнася фактурата извън ЕС
Фактурата е финансова информация. Американски или китайски облак за OCR не е опция, дори да е евтин. Mistral е европейски оператор. Ключът е по фирма. OCR 4.1 чете PDF/снимка, Small сглобява JSON, резултатът е **чернова фактура с редове**, не запис по сметки. Името от документа на доставчика („Кабел Cu 3x2.5") се свързва веднъж с нашия артикул; следващият скан помни. VIES си остава без ключ; ключът цепи адреса.
## Правилото, което държи вертикала
bagabuch **не** копира fmrbaga, boilaDB, ormbaga. При компилация — path-зависимости в `sandak.toml`. При работа — HTTP и PostgreSQL wire през портове. Когато счетоводството удари бъг в числови низове с водещи нули или в multi-column UPDATE, поправката отива в общия пакет. Програмата е клиент на екосистемата и свидетел срещу нея.
Интерфейсът е Next.js, светла/тъмна тема, български по подразбиране, английски втори. Парите през целия стек са низове. Датите в базата са `YYYY-MM-DD`; на екрана и на печата — `dd.mm.yyyy`.
## Честен статус
Това е **работен прототип**, който вече върти основния цикъл — не пълна счетоводна къща. Входът е скелет (`sub` в JWT, паролата не се проверява). Правата по роля се пишат в таблица, но още не се налагат върху API. Мултитенантът е „активна фирма“; фактурите и дневникът още нямат `company_id` (банките, дивидентите и производството вече имат). Няма баланс и ОПР, протокол. ДДС вече не е „една ставка 20 %".
Посоката се проверява за пет минути: `make` в монорепото, `./scripts/dev.sh` в bagabuch — фактура от формата до дневника, до клетката в ППДДС, до ZIP-а за НАП. Ако трябва — рецепта, поръчка, изписване, 611.
Документацията на продукта е в `app-product/bagabuch/docs/` — текущо състояние на кода, не пътна карта. `PLAN.md` е старата чернова от референцията.
*bagabuch е най-горният етаж на [екосистемата на Бага](ekosistema-baga-bg.md): език, в който AI пише имплементацията, а компилаторът е съдията. Хранилища:
https://github.com/katehonz/baga-lang
https://github.com/bagalang/boilaDB
https://github.com/bagalang/bagabuch
⚔️



