Prognos på intäkter via Fortnox Avtal

Fortnox saknar den enkla funktionen att skapa en prognos på datan som finns i Fortnox Avtal.

Det går att manuellt ta fram framtida intäkter via Fortnox Avtal. Fortnox har dock bestämt sig för att det är en bra idé att summera EUR som SEK och visa totalsumman på avtalen i inkl moms.

Kan Enhanza hjälpa till med detta?

1 Like

Hej @Oscar!

Tack för din fråga! I dagsläget hämtar vi inte data från Fortnox Avtal. Det har helt enkelt inte funnits en efterfrågan från kunderna.

Avtalsfakturor istället för avtalen?

Vad som däremot redan nu är möjligt, och som vi själva gör för att analysera våra abonnemang, är att använda perioden på genererade avtalsfakturor för att analysera historik och nuläge.

Två alternativ

Ni har, som jag ser det, två alternativ:

  1. Använda perioder från redan skapade avtalsfakturor som exemplet ovan.
    Då delar vi gärna med oss att den datamodell (SQL-fråga) som vi själva använder för det.

  2. Begära att vi inkludera Fortnox Avtal i vår integration. Då behöver ni vara med och finanseria en del av den utvecklingen.

Vilket alternativ skulle passa er bäst?

Tack för snabbt svar @Jon.

Du får väldigt gärna dela er datamodell!

1 Like

Nedan kan du se den datamodell som vi använder för att visa historisk och aktuell avtalsfakturering.

Först hämtar vi alla avtalsfakturor med start- och slutdatum. Ni behöver kanske laborera med Quantity utifrån era artiklar; om ni fakturerar flera månader på en gång och om antalet är fler än 1.
Givetvis behöver ni välja era artikelnummer osv.

I nästa steg skapar vi en serie av månader utifrån fakturerade perioden.

Lycka till! Hör av dig om ni kör fast! :nerd_face:

Ps. Testkör i Google Bigquery innan ni använder den i Data Studio.

with i as (
  select
    i.InvoicePeriodStart,
    i.InvoicePeriodEnd,
    r.ArticleNumber,
    --if(r.DeliveredQuantity < 0, -1, 1) * r.DeliveredQuantity / r.DeliveredQuantity as Quantity,
    r.DeliveredQuantity as Quantity,
    if(r.DeliveredQuantity < 0, -1, 1) * r.price
    -- Convert from foreign currency to SEK
    * i.CurrencyRate *
    -- Apply any % discount rows
    IF (
      DiscountType = "PERCENT",
      1 - r.Discount / 100,
      1
    )
    -- Apply any amount discount rows
    - IF (
      DiscountType = "AMOUNT",
      r.Discount,
      0
    ) Value,
    IF (
      DiscountType = "AMOUNT",
      r.Discount,
      0
    ) Discount,
    i.ContractReference,
    i.CustomerName,
    i.DocumentNumber
  from
    `enhanza-elt.fortnox_api.invoices` i
    cross join UNNEST(InvoiceRows) r
  where
   Cancelled is false
    and ArticleNumber in("111","1001","1002")
)
select
  a as Month,
  ArticleNumber,
  safe_divide(sum(i.Quantity),sum(i.Quantity)) as Quantity,
  sum(i.Value) as Value,
  min(Discount) as Discount,
  CustomerName
from
  i
  cross join UNNEST(
    GENERATE_DATE_ARRAY(
      InvoicePeriodStart,
      InvoicePeriodEnd,
      INTERVAL 1 MONTH
    )
  ) a
group by
  Month,
  CustomerName,
  ArticleNumber
order by
  Month desc,
  CustomerName
1 Like

Tack för det @Jon. Testar och återkommer!

Har ni möjlighet att hjälpa med detta? @jonshubeli

Hej @Oscar!

Absolut! Tack också för samtalet med de vidare detaljerna kring era behov.

Vi kommer per er beställning att tillgängliggöra all data för Fortnox avtalsfakturering som Fortnox publicerar i sitt API.

Därefter kommer vi på ert uppdrag utveckla en datamodell (SQL) som ger er en prognos av framtida intäkter från aktiva avtal i Fortnox. När ni sagt upp ett avtal kan ni ändra “löpande” till fast angivna månader fram till avtalets upphörande.

1 Like

Det ska bli spännande att se resultatet! :rocket: :rocket:

1 Like

Hej @Oscar!

Det flyter på bra här. Utveckling och implementering av Fortnox avtalsfakturering är klar och vi har redan påbörjar datamodelleringen.

Jag dock en ambition om att även implementera datamodellen i våra Fortnox-integration i Looker Studio. Så ge oss några dagar till så blir slutresultatet ännu bättre än att ni bara får tillgång till en SQL-kod.

Vi har dock stött på en utmaning.

Era kontrakt skapas i olika valutor. För att få en enhetlighet och jämförbarhet antar jag att ni önskar samtliga belopp i samma valuta, typ SEK?

Man skulle kunna hämta dagsaktuell valuta, men den säger ju kanske inte mycket om framtiden vilken denna rapport syftar till att prognostisera. Samtidigt är det kanske “best guess”?

Jag föreslår två alternativ:

  • Ni skapar en parameter i en Looker Studio rapport där ni själv anger en prognostiserad valutakurs per valuta.
  • Vi utvecklar en koppling med en valutatjänst som använder dagens kurser för att prognostisera framtidens.

Ni skapar en parameter i en Looker Studio rapport där ni själv anger en prognostiserad valutakurs per valuta.

Det låter rimligast. Tack för tydlig förklaring @Jon.

Grymt. Klokt val. Stay tuned. :speaker:

Hej @Oscar! Vi håller på med datamodelleringen av prognosen från intäkter via Fortnox Avtal.

Ett avtal kan ju ha olika intervall, alltså avse olika antal månader per faktura.

Vår tanke är att fördela alla prognostiserade intäkter per månad, oavsett angivet intervall. Alltså, om ett kontrakt har ett intervall på 12 månader kommer en 1/12-del av intäkten fördelas över perioden. Annars bedömer vi att det blir för ryckigt.

Känns det okej för er också?

Det låter bra @jonshubeli :+1::+1:

1 Like

Grymt. Då kör vi på det. :mechanical_arm:

Återkommer!

Hej där @Oscar! Nu är vi klara. :partying_face:

Vi är sjukt nöjda med resultatet. Hoppas att ni också ska ska vara det.

All tillgänglig data kopplat till Fortnox Avtalsfakturering finns nu i sin råaste form i:
enhanza-elt.fortnox.contracts.

Utöver att tillgängliggöra datan har även skapat en datamodell som, utifrån aktuella avtal, presenterar framtida intäkter. Om avtalet faktureras på flera månader i taget (Fakturaintervall > 1) fördelar modellen intäkterna jämnt över varje månad. Det ger en mycket bättre bild över flödet, tyckte vi.

Vi har även implementerat datamodellen i vår generella Fortnoxrapport i Looker Studio. Kolla gärna in den. :eyes: Se exempel nedan.

Spännande! Vi testar och återkommer! :star_struck:

1 Like