Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Om Test op imod Test database

Disse test retter sig imod: **invoice controller**. 

Disse manuelle tests udføres i **middleware / Swagger UI** ("Try it out"). Testeren kan kun sætte **kald-parametre** og observere svaret.

Der er **ingen** adgang til lokale json-konfig-filer såsom:

...

`appsettings.

...

json` /

...

`MyConfiguration.

...

json`.

Synlighedsfiltre styres via BCHEC-indstillinger for det givne firmanr i SonWin **Test-databasen**.

> **Delt Test-database — vigtigt:**
> - **A, B, E*, F, G, H** er læse-tests bundet til bestemte konti → kan køres samtidig med andre testere.
> - **C, D, E** kræver, at et BCHEC-flag sættes for **firmaet** + at API'et genstartes. Det er **globalt for hele firmaet** (ikke pr. konto), så det påvirker **alle** testere på firmaet uanset `accountId`. Koordinér disse (stille vindue eller dedikeret firmanr).

Før du går i gang

- Testene køres mod **Swagger UI** på endpointet `GET /accounts/{accountId}/invoices`.
- Datoer angives som `ÅÅÅÅ-MM-DD`. Udelades `limit`, returneres kun de **nyeste 100** fakturaer. Testkontiene herunder er små (≤ 46 fakturaer), så standard-`limit` rækker — men sæt et højere `limit`, hvis du udvider til større konti.
- **Fejl returneres i øjeblikket som HTTP 500** med en forklarende tekst i svaret. Vurdér derfor på **beskeden**, ikke på statuskoden.
- Filtrene i afsnit **C–E** styres af **BCHEC** i databasen. Efter en ændring i BCHEC skal API'et **genstartes**, før ændringen slår igennem.

Konkrete værdier nedenfor er hentet fra **Test-databasen** (2026-06-24). Foretrukne testkonti `305493`, `307375`, `309941` (valgt for at undgå sammenstød med andre testere).

Hvor en sag ikke fandtes på disse konti (parkeret, annulleret, kreditnota, PDF), bruges en **delt fallback-konto** — markeret tydeligt.

Bchec-indstillinger:

Her er de relevante Bchec-indstillinger som kan sættes for at hente en liste af SonWin fakturaer:

────────────────────────────────────────

UDSMARK- / fremtidsdaterings-flag

KODENAVN: WEB011_WEB012
KODETYPEA: VISEJPARKEREDE
Filter (kode): ExcludeParked
Virkning på resultatet: Skjuler parkerede fakturaer.
Tilføjet SQL-prædikat: (a.UDSMARK IS NULL OR a.UDSMARK <= 25)
────────────────────────────────────────
KODENAVN: WEB011_WEB012
KODETYPEA: CHECKUDSMARK
Filter (kode): CheckUdsmark
Virkning på resultatet: Beholder kun UDSMARK NULL / 0 / 2–25; fjerner også UDSMARK = 1
  (markeret-men-ikke-udskrevet).
Tilføjet SQL-prædikat: (a.UDSMARK IS NULL OR a.UDSMARK = 0 OR a.UDSMARK BETWEEN 2 AND 25)
────────────────────────────────────────
KODENAVN: WEB011_WEB012
KODETYPEA: VISKUNUDSKREVNE
Filter (kode): ShowOnlyDelivered
Virkning på resultatet: Viser kun udsendte/udskrevne fakturaer: UDSMARK <= 25 plus et
  SNEX/DSEND-leveringstjek (DELIVERYSTATE IN (5, 9)).
Tilføjet SQL-prædikat: UDSMARK <= 25 + DSEND/SNEX EXISTS/NOT EXISTS-blokken
────────────────────────────────────────
KODENAVN: WEB011_WEB012
KODETYPEA: EJFREMTID
Filter (kode): ExcludeFutureDated
Virkning på resultatet: Skjuler fremtidsdaterede fakturaer (BILAGSDATO efter i dag).
Tilføjet SQL-prædikat: a.BILAGSDATO <= @Today

De tre UDSMARK-varianter (VISEJPARKEREDE, CHECKUDSMARK, VISKUNUDSKREVNE) er alternative måder at frasortere parkerede/ikke-udsendte fakturaer på; et firma aktiverer typisk én af dem, men de kan kombineres.

────────────────────────────────────────

Frasortering af afregningstyper

KODENAVN: W11_W12EJAFRTYP
KODETYPEA: hver konfigureret rækkes KODETYPEA = én AFREGNTYPE-værdi der skal udelukkes
Filter (kode): ExcludeAfregnTypes
Virkning: Udelukker fakturaer hvis AFREGNTYPE er i det konfigurerede sæt. NULL-AFREGNTYPE rammes ikke af NOT
  IN og bliver derfor stående.

## Endepunkter

- **Liste:** `GET /accounts/{accountId}/invoices?dateFrom=&dateTo=&limit=`
- **PDF:** `GET /v1/accounts/{accountId}/invoices/{invoiceId}/pdf` hvor `invoiceId = {INSTNR}-{FORBNR}-{UDEBNR}-{REGNINGNR}`

Tests

A. Grundlæggende test ("virker det overhovedet?")
**Formål:** Bekræfte at endpointet svarer, og at felterne ser rigtige ud.

**A1 – Hent fakturaer for en kendt kunde**

1. Kald endpointet med `accountId = 305493`, `dateFrom = 2015-01-01`, `dateTo = 2026-12-31`.
2. *Forventet:* HTTP 200 og en liste med fakturaer (46 stk., ikke tom).

**A2 – Tjek felterne på en faktura**

1. Brug svaret fra A1, og se på den første faktura.
2. *Forventet:* `id` har formen `INSTNR-FORBNR-UDEBNR-REGNINGNR`, og felterne `invoiceDate`, `dueDate`, `totalAmount`, `remainingAmount` (saldo), `invoiceStatus` og `invoiceType` er udfyldt.

**A3 – Begræns til én faktura**

1. Gentag A1, men tilføj `limit = 1`.
2. *Forventet:* Præcis 1 faktura — den nyeste (`BILAGSDATO 2026-04-14`).

**A4 – Fremtidigt interval uden fakturaer**

1. Kald med `accountId = 305493`, `dateFrom = 2099-01-01`, `dateTo = 2099-12-31`.
2. *Forventet:* HTTP 200 og en **tom liste** `[]` (ikke en fejl).

B. Inputvalidering ("pæne fejl ved forkert input")
**Formål:** Bekræfte at forkert input giver en klar fejlbesked (i dag HTTP 500 + tekst), ikke en kryptisk databasefejl.

**B1 – Manglende dato (fra)** — Kald uden `dateFrom`, med `dateTo = 2030-12-31`. *Forventet:* Besked om at `DateFrom` mangler/er ugyldig (interval 1753–9999) — ikke "SqlDateTime overflow".

**B2 – Manglende dato (til)** — `dateFrom = 2000-01-01`, intet `dateTo`. *Forventet:* Tilsvarende besked om `DateTo`.

**B3 – Omvendt datointerval** — `dateFrom = 2030-01-01`, `dateTo = 2000-01-01`. *Forventet:* Besked om at `DateFrom` skal være ≤ `DateTo`.

**B4 – Ugyldigt limit** — gyldige datoer + `limit = 0`. *Forventet:* Besked om at `Limit` skal være ≥ 1.

**B5 – Manglende kunde-id** — tomt `accountId`. *Forventet:* Fejl om manglende `AccountId`.

**B6 – Dato før databasens minimum** — `dateFrom = 1500-01-01`, `dateTo = 2030-12-31`. *Forventet:* Pæn valideringsfejl — ikke "SqlDateTime overflow".

**B7 – Ukendt kunde** — `accountId = 999999999`, gyldigt interval. *Forventet:* Fejl med besked om at kunden ikke findes.

C. Synlighed af parkerede fakturaer (UDSMARK-varianter)
**Formål:** Bekræfte at de tre UDSMARK-flag skjuler en parkeret faktura.

> **Ingen parkerede fakturaer i Test-databasen p.t.** Ingen faktura på firmaet har `UDSMARK > 25`, så C kan ikke køres på eksisterende data. Du skal først **oprette** en parkeret faktura. Dette ændrer delt testdata + kræver et globalt BCHEC-flag og genstart → **koordinér med andre testere**.

**Forberedelse (opret + nulstil testdata).** Park en eksisterende faktura på `305493` (den forfaldne `503-1-1-56`):
```sql
-- 1) Notér nuværende værdi (til nulstilling bagefter):
SELECT UDSMARK FROM Sonlinc.AKOND WITH (NOLOCK)
WHERE FIRMANR = @CompanyId AND INSTNR = 503 AND FORBNR = 1 AND UDEBNR = 1 AND REGNINGNR = 56;
-- 2) Park den:
UPDATE Sonlinc.AKOND SET UDSMARK = 26
WHERE FIRMANR = @CompanyId AND INSTNR = 503 AND FORBNR = 1 AND UDEBNR = 1 AND REGNINGNR = 56;
-- ... kør C-trinene ...
-- 3) Nulstil til den oprindelige værdi fra trin 1 (typisk NULL eller 0):
UPDATE Sonlinc.AKOND SET UDSMARK = <oprindelig værdi>
WHERE FIRMANR = @CompanyId AND INSTNR = 503 AND FORBNR = 1 AND UDEBNR = 1 AND REGNINGNR = 56;
```
Brug i alle C-trin: `accountId = 305493`, `dateFrom = 2026-04-01`, `dateTo = 2026-04-30`.

C0 – Udgangspunkt (uden flag)**
1. Med fakturaen parkeret (UDSMARK 26) og **uden** `WEB011_WEB012`-flag: kald med ovenstående parametre.
2. *Forventet:* `503-1-1-56` **er** med. Notér antal.

**C1 – VISEJPARKEREDE** — Opret `WEB011_WEB012 / VISEJPARKEREDE`, genstart, gentag. *Forventet:* `503-1-1-56` **forsvinder**.

**C2 – CHECKUDSMARK** — Fjern C1-flaget, opret `WEB011_WEB012 / CHECKUDSMARK`, genstart, gentag. *Forventet:* `503-1-1-56` forsvinder (UDSMARK 26 uden for NULL/0/2–25).

**C3 – VISKUNUDSKREVNE** — Fjern C2-flaget, opret `WEB011_WEB012 / VISKUNUDSKREVNE`, genstart, gentag. *Forventet:* `503-1-1-56` forsvinder (UDSMARK > 25).

**C4 – Flere flag samtidig** — Aktivér fx VISEJPARKEREDE + VISKUNUDSKREVNE, genstart, gentag. *Forventet:* Resultatet er snittet (færrest rækker).

> Husk at nulstille `UDSMARK` (forberedelsens trin 3) og fjerne BCHEC-flagene + genstarte, når C er færdig.

D. Fremtidsdaterede fakturaer (EJFREMTID)
**Formål:** Bekræfte at `WEB011_WEB012 / EJFREMTID` skjuler fakturaer med bilagsdato efter i dag.

> **Ingen testdata p.t.:** Firmaet har ingen fakturaer med bilagsdato i fremtiden, så D kan ikke demonstreres uden først at oprette en fremtidsdateret faktura. (Forveksl ikke med A4, der tester et fremtidigt *datointerval* → tom liste.)

**D1 – Skjul fremtidsdaterede (når data findes)** — Find/opret en faktura med bilagsdato efter i dag, opret `WEB011_WEB012 / EJFREMTID`, genstart, kald med interval der dækker datoen. *Forventet:* Den fremtidsdaterede faktura er **ikke** med.

**D2 – Uden flaget** — Fjern flaget, genstart, gentag. *Forventet:* Den fremtidsdaterede faktura **er** med.

## E. Frasortering af afregningstyper (W11_W12EJAFRTYP)
**Formål:** Bekræfte at fakturaer med en bestemt afregningstype kan frasorteres.

**Testdata:** Konto `305493` har `KV-EN` (41), `KV-I` (4) og præcis **1** faktura med `AFREGNTYPE = NULL` (i alt 46). Brug i alle E-trin: `accountId = 305493`, `dateFrom = 2015-01-01`, `dateTo = 2026-12-31`.

E2 – Udgangspunkt (tom liste i BCHEC)**
1. Sørg for at `W11_W12EJAFRTYP` **ingen** rækker har for firmaet.
2. Kald med ovenstående parametre. *Forventet:* Antal = **46**.

**E1 – Udeluk én afregningstype**

1. Opret `W11_W12EJAFRTYP` med `KODETYPEA = KV-I`, og genstart.
2. Gentag kaldet. *Forventet:* 4 færre = **42**. (Større alternativ: udeluk `KV-EN` → 41 færre = 5.)

**E3 – NULL rammes ikke**

1. Med `KV-I` stadig udelukket, kig efter fakturaen med `AFREGNTYPE = NULL`.
2. *Forventet:* Den ene NULL-faktura er stadig med (`NOT IN` matcher ikke NULL).

F. PDF-tilstedeværelse og fakturatype
**Formål:** Bekræfte at listen som udgangspunkt kun viser fakturaer med en færdig PDF, markeret `invoiceType = pdf`.

> Ingen af de tre foretrukne konti har en renderet PDF → brug **delt fallback-konto `200229`**.

**Testdata:** `200229 / 400-1-1-56` har en renderet PDF (bilagsdato 2026-04-14).

**F1 – Kun fakturaer med PDF, markeret som `pdf`**

1. Kald med `accountId = 200229`, `dateFrom = 2026-04-01`, `dateTo = 2026-04-30`.
2. *Forventet:* `400-1-1-56` er med, og de returnerede fakturaer har `invoiceType = pdf`. (Fakturaer uden renderet PDF kommer som udgangspunkt slet ikke med.)

G. Download af faktura-PDF
**Formål:** Bekræfte at PDF'en kan hentes, og at fejl håndteres pænt. Endpoint: `GET /v1/accounts/{accountId}/invoices/{invoiceId}/pdf`.

**G1 – Hent en gyldig PDF** — `accountId = 200229`, `invoiceId = 400-1-1-56`. *Forventet:* HTTP 200, binær PDF (`application/pdf`) der kan åbnes.

**G2 – Ugyldigt id-format** — `invoiceId = 123-456` (mangler led). *Forventet:* Håndteret fejl om at `InvoiceId` skal have formen `INSTNR-FORBNR-UDEBNR-REGNINGNR`.

**G3 – Velformet, men ikke-eksisterende id** — korrekt format, ikke-eksisterende nr. *Forventet:* Passende fejl — ikke en tom/ødelagt fil.

H. Status på fakturaer (saldo-model)
**Formål:** Bekræfte at `invoiceStatus` og `remainingAmount` afspejler den løbende saldo (SonWin er saldo-baseret).

**Testdata:** Ét kald på konto `309941` med `dateFrom = 2015-01-01`, `dateTo = 2026-12-31` returnerer H2–H4 på én gang. H1 ligger på den delte konto `200229`.

**H1 – Annulleret (`cancelled`)** *(delt konto)*

1. Kald med `accountId = 200229`, `dateFrom = 2015-07-01`, `dateTo = 2015-07-31`.
2. *Forventet:* `400-1-1-2` har status `cancelled`.
3. *Bonus:* `400-1-1-3` (samme dag) er både `KORTSTATUS = 99` og `KR < 0` → bekræfter at `cancelled` vinder over `credited`.

**H2 – Kreditnota (`credited`)**

1. Kald med `accountId = 309941`, `dateFrom = 2016-01-01`, `dateTo = 2016-12-31`.
2. *Forventet:* `479-1-1-9` (−165,65) har status `credited`.

**H3 – Betalt (`paid`)**

1. Kald med `accountId = 309941`, `dateFrom = 2015-01-01`, `dateTo = 2015-12-31`.
2. *Forventet:* `479-1-1-1` (beløb 0,00, **saldo 0,00**) har status `paid`. *(Bemærk: dette er kontoens åbnings-/nul-postering — den eneste linje hvor saldo ≤ 0; kontoen er i debet derefter.)*

**H4 – Forfalden (`overdue`)**

1. Kald med `accountId = 309941`, `dateFrom = 2026-01-01`, `dateTo = 2026-12-31`.
2. *Forventet:* `479-1-1-54` (saldo 601,01, **forfald 2026-05-04**, dvs. før i dag) har status `overdue`.

**H5 – Ubetalt (`unpaid`)**

> **Ingen testdata p.t.:** Ingen faktura på firmaet er **fremtidsforfalden med positiv saldo** — de nyeste fakturaer er allerede forfaldne (→ `overdue`). H5 kan derfor ikke demonstreres uden at oprette en faktura med fremtidig forfaldsdato og positiv saldo.

**H6 – Saldo stemmer med kilden**

1. Vælg en kendt konto, sammenlign `remainingAmount` med den løbende saldo i SonWin/RVV for samme forbrugssted.
2. *Forventet:* Beløbene stemmer (samme `lbsum`-beregning).

---------------------------------- Nedenfor findes Test rettet imod Produktionsdata --------------------------------------

Om

Disse test retter sig imod: invoice controller. 

Disse manuelle tests udføres i **middleware / Swagger UI** ("Try it out"). Testeren kan kun sætte **kald-parametre** og observere svaret.

Der er **ingen** adgang til lokale json-konfig-filer såsom: "appsettings.json" / "MyConfiguration.json".

Synlighedsfiltre styres via BCHEC indstillinger for det givne firmanr i SonWin Test-database.

Før du går i gang

- Testene køres mod **Swagger UI** på endpointet `GET /accounts/{accountId}/invoices`.
- Datoer angives som `ÅÅÅÅ-MM-DD`. Udelades `limit`, returneres kun de **nyeste 100** fakturaer — sæt derfor `limit` højere, når en bestemt (ofte ældre) faktura skal findes.
- **Fejl returneres i øjeblikket som HTTP 500** med en forklarende tekst i svaret. Vurdér derfor på **beskeden**, ikke på statuskoden.
- Filtrene i afsnit **C–E** styres af **BCHEC** i databasen. Efter en ændring i BCHEC skal API'et **genstartes**, før ændringen slår igennem.

  • Som en (måske) hjælp er der på nogle Test tilføjet konkrete værdier som er hentet fra produktionsdata som i et eller andet forhold må forventes at ligne Test databasen.

Bchec-indstillinger:

Her er de relevante Bchec-indstillinger som kan sættes for at hente en liste af SonWin fakturaer:

...

Information om controlleren findes her:

Invoice Controller

Tests

GetInvoices (Returner en liste af fakturaer på 0 eller flere fakturaer for kunden)

...