Intern översikt · Florister i Sverige × N3O Vision · dold för sökmotorer

Systemkartan — allt som är kopplat till Florister i Sverige

Syftet: se hela maskineriet på en bild. Vad som hänger ihop med vad, vem som äger det, vad det kostar — och vad ingen av oss vet än.

De röda rutorna är hål — frågor som inte ställts än, inte problem. Fyller vi dem tillsammans blir kartan sanningen om företaget, och då kan ingenting överraska oss i en flytt.

De fem hål kartan ritades med är alla fyllda (Alex 9–10/8). Kvar i rött står bara kyrkoregistret, och det är inte en obesvarad fråga utan en beställning på väg: registret är FiS egen data men finns bara hos WGR tills exporten är gjord.

🆕 Rosa rutor är inte längre planer. Nybygget gick från ingenting till en körande plattform 12–18 augusti: medlemsportal med inloggning, fyra beställningsingångar, FiS eget admin, avräkning, presentkort, marknadsplats — och ett konsumentskyltfönster vars kassa lägger riktiga ordrar. Allt mot påhittad data och dolt för sökmotorer. Logga in och se: <https://fis-portal.n3ovision.com> (butik ARE01 / ng64-rnwg-udzh, admin fis / 4p7n-xb3m-jbsj) och <https://nyafis.n3ovision.com>.

Bilden ritas automatiskt av GitHub — du behöver inget program för att se den.


100 %
flowchart TB
    subgraph kunder["Så kommer ordrarna in"]
        K1["Konsument<br/>floristerisverige.se"]
        K2["Ansluten butik<br/>lägger förmedling"]
        K3["Telefon till butik"]
    end

    subgraph plattform["Plattformen — Wikinggruppen"]
        P1["Butiken<br/>floristerisverige.se"]
        P2["Ordermotorn<br/>FIS + FISK"]
        P3["Floristportalen<br/>344 butiker"]
        P4["Postnr-zoner<br/>+ stopptider"]
    end

    subgraph pengar["Pengarna"]
        B1["Kort / Swish / Klarna"]
        B2["Swish Handel<br/>direktavtal"]
        B3["Avräkning den 7:e<br/>80 / 12 / 8"]
        B4["Presentkort<br/>12 % sälj / 80 % inlösen"]
        B5["Fortnox<br/>tvåvägssynk"]
    end

    subgraph marknad["Marknadsföring"]
        M1["Google Ads<br/>50-80k/mån"]
        M2["Extern byrå<br/>6k/mån"]
        M3["Get a Newsletter<br/>56 000 prenumeranter"]
        M4["GTM"]
        M5["Merchant Center<br/>FiS eget konto"]
    end

    subgraph data["Data och infrastruktur"]
        D1["Loopia<br/>domäner + DNS"]
        D2["Google Workspace<br/>e-post"]
        D3["Valid API<br/>1 795/mån — ersätts"]
        D4["Cookiebot"]
        D5["Affiliate-cookie<br/>_aff_cid"]
        D6["68 satellitdomäner"]
        D7["Kartanalys<br/>zonfil, 25 000/år"]
        D8["Kyrkoregistret<br/>4 201 platser — hos WGR"]
    end

    subgraph nytt["Nybygget — N3O (live sedan 12-18/8)"]
        N1["Konsumentsajten<br/>499 sidor"]
        N2["Ordermotorn<br/>80/12/8, stopptid, moms"]
        N3["Kassan"]
        N4["Adresslagret<br/>egen adressfil"]
        N5["Medlemsportalen<br/>inloggning + roller"]
        N6["FiS admin<br/>butiker, notor, kyrkor"]
        N7["Avräkningen<br/>faktura = avräkning"]
        N8["Presentkorten<br/>deposition = tak"]
        N9["Marknadsplatsen<br/>allt lagrat netto"]
        N10["Utrikes<br/>land i stället för postnr"]
        N11["Satser per butik<br/>sätts i FiS admin"]
    end

    K1 --> P1
    K2 --> P3
    K3 --> P3
    P1 --> P2
    P3 --> P2
    P2 --> P4
    P4 --> P3
    P2 --> B1
    B1 --> B2
    P2 --> B3
    P2 --> B4
    B3 <--> B5
    M1 --> P1
    M2 -.sköter.-> M1
    M4 --> M1
    M5 -.produktannonser.-> M1
    M3 -.utskick.-> K1
    D1 --> P1
    D3 --> P1
    D7 --> P4
    D4 --> P1
    D5 -.utanför samtycke.-> P1
    D6 -.länkar in.-> P1
    D2 -.orderbekräftelser.-> K1
    D8 --> P2

    N1 --> N3
    N3 --> N2
    N4 --> N3
    N5 --> N2
    N10 --> N2
    N9 --> N7
    N2 --> N7
    N8 --> N7
    N6 --> N11
    N11 --> N7
    N6 -.sköter.-> N5
    D7 -.adressfil, beslut 10/8.-> N4
    N1 -.ersätter.-> P1
    N2 -.ersätter.-> P2
    N5 -.ersätter.-> P3
    N4 -.ersätter.-> D3
    B5 -.synk kvar att bygga.-> N7
    D8 -.export 25/8.-> N2

    classDef hal fill:#fde2e4,stroke:#c9184a,stroke-width:2px
    classDef byts fill:#fff3cd,stroke:#b98a3c
    classDef behalls fill:#e4ebe2,stroke:#2e5641
    classDef nybygge fill:#f9ecf1,stroke:#b2506e,stroke-width:2px

    class D8 hal
    class P1,P2,P3,P4,D6,D3 byts
    class D2,B2,B5,M1,M3,D1,D7,M5,D5 behalls
    class N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11 nybygge
Dra för att flytta · knapparna eller Ctrl+scroll för att zooma · Esc stänger helskärm.

Färgerna: röd = hål vi behöver fylla · gul = byts ut när nya sajten tar över · grön = behålls som det är · rosa = det nya bygget.


FIS och FISK — två skyltfönster, en motor

Förtydligat av Alex 7/8. Systemgenomgången från 17/7 beskrev FIS för smalt.

fraktinformation, fakturor och avräkningar. Hela deras back-office.

Ordernummerserierna är två (i-prefix = FISK, utan prefix = FIS) och samma order kan öppnas i båda. Det är alltså inte två system utan två ingångar till samma maskineri.

Och FiS är själva tre butiker i sitt eget system (Alex 9/8): FISK är Butik A (konsumentordern läggs därifrån), Skicka vidare är Butik B (tar postnummer ingen annan täcker), Utrikes är Butik B (utlandet). Därför finns inga specialfall i ordermotorn — allt är vanliga förmedlingar mellan butiker, även webbordern. Elegant, och något nybygget bevarar rakt av.

Nybygget speglar numera BÅDA. Fram till 13/8 fanns bara FISK-halvan, för spegeln byggs ur den publika sitemapen och en inloggad medlemssajt hamnar aldrig där — portalen måste beskrivas inifrån i stället. Så gjordes det: FIS-halvan är byggd ur manualen och ur Alex egen genomgång av WGR-adminet, skärm för skärm. Därmed är den sista spärren mot en riktig växling borta — tidigare gick annonstestet att köra utan portalen, men själva bytet krävde den, annars hade skyltfönstret bytts ut medan butikerna stod utan sitt kontor.

Och FiS tre roller finns kvar som roller, inte som kod. FISK är Butik A, Skicka vidare och Utrikes är Butik B — i nybygget är de nivåer i butiksuppslaget, och FiS butiks-id förekommer inte i regelkoden. Ett test läser källan och kräver det. Dagen en medlem själv börjar köra till Oslo fungerar det utan en kodändring.

Kopplingarna, en rad var

Fyll i det du vet. Vet du inte — skriv "vet inte", det är också ett svar och bättre än en gissning.

KopplingVad den görVem ägerKostnadLäge
WikinggruppenPlattform + utvecklingWGR äger kod och design10 000/mån1 mån uppsägning. Separat plattformsavtal ej inhämtat
LoopiaDomäner, DNS, SitebuilderLB E-handel~300/mån~68 domäner. Flera förfaller aug–okt
Google WorkspaceE-postLB E-handelBehålls, rörs inte
Get a NewsletterNyhetsbrevLB E-handel27 900/år56 000 prenumeranter, noll automationer
Google AdsAnnonserLB E-handel (bekräftat 29/7)50–80k/mån spendROAS 900 %. Historik följer med vid flytt
Extern byråSköter annonserna6 000/månInte WGR
GTMTaggarLB E-handel (bekräftat 29/7)Följer med
Merchant CenterProduktannonserLB E-handel (konto 212913883, bekräftat 10/8)Byrån har endast e-poståtkomst → annonseringen följer FiS vid flytt. Adminkontot är en Gmail-adress, inte domänbunden
Valid (Postnummerservice)Adress-autocomplete i kassanLeverantör: Valid1 795/månLive-uppslag, träfftak 500. Ersätts av egen adressfil — beslut 10/8, N3O bygger uppslaget
KartanalysZonfilen (postnr, månadsvis) + kartverktygetLB E-handel, årslicens25 000/årBehålls. Offert på gatuadressfil (~3,8 milj rader) väntas — då försvinner Valid
FortnoxBokföring, fakturor, avräkningarLB E-handelTvåvägssynk: FIS skickar fil → Fortnox fakturerar → banken → betalstatus tillbaka → bockas av automatiskt. Följer med
CookiebotSamtyckeLB E-handelReglagen lösta 3/8
Affiliate _aff_cidSpårningKlirly (nytt, bekräftat 10/8)Andra affiliateprogrammet vid sidan av Tradedoubler. Cookien sätts före samtycke — avhandlat med Klirly, Alex beslut att låta stå
Swish HandelBetalningLB E-handelDirektavtal + via Stripe. Portabelt
Kort / Klarna m.fl.BetalningStripe, bakom Kustom Checkout (bekräftat 10/8)Bär kort, Klarna, Billie, Apple/Google Pay och Swish. Klarna är tvåstegs — pengarna fångas först vid leverans (sett 9/8)
PresentkortEget delsystemLB E-handelKartlagt 9/8, byggt 17/8: fysiska kort, deposition = maxgräns, saldot nollställs den 1:a. Modellerat som en förmedling: 12 % till säljande, 80 % till inlösande butik. Momsen ligger på två nivåer (avgjort av Alex 16/8): kortet 0 % — ett värdebevis, inget byter ägare — och provisionen 25 %, för den är en tjänst butiken utför åt FiS. Bygget räknar som juli-fakturan på öret
AvräkningUtbetalning till butikerLB E-handelLåses den 7:e. 80 % utförare / 12 % beställare / 8 % FiS. Faktura och avräkning är samma dokument — nettot avgör. Förfaller 17:e (in) / 27:e (ut)
KyrkoregistretKyrka → postnummer vid begravningFiS data — men bara hos WGR4 201 platser, byggt av Alex för hand. Export begärd; WGR:s programmerare tillbaka 25/8 — då tas leveransområden, kyrkor och bilder i ett svep. Butiksexporten finns redan som knapp
European FloraSkicka vidare utomlandsNämnd i systemgenomgången 17/7
TrustpilotOmdömenProfil finns men syns inte på sajten

Pengarna på en order

⚠️ Alex — läs den här delen extra noga. Den är skriven efter Seos genomgång 7–8 augusti, alltså andrahandsuppgifter. Står det något fel här bygger vi fel saker. Rätta rakt i texten, eller säg till din Claude så gör den det.

100 %
flowchart LR
    KUND["Kund betalar"] --> ORDER["En order"]
    ORDER --> PV["Produktvärde"]
    ORDER --> BUD["Budavgift"]
    ORDER --> TILL["Tillbehör<br/>kort, choklad, vas"]

    SATS["Satser per butik<br/>80/12/8 är standard"] -.sätter satserna.-> PV

    PV --> U["Utförande butik<br/>80 %"]
    PV --> B["Beställande butik<br/>12 %"]
    PV --> F["FiS<br/>8 %"]
    BUD --> U2["Utförande butik<br/>100 %"]
    TILL --> U3["Butiken får<br/>HELA sitt pris"]
    TILL --> F2["FiS lägger 10 kr<br/>OVANPÅ mot kund"]

    classDef butik fill:#e4ebe2,stroke:#2e5641
    classDef fis fill:#f9ecf1,stroke:#b2506e
    class U,B,U2,U3 butik
    class F,F2,SATS fis
Dra för att flytta · knapparna eller Ctrl+scroll för att zooma · Esc stänger helskärm.

Reglerna i ord:

(Verifierat 9/8 mot en skarp faktura: 12,0 % på öret.)

får den 100 kr.

konsumenten. Sätter butiken presentinslagningen till 30 kr betalar kunden 40, och butiken får sina 30. ⚠️ Rättat 13/8: vi skrev tidigare "butiken får allt över 10 kr", vilket beskrev ett avdrag. På just 40-kronorsexemplet blir utfallet detsamma, men på ett kort satt till 15 kr skiljer det: butiken får 15, inte 5. Det är ett påslag, inte en avdragspost.

konsumentordrar. FiS tar alltså tre saker av konsumenten utöver produktvärdet: 45 kr på frakten, 10 kr per tillbehör, 12 kr serviceavgift. Aldrig vid butik-till-butik. Avgiften hänger inte på någon vara — den måste in i den nya kassan medvetet, annars försvinner den tyst.

och därmed även de 12 % — för FISK är en butik i systemet (Butik A).

De 45 kronorna — vad de faktiskt är

45 kr är FiS eget konsumentpåslag på budet. Butiken sätter den aldrig, och den tas från kunden — inte från butikens ersättning. Det är hela poängen med den: utan den hade pengarna behövt tas ur butikens del.

Butiker som själva beställer via konsumentsidan möter avgiften och undrar över den. Det är begripligt — den står som en egen rad, och en egen rad inbjuder till frågan.

Beslutat 8/8: frakten visas som EN rad — "Frakt 145 kr". Uppdelningen (butikens budavgift + FiS 45) finns kvar i ordern och i avräkningen, men syns inte i kassan. Villkorstexten skrivs om så att den stämmer med vad kunden faktiskt ser.

Det var den itemiserade raden som skapade frågan — och som gjorde att tanken på en helt ny sajt kom upp, ett ställe där summan bara står. Med en rad försvinner skälet, och ingen behöver bygga och underhålla ett andra skyltfönster.

Så löser vi det i nya sajten: priset visas som ett tal med påslaget inbakat. Ingen rad som heter "budavgift 45 kr". Ingen ringer och frågar varför en bukett kostar 440. Pengarna ligger kvar hos FiS, butikens del är oförändrad — det enda som ändras är att ingen behöver förklara siffran igen.

Samma text ska ligga som svar i butiksportalen, där frågan faktiskt ställs.

Kanaler — samma motor, olika skyltfönster

I stället för att bygga en ny sajt varje gång priset ska visas annorlunda får motorn ett kanal-begrepp: samma katalog och samma butiker, men egen prislista och egna avgiftsregler per kanal.

KanalPris visasPåslagBeställande butik
Konsumentmed 45 inbakatFiS 45 kringen — FiS tar rollen
Butik (inloggad)butikens villkoringetbutiken, 12 % kvar
Lyx (idé)egen prislistastörreöppet

Att lägga in det medan motorn är ung kostar en dag. Att gänga in det i en färdig kassa kostar en månad.

Lyxspåret — en idé värd att testa

Tanken: en egen ingång för den som vill lägga 5 000–10 000 kr på blommor, med större påslag. Varorna finns redan — i dagens katalog ligger Schefflera på stam för 6 999 kr, Strelitzia Augusta för 5 999, Arecapalm XXL för 5 499, och 149 produkter har redan "eget belopp". Ingen visar dem för rätt person; de ligger begravda i en katalog byggd för 395-kronorsbuketten.

Vad som krävs innan det kan sälja: riktiga foton på utfört arbete, namngiven florist, ett telefonnummer som svarar och en garanterad tid. Stockbilder och stopptid 13:00 konverterar inte en order på 8 000 kr.

Billigaste testet: tio av de dyra produkter som redan finns, en sida, lite betald trafik på "blommor till kontor" och "stor bukett begravning". Mät ordervärdet innan något byggs.


🔑 Nybygget — vad som faktiskt finns (18/8)

Rosa rutor i kartan ovan. Allt går att logga in i, allt kör mot påhittad data, allt är avstängt för sökmotorer i tre lager. Dagens system påverkas inte.

AdressVadInloggning
<https://fis-portal.n3ovision.com>Medlemsportalen + FiS adminbutik ARE01 / ng64-rnwg-udzh · admin fis / 4p7n-xb3m-jbsj
<https://nyafis.n3ovision.com>Konsumentsajten, 499 sidor

Butikens fyra ingångar — inrikes, begravning (kyrksök med ordnormalisering), utrikes (land i stället för postnummer, egen typ för utrikesbegravning) och Marknadsplatsen (inköp från grossister). Plus mottagna/skickade, orderdetalj, presentkort, skicka vidare och hela Mina sidor.

FiS admin — butiksregister, notor och avräkningar, ordrar presentkort med saldovyn, leverantörer och deras avräkning, saknade kyrkor, sökordstabellen, postnummerdiffen. Sedan 20/8 sätts också butikens satser här — de tre rollernas och presentkortens två — i stället för i databasen direkt.

Tre fel i dagens system som bygget inte upprepar

Att bygga visade sig vara den bästa granskningen av specen.

  1. 1. Fraktens moms glider när satsen ändras. Dagens system lagrar varorna netto men

frakten brutto. Vid sänkningen 12 → 6 % den 1 april räknades fraktens bruttotal tillbaka med den nya satsen — 5,60 kr per order, utan att någon rört ett pris. Den 31 december 2027 vänder felet åt andra hållet. I bygget lagras allt netto, och det är ett villkor i databasen som gör om felet omöjligt, inte en konvention.

  1. 2. Orderbekräftelsen visar andra tal än kassan — hittad av Alex själv. Bekräftelsen

visar radbeloppen inkl moms, kassan ex. Bekräftelsen är den som hamnar i bokföringen hos båda parter. I bygget renderas den ur samma tal som kassan.

  1. 3. Presentkortsprovisionens momssats. Se raden i tabellen ovan — avgjord av Alex

16/8, byggd 17/8.

Punkt 1 och 2 ligger på WGR-listan till 25 augusti.

Vad som inte är byggt än

E-post- och SMS-mallarna (~35 stycken, namnen kända men inte texterna — de finns hos WGR) · Fortnox-synken (kräver API-nycklar) · import/export-navet och de ~40 redigerbara CMS-ytorna · det riktiga kyrkoregistret och leveransområdena (25/8) · adressfilen från Kartanalys, där uppslaget är byggt och bara väntar på filen.

✅ Alla fem hål är fyllda

Kartan hade fem röda rutor när den ritades 7/8. Alla är besvarade av Alex, på fem dagar — två i helgens genomgång (9/8), tre dagen därpå (10/8):

HåletSvaret
PostnummertjänstenValid, live-uppslag med träfftak — ersätts av egen adressfil
Presentkorten12 % till säljande, 80 % till inlösande — modellerat som en förmedling
Merchant CenterFiS äger och administrerar kontot själva. Byrån har endast e-poståtkomst som teknisk kontakt — de kan inte ta med sig kontot
Kort och KlarnaStripe bär kort, Klarna, Billie, Apple/Google Pay och Swish. Dessutom Swish Handel direkt på FiS eget avtal — två vägar för Swish
Affiliate-cookienKlirly, ett nytt samarbete vid sidan av Tradedoubler. Avtal finns

Det är det kartan är till för. Ingen av de här fem gick att svara på ur kod eller data — de fanns bara hos den som visste. Nu står de skrivna.

Nästa gång något nytt kopplas på: skriv in det här medan det är färskt, så förblir kartan sanningen om företaget.

> En sak att ha i bakhuvudet vid flytten, ingen brådska: Merchant Center-kontot > administreras från ett Gmail-konto, inte en adress på FiS egen domän. Det > fungerar, men ett affärskritiskt Google-konto på en gratisadress saknar den > återställningsväg en domänbunden organisation ger.

Sidan är genererad ur karta/SYSTEMKARTA.md i repot och uppdateras av sig själv när kartan ändras. Ändra i markdown-filen, inte här.