Gå til innhold

EG Retail-import

EG Retail er kassesystemet (POS) på de bemannede stasjonene. ConnectMonitor importerer salg, svinn og lagertall derfra inn i Visma Business som bilag.

Konsollen (Program.cs) er bare en tynn utløser — all forretningslogikk ligger i Visma-business-prosjektet, i klassen EGAccountingController (jhlVismaAPI.Business.EG, ~887 linjer).

Datakilde: EG sin Azure-database (ikke API)

EG-dataene leses med direkte SQL mot en Azure SQL-database (AzureSQL_‹selskap›), ikke via REST. Visma-siden skrives via Visma Business Services (CreateVismaVoucher). To datalag: SQLRepoAzure (EG/POS) og SQLRepo (Visma).

Azure-tabell (EG) Brukes av
vju_ReportItems (ReportTypeID=1) Salg (--egImport / --egDateImport)
vju_ReportWasteItems (ReportTypeID=4) Svinn (--egWasteReport)
vju_ReportInventoryItems (ReportTypeID=6) Telleliste (--egInventoryAdjustment)
reports, groups Metadata + varegruppehierarki

Flyt (felles mønster)

flowchart LR
    WM[StrFVar-vannmerke<br/>ConnectMonitor] --> AZ[Les EG Azure-SQL<br/>ReportID &gt; vannmerke + StationID]
    AZ --> GRP[Grupper pr dato + varegruppe] --> VAL{Varegruppe finnes i Visma R8?}
    VAL -->|nei| NEW[Opprett i R8 + e-postvarsel<br/>«sett konto manuelt»]
    VAL -->|ja| BILAG[Bygg bilag - voucher/voucherline]
    NEW --> BILAG
    BILAG --> SEND[CreateVismaVoucher] --> UPWM[Oppdater vannmerke]

    classDef sys fill:#f8d7da,stroke:#b53b46
    class AZ,GRP,VAL,NEW,BILAG,SEND,UPWM sys

Felles: les vannmerke → hent EG-rader med ReportID > vannmerke for stasjonen (StationID) → grupper per dato/varegruppe/hovedgruppe → valider mot Visma R8 (opprett ny varegruppe + varsle hvis ukjent) → bygg bilag → CreateVismaVoucher → oppdater vannmerke. Idempotens sikres av ReportID > vannmerke.

Jobbene

Salg — --egImport / --egDateImport

ProcessReportData("") (alle nye rapporter) eller ProcessReportData(datoer) (spesifikke datoer). Bygger ett salgsbilag per dato med tre–fire linjetyper per varegruppe:

Linje Konto Innhold
Salg varegruppens inntektskonto (fra R8) sum omsetning per varegruppe
Varekostnad 4010 beregnet kostpris
Lagerverdi 1410 samme kostpris (motpost lager)
Motpost 2998 sum salg (legges per datoskifte)

Kostpris: for ikke-drivstoff (hovedgruppe ≠ 1000) regnes kostpris ut fra brutto, mva og dekningsgrad; for drivstoff (hovedgruppe = 1000) hentes historisk snittkost fra Visma. Bilagsserie: EG_VocuherSerie (App.config), tekst «EG RETAIL IMPORT LINJESTART - CONNECT».

Svinn — --egWasteReport

ProcessWasteItems(). Per varegruppe bokføres svinn debet 4610 / kredit 1410 med verdidato satt til siste dag i forrige måned. Bilagsserie EG_VocuherSerie, tekst «EG RETAIL IMPORT KAST LINJESTART - CONNECT».

Lagerjustering (peiletall) — --egStockAdjustment

ProcessStockAdjustment(id) — månedsavslutning per klient-ID (ID-er fra StrFVar, prefiks StockAdjustment). Sammenligner bokført beholdning mot peilet/registrert nivå (FreeInf3) og bokfører avviket.

  • Stopper hvis peiletall mangler for en varegruppe (e-postvarsel).
  • Bilag opprettes suspendert (Suspended = true) — må godkjennes manuelt i Visma. Serie TankStock_Serie, tekst «VARELAGERJUSTERING - CONNECT».
  • To linjer per varegruppe med avvik: avvik (antall × kostpris) og verdijustering, mot kontoene 4010/1410 (retning etter fortegn).
  • Etterpå: oppdater dato-vannmerke + sett FreeInf3.Dt2 (peiletall behandlet).

Telleliste — --egInventoryAdjustment

ProcessInventoryItems(). Som lagerjustering, men bruker telleliste fra EG (vju_ReportInventoryItems) i stedet for peiletall fra Visma. Også suspendert bilag; tekst «EG RETAIL IMPORT TELLING LINJESTART - CONNECT».

Vannmerker (StrFVar, NmSp='ConnectMonitor')

VarNm Jobb
ReportID Salg (--egImport/--egDateImport)
WasteReportID Svinn
StockAdjustment_‹id› Lagerjustering (per klient, dato)
Varelager_EG_justering Telleliste
StationID Hvilken EG-stasjon som leses (oppsett, ikke vannmerke)
Varslinger E-postmottakere ved feil/nye varegrupper

Kontoer og tabeller

Konto Rolle
1410 Lagerbeholdning
4010 Varekostnad
4610 Svinn
2998 Motpost salg
varegruppens konto (R8) Inntekt per varegruppe

Visma-tabeller: R8 (varegrupper — konto, mva, dekningsgrad; nye opprettes automatisk og må få konto satt manuelt), FreeInf3 (peiletall), StrFVar (vannmerker). App.config: EG_VocuherSerie, TankStock_Serie, VBClient, connection strings AzureSQL_‹selskap› + VismaSQL.

Teknisk gjeld / ting å vite

  • Kontoene 1410/4010/4610/2998 er kode-konstanter — endres de i Visma, må koden oppdateres.
  • Lager-/telleliste-bilag opprettes suspendert og må godkjennes manuelt.
  • --egInventoryAdjustment sender feil-/rapport-e-post til en hardkodet adresse i stedet for Connect_Notifiers() — bør rettes.
  • Avdeling (R1) settes fast i salgsbilaget — verifiser at det er riktig for flere stasjoner.
  • Ingen SQL-transaksjon rundt «send bilag → oppdater vannmerke»; feil mellom de to stegene kan i prinsippet gi dobbeltimport.

Relaterte sider