Fő fogalmak
Income: Bejövő számla/bevételi rekord (összegek, partner, deviza, integráció típusa stb.). IncomeAssignment: Az adott bevétel felosztása üzleti dimenziók és Revenue Type szerint (pl. árbevétel kategória). Tag / IncomeTag / IncomeAssignmentTag: Címkék bevételhez és felosztáshoz. Revenue Type: Üzleti kategória, amelyhez a bevétel (vagy felosztás) rendelődik. IncomeIntegration: Integrációs hivatkozás az adott számlára (Számlázz.hu / Billingo integráció-ID). Policy engine: Házirendek (JSON) alapján automatikusan beállít revenue_type-ot és/vagy tag(eket). Kontextus: A Számlázz.hu integráció és a NAV adatok/archiválás feltételei a kapcsolódó szolgáltatás-leírásban szerepelnek; a #profi csomag + Számlaverzum adja a teljes élményt (NAV, archiválás).
A termékkoncepció célja: kevesebb kézi adatbevitel → jobb adatok → gyorsabb döntések; a beérkezés több csatornán (e-mail/NAV/manuális/Számlázz.hu/Chrome), azonnali strukturálás, majd utalás-előkészítés mint erős adatvalidációs pont.
Modul felelősségei (funkciónként)
update_missing_income(income, data) VAT-terület: beállítja, ha hiányzott és az input tartalmazza. IncomeTag: létrehozza az új tag-kapcsolatokat (idempotens). IncomeAssignment: ha még nincs, létrehozza egyetlen felosztással (nettó/ÁFA/bruttó tükrözése). Assignment frissítés: ha az assignment-en nincs revenue type, beállítja data["revenue_type"] alapján; ha nincs rajta tag, felveszi income_assignment_tags alapján. Miért fontos?
A későbbi policy-alkalmazás és jelentések feltétele a konzisztens struktúra (felosztás + címkék).
v2 – szabálylista („policies”) + globális szűrők
Privát személy szűrés (private_person_indicator a céges policy-ban): ha be van állítva és nem egyezik a számlával, a teljes futás skip. Fő futás: run_policies(income) skip_for_multiple_match (globális): ha több policy is illeszkedik és ez be van kapcsolva → minden revenue_type törlés + EventLog: „Multiple policies found”. Policy-szintű skip feltételek: skip_before_date: adott income-mező dátuma előtt/után (szöveg összevetés formátumazonosság mellett). skip_if_multiple_items: több tételes számlák kizárása. skip_for_payment_method: bizonyos fizetési módok kizárása. private_person_indicator: partner-szintű illesztés feltétele. Keresés logikája (search_applicable_policies): Policy-k listája + opcionális operator: "OR"; alapértelmezett: AND. Egy policy-elem search_for_match-e: name == "invoice_item": speciális keresés a számlatételekben (lásd lent). különben az income adott mezőjében (str) történő egyezés: regex (case-insensitive), Csak ha income.income_json elérhető és integráció típusa ismert. Több tétel esetén, ha skip_for_multiple_match: true és több különböző érték illeszkedik, skip. copy mód (lásd lejjebb) esetén a legutolsó illeszkedő értéket adja vissza. Ha a policy-ban data.copy szerepel, akkor a tételmezőből kimásolt értéket állítja be a megadott kulcshoz. Egyébként a data kulcsai közvetlen beállításra mennek. Támogatott beállítások (POLICY_DATA_MAP): revenue_type → automatikus RevenueType felvétel/hozzárendelés (minden assignment-re), Eseménynapló: minden alkalmazott/skipelt policy esemény EventLogService-en keresztül logolva. Ignore/Check policy – előszűrés
Az ignore_policies külön modulban/folyamatban igazítja el, hogy mely számlákat kell egyáltalán figyelembe venni (bemeneti szűrés). A séma a cég income_policies részében „ignore_policies” alatt adható meg; a kulcsok az invoice_data mezőnevei és beágyazott kulcsok (pl. partner.name, issuer.tax_number) is használhatók. A logika támogat OR-t (több feltétel közül bármelyik), összetett mezőket és tipikus számlamezőket (deviza, fizetési mód, dátumok stb.). A 2–4. oldal táblázatai részletezik a használható mezőket a fő objektumban és a partner/issuer beágyazott objektumokban.
Integrációk kezelése
create_szamlazz_integration(...) / create_billingo_integration(...): hozzárendel egy integrációs azonosítót az adott income-hoz. get_integration_id_of_type(income, integration_type): visszaadja az adott típusú integrációs ID-t, akkor is, ha az income fő integrációtípusa eltér (keres korábbi kapcsolást). A Számlázz.hu integráció célja a számlák és fizetettség szinkronja, a NAV-ból érkező szállítói számlák átvétele (Számlaverzum), valamint a jogszabályszerű archiválás biztosítása. A Billingo kimenő számlák szinkronja és – Számlaverzum jelenlétében – a képarchiválás is támogatott (leírás, előfeltételek és limitációk: támogatott csomagok, Számlaverzum szerepe).
Listázás, jogosultság, riport-előkészítés
IncomeService.list_for_company_user(company_user) Csak az adott cég bevételei. Prefetch: income_assignments rendezett betöltése. membership.not_allowed_revenue_type_ids → az inkompatibilis revenue type-ok kizárása. membership.allowed_tags → csak az engedélyezett címkékhez tartozó tételek (annotate+filter). IncomeQueryService().annotate_origin(queryset) → eredet jelölés (pl. e-mail, NAV, Számlázz.hu), riportokhoz. Intercom FIN AI – tipikus kérdések:
„Miért nem látom a bevételt?” → Nem a felhasználó cégéhez tartozik; kizárt revenue type; nem engedélyezett tag; az ignore_policies kiszűrte; vagy még nem jött szinkronból. Kifizetések és maradvány
sum_of_payments(income) → IncomePayment aggregátum (NULL→0). outstanding_amount(income) → max(gross_amount − sum_of_payments, 0). outstanding_amount_for_payee(income) → fillérben (×100) ad vissza összeget. Használati esetek:
Utaláskönnyítő, kintlévőség lista, „fizetettség” ellenőrzés (a Számlázz.hu-ból érkező állapottal együtt). Felhasználói bevitelek „auto-kiegészítése”
create_auto_data_for_user_created_incomes(income, data) Ha nem integrált számla és nincs file, csak kézi rögzítés: income_type: átveszi az income.income_type-ot, ha a deviza a cég alapdevizája, akkor exchange_rate = 1.00. Policy JSON – séma és példák
1) Cégszintű policy keret (v2)
Megjegyzés: A fenti minta illusztrálja a v2 logikát: policies[] elemenként policy[] feltételek (AND, vagy operator: "OR"); a data.copy esetén a tételmező kimásolt értéke használható beállításhoz. A tételmezők kulcsai a Számlázz.hu/Billingo integrációknál a service által hivatkozott map-ból kerülnek. (A használható számlamezők és beágyazott kulcsok példái az ignore policy dokumentumban, 2–4. oldal.)
2) Ignore policy – célzott előszűrés (példák)
Partner név és deviza együtt (AND): Számlaszám VAGY deviza (OR): Lásd a részletes mezőlistákat (invoice_data + partner, issuer) és példákat a dokumentum 1–4. oldalán.
Döntési/mérési pontok és naplózás
Többszörös találat kezelése: Globális skip_for_multiple_match → minden assignment revenue_type törlődik, EventLog: „Multiple policies found”. Tételkeresés skip_for_multiple_match → ha több különböző tételérték passzol, az adott policy nem alkalmazódik. Tipikus hibaokok & elhárítás (Intercom/FIN AI gyorsválasz)
„Nem állt be a revenue type / tag” ignore_policies miatt a számla kimaradt a feldolgozásból. A v2 policy feltételei nem teljesültek (AND/OR félreértés). private_person_indicator nem egyezett → teljes skip. skip_before_date / skip_for_payment_method / skip_if_multiple_items aktív volt. Tétel-keresésnél több különböző találat és skip_for_multiple_match: true. income.income_json hiányzik (nem integrált/feldolgozott számla) → tétel-keresés nem fut. „Eltűntek a revenue type-ok” Globális skip_for_multiple_match és többszörös illeszkedés → a service explicit revenue_type=None-t állít az assignment-eken (védekező megoldás). „Hiányzik az archivált számlakép/NAV adatok” Számlaverzum nélkül nincs NAV-adatlekérés és jogszabályszerű archiválás. „Nem látom a bevételt a listában” Céges szűrés, nem engedélyezett tag vagy kizárt revenue type a felhasználó tagsága alapján. „Eredet” (origin) annotáció alapján ellenőrizd a beérkezési csatornát (NAV/e-mail/Számlázz.hu). „Maradvány összeg nem stimmel” sum_of_payments csak a rögzített kifizetéseket számolja; ha fizetés jött integrációból, ellenőrizd a szinkront és az érték bruttó vs nettó értelmezését (outstanding = bruttó – kifizetések). Gyors referencia – Intercom FIN AI kivonat
Cél: Bevételek automata kategorizálása és címkézése policy-k alapján. Fő beállítás: income_policies (v2): ignore_policies → bemeneti szűrés; policies → beállítások (revenue_type, tag[s]) regex/begins/contains + (OR) operátor; tételkeresés (Számlázz/Billingo map). Kritikus flag-ek: private_person_indicator, skip_for_multiple_match, skip_before_date, skip_if_multiple_items, skip_for_payment_method.