Synk med Business NXT¶
Foreløpig — til kundeavklaring
Lesekontrakten er verifisert mot et reelt NXT-selskap med representative data (3 391 masterordrer, 2 373 produkter, 33 244 serienummerrader og 332 189 leveransetransaksjoner tilgjengelig for lesing).
Formål og avgrensning¶
ePortal eier masterordre-registeret; NXT eier produkter, priser, ekspedering og leveransedata. Synken har derfor to helt ulike deler:
- Løpende synk — polling, daglig og ved behov.
- Engangsmigrering — de eksisterende masterordrene flyttes inn i ePortal én gang og arkiveres deretter i NXT.
Løpende synk¶
| Datatype | Retning | Brukes til |
|---|---|---|
| Produkter med klassifisering og strukturer | NXT → ePortal | Produktvalg, instrumentklassifisering (type 1, 2 og 10) |
| Priser | NXT → ePortal (live-oppslag ved behov) | Alltid fersk pris i tilbud og ordre |
| Kunder / skip / management | Begge veier | En ny kunde kan opprettes i ePortal og få tilbud; overføres til NXT senest ved første kjøp |
| Salgsordrer ved akseptert tilbud | ePortal → NXT | NXT ekspederer og fakturerer — se Datomotor og ordre til NXT |
| Leveransetransaksjoner | NXT → ePortal | Grunnlaget for datomotoren — se klassifisering |
| Serienumre | NXT → ePortal | Ett instrument per serienummerrad |
flowchart LR
A["Planlagt kjøring<br/>(daglig + ved behov)"] --> B["Les endringer fra NXT<br/>(vannmerke: endringstidspunkt)"]
B --> C["Lagre rådata som<br/>uforanderlig historikk"]
C --> D["Klassifiser transaksjoner"]
D --> E["Oppdater leveransebildet<br/>per masterordre"]
E --> F{"Avvik mot lokalt<br/>akseptert tilstand?"}
F -- "Nei" --> G["Ferdig"]
F -- "Ja" --> H["Trenger gjennomgang<br/>(aldri stille overskriving)"]
Beslutningspunkt — kundesynk i konflikt
Kundedata kan endres i begge systemer mellom synkene. Hvem vinner — per feltgruppe eller per system? Og hvilke utfyllende kundefelter må legges til i NXT når en ePortal-først-kunde overføres? Dette må avklares.
Engangsmigreringen av masterordrer¶
- Alle aktive masterordrer (ordretype 6, unntatt ordrer med Gr7 = 9) i Business leses inn og blir ePortal-masterordrer med tilstand «Importert». Gr7 = 9-ordrer holdes bevisst utenfor importen (filtreres bort på Business-siden ved henting).
- Tilknyttet historikk (tilbud, salgsordrer, leveranser, serienumre) følger med som uforanderlige observasjoner — det er slik datomotoren kan forklare datoer fra dag én.
- Etter migreringen arkiveres masterordrene i NXT. Ingen aktive masterordrer vedlikeholdes i NXT etterpå.
- Migreringen kan kjøres på nytt uten duplikater: hver rad har en stabil identitet (f.eks. selskap + journalnummer + transaksjonsnummer for leveranser). Importen overskriver aldri eksisterende rader — en ny kjøring legger kun til nye ordrer, nye linjer og nye observasjoner.
Importere kun ordrer og linjer (uten observasjoner)¶
Observasjons-hentingen (leveringstransaksjonene som mater datomotoren) skanner
et bredt datovindu og kan mot en full prod-kopi overskride tidsgrensen. Du kan
importere kun ordrene og linjene — som allerede har sine egne datoer fra
NXT — ved å sende includeObservations: false:
POST api/SubscriptionImport/run-nxt
{ "maxOrders": 100, "includeObservations": false }
Da hoppes leveringstransaksjons-skanningen over. Ordrene og linjene kommer inn
med riktige datoer; observasjonene (og datomotorens historiske forklaring fra
leveranser) tas ikke med. Standard er includeObservations: true (full import).
Hva importen setter på ordre og linjer¶
- Kundenavn på ordren — hentes fra aktørregisteret (
wv_Actor.actNamevia kundenummeret); finnes ingen lokal aktør, brukes navnet fra NXT-associaten. Navnet driver masterordre-listens kundenavn-kolonne. - Linjepris og rabatt — NXT-ordrelinjens
priceInCurrency(enhetspris) ogdiscountPercent1(rabatt %). Beløp per linje beregnes i visningen som antall × pris × (1 − rabatt %/100). - Produkt-snapshot per linje — instrumentgruppene (Gruppe 1–6) samt beskrivelse og enhet hentes fra produktet i NXT (samme snapshot som når en linje opprettes manuelt). Feiler produktoppslaget, importeres linjen uten snapshot — importen stopper ikke.
Etterfylle allerede importerte ordrer (enrich-nxt)¶
Ordrer som ble importert før feltene over ble en del av importen kan etterfylles uten re-import:
POST api/SubscriptionImport/enrich-nxt
{ "maxOrders": 2100 } // eller { "masterOrderNos": [ ... ] }
Endepunktet leser samme utvalg fra NXT og fyller kun blanke verdier på eksisterende rader:
- Kundenavn — kun når feltet er blankt på ordren.
- Linjepris/rabatt — kun når linjens enhetspris er tom eller 0.
- Instrumentgrupper (+ beskrivelse/enhet) — kun når alle seks gruppene er tomme/0 på linjen.
Manuelt redigerte verdier røres aldri, og endepunktet oppretter aldri nye ordrer eller linjer (ordrer som ikke finnes lokalt telles bare i svaret). Kjøringen er idempotent og kan gjentas. Tilgang styres av samme datatilgang som importen (Masterordre-import, opprette).
Spilleregler som beskytter dataene¶
- Lesing endrer aldri noe i NXT. Skriving skjer kun som salgsordre ved akseptert tilbud, kundeoverføring og selve arkiveringen ved migrering.
- Historikk er uforanderlig. En tidligere levert ordrelinje eller en gammel transaksjon skrives aldri om.
- Avvik gir gjennomgang, ikke overskriving. Hvis NXT-data ikke stemmer med det ePortal allerede har akseptert, flagges saken for manuell gjennomgang.
- Endringstidspunkt brukes kun som vannmerke for å hente nytt — aldri som identitet.
Avvik og feil¶
| Situasjon | Håndtering |
|---|---|
| NXT utilgjengelig | Kjøringen prøves igjen; neste kjøring tar igjen etterslepet via vannmerket |
| Rad med endret innhold for kjent identitet | Registreres som kildeavvik og flagges — den lagrede historikken endres ikke |
| Ufullstendig kobling (f.eks. transaksjon uten gjenkjennbar ordrelinje) | Lagres som uavklart faktum; ingen videre effekt før den er avklart |