Onderwerp: Kantoor: effectief uurtarief houdt rekening met je omzetbudget uit AdminPulse
Samenvatting
Het effectief uurtarief in de widget voor "Diensten met budgetten per klant" zal rekening houden met het omzetbudget dat je al in AdminPulse hebt ingesteld, in plaats van dat bedrag altijd zelf te herberekenen op basis van het facturatieschema.
Beschrijving
Voor klanten met een forfait- of voorschotfacturatieschema berekent Finibase vandaag de jaaromzet altijd zelf, op basis van het bedrag en de frequentie van het facturatieschema. Als je in AdminPulse echter al een expliciet omzetbudget hebt ingegeven voor dat schema, negeert Finibase dat bedrag volledig.
Dat kan een verschil opleveren wanneer het omzetbudget in AdminPulse handmatig is aangepast of andere veronderstellingen gebruikt dan een eenvoudige herberekening. We passen de berekening van het effectief uurtarief aan zodat ze het omzetbudget uit AdminPulse gebruikt wanneer dat beschikbaar is, en enkel terugvalt op de herberekening op basis van het facturatieschema wanneer er geen omzetbudget is ingesteld.
Internal notes
- Gerapporteerd door B&DS (Tim Verbestel), letterlijke actiepunt-notitie uit de Onboarding II-sessie van 2026-09-02: "Berekening effectief uurtarief --> op basis van omzetbudget indien beschikbaar."
- Root cause (code-analyse): de "schedule"-basis van
buildEffectiveRateBreakdown()(src/features/dashboards-content/firm/widgets/customer-service-budgets/get-effective-hourly-rate.ts:78-144) rekent metscheduleAnnualAmount(klantOmzet), dat inresolveGroupRevenue()(build-customer-budget-rows.ts:1328-1353) voor forfait/voorschot/gemengd-klanten volledig komt uitcontext.invoiceScheduleAmountByGroupRoot. - Die map wordt gevuld door
fetchInvoiceScheduleAnnualAmountsPerRelation()(aggregate-from-invoice-schedule-amounts.ts:162-252), die de jaaromzet ALTIJD zelf herberekent alsSUM(invoiceSchedules.amount × effectiveLines × proRateFactor), zonder ooit debudgets-tabel te raadplegen. - AdminPulse synct nochtans wel degelijk een expliciet omzetbudget per
(invoiceScheduleId, year)naar debudgets-tabel (src/db/adminpulse-integration/schema.ts:1201-1224, kolomturnover), en dat veld wordt al op meerdere andere plekken gelezen als "het AdminPulse-omzetbudget":advance-payments-settlement/get-advance-payments-data.ts:346,lump-sum-post-calculation/get-lump-sum-data.ts:361,budget-analysis/get-budget-analysis-data.ts:335,customer-evolution/get-customer-evolution-data.ts:344,get-lump-sum-export-data.ts:1552. Binnen customer-service-budgets zelf wordt van diezelfde tabel vandaag enkelbudgets.hoursgelezen (aggregate-from-adminpulse-budgets.ts, voor de uren-gebaseerde bulk-init-bron), nooitbudgets.turnover. - Voorgestelde fix-richting (te bevestigen bij implementatie): in
fetchInvoiceScheduleAnnualAmountsPerRelation()(of een nieuwe sibling-fetch ernaast), voor elk(invoiceScheduleId, calendarYear)eerst controleren of er eenbudgets-rij met een positieveturnoverbestaat; zo ja, dat bedrag gebruiken alsannualAmountin plaats van de herberekening op basis vaninvoiceSchedules.amount. Enkel terugvallen op de bestaande pro-rate/lines-herberekening wanneer er geen (of een lege)budgets-rij is voor dat jaar. Nagaan of dezelfde voorkeur ook moet doorwerken naar de bulk-init "from invoice-schedule amounts"-bron (expandInvoiceScheduleAmountsByServiceConfig), die dezelfde per-relatie rijen hergebruikt. - Bron: Leexi-transcript "B&DS x Finibase - Onboarding II" (2026-09-02).