title: Implementation Plan — Landsbankaskema (LI_* services) audience: developer keywords: Landsbankinn, Landsbankaskema, LI_, process.ashx, foreign payments, index, gift card, direct debit, token, session, transport interface, mock, implementation plan

locale: en-us

Implementation Plan — Landsbankaskema (LI_* services)

Add the proprietary Landsbankinn Landsbankaskema message set (LI_*) on top of the existing Sambankaskema 2013 integration, reusing the current transport abstraction.

Landsbankaskema covers capabilities the shared 2013 standard has no service for — foreign payments, CPI index lookup, gift cards, card inquiries, account/token validation, unpaid invoices, direct debit, and payment slips — plus overlapping variants of payments, claims, statements, and currency rates.

Service facts

ItemValue
Endpointhttps://b2b.fbl.is/process.ashx (live, HTTP 200)
Message styleFlat LI_* request/response XSDs wrapped in a Landsbankaskema envelope (POST text/xml)
Schema basehttps://b2b.fbl.is/schema/LI_*.xsd, envelope.xsd, Schema_1_1.xsd, Schema_1_2.xsd
AuthSession tokenLI_Innskra (login: notandanafn + lykilord) → token, reused per call, LI_Utskra (logout)
HandbooksTæknihandbók B2B – Landsbankaskema; …Færsluhirðing (transaction monitoring)

This differs from 2013 in two ways: a single .ashx handler instead of WCF .svc, and a session token instead of per-call WS-Security certificate signing.

Architecture: reuse the transport abstraction

Keep the existing contract; do not build a parallel stack.

Existing objectChange
interface "Lbi Transport"Add a SendSkemaRequest(...) procedure for the Landsbankaskema call shape
enum "Lbi Operation"Add one value per LI_* request operation
enum "Lbi Transport" (Live/Mock selector)Unchanged — both implementations gain the new procedure
codeunit "Lbi Live Transport"Implement SendSkemaRequest — session token + envelope + process.ashx + log row
codeunit "Lbi Mock Transport" (test)Implement SendSkemaRequest — pop from Lbi Mock Response Q, no session
codeunit "Lbi Client"Add a SendSkemaRequest facade mirroring SendRequest
codeunit "Lbi Endpoint"Add ProcessHandlerPathTok = '/process.ashx' + accessor

Proposed interface addition:

/// <summary>
/// Sends one Landsbankaskema (LI_*) request to process.ashx inside the
/// Landsbankaskema envelope, managing the session token. Returns true on HTTP 2xx.
/// </summary>
procedure SendSkemaRequest(Operation: Enum "Lbi Operation"; RequestXml: Text; AccountNo: Code[20]; DateFrom: Date; DateTo: Date; RecordFrom: Integer; RecordTo: Integer; var HttpStatus: Integer; var ResponseBody: Text; var LogEntryNo: BigInteger): Boolean

The metadata parameters match SendRequest so both call styles write the same Lbi Request Log shape. RequestXml is the LI_* message body the builder produced; the transport wraps it in the envelope and injects the session token.

Interface note: adding a proceudure to "Lbi Transport" requires both implementers (Lbi Live Transport, Lbi Mock Transport) to implement it. The enum is Extensible, so any downstream extension that implements this interface must add the procedure too — within this solution only the two implementations above exist.

Session management (the new transport concern)

Lbi Live Transport.SendSkemaRequest must:

  1. Acquire a token — call LI_Innskra with notandanafn/lykilord resolved from

Lbi Secret Mgt (reuse ResolveCredentials — Landsbankaskema uses the same username/password already stored for the 2013 UserName/Password header).

  1. Cache the token — session-scoped single-instance codeunit, or IsolatedStorage with

expiry, so a burst of calls logs in once.

  1. Inject the token into each envelope; re-login on expiry/401-equivalent fault.
  2. LogoutLI_Utskra is optional; rely on token expiry unless TS manual requires it.

A dedicated Lbi Skema Session codeunit owns this so SendSkemaRequest stays thin. Whether process.ashx also requires a TLS client certificate is an open question for the TS manual — if so, reuse the existing certificate from Lbi Secret Mgt.

LI_* catalogue → proposed message types

Responses (_svar) and LI_Error/LI_Villa are schema pairs, not separate operations. LI_Innskra / LI_Utskra / LI_Breyta_lykilordi are session infrastructure, handled by the transport — not exposed as Cloud Event message types (except optional admin password change).

New capabilities (no 2013 equivalent) — priority

LI_* operationMeaningProposed message typeGate
LI_Stofna_erlendar_greidslurCreate foreign paymentsLandsbankinn.ForeignPayment.CreateYes
LI_Fyrirspurn_erlendar_greidslurForeign payments inquiryLandsbankinn.ForeignPayment.QueryNo
LI_Get_IndexCPI / indexation index lookupLandsbankinn.Index.GetNo
LI_Fyrirspurn_hreyfd_gjafakortGift card activityLandsbankinn.GiftCard.QueryActivityNo
LI_Fyrirspurn_kortCard inquiryLandsbankinn.Card.QueryNo
LI_Innborgun_kreditkortsCredit card depositLandsbankinn.CreditCard.DepositYes
LI_Fyrirspurn_er_reikningur_tilAccount existence / validationLandsbankinn.Account.VerifyNo
LI_Fyrirspurn_er_token_tilToken existence checkLandsbankinn.Token.VerifyNo
LI_Fyrirspurn_ogreiddir_reikningarUnpaid invoices inquiryLandsbankinn.UnpaidInvoice.QueryNo
LI_Fyrirspurn_beingreidslaDirect debit inquiryLandsbankinn.DirectDebit.QueryNo
LI_Fyrirspurn_beingreidsluadilarDirect debit providers inquiryLandsbankinn.DirectDebit.QueryProvidersNo
LI_Fyrirspurn_greidslusedillPayment slip inquiryLandsbankinn.PaymentSlip.QueryNo
LI_Innsending_gagnaGeneric data submissionLandsbankinn.Data.SubmitYes

Overlap with Sambankaskema 2013 — lower priority

Already covered by the 2013 services. Implement only if a customer needs the Landsbankaskema variant or a field the 2013 contract lacks. Prefix proposed types with Lbs to keep them distinct from the 2013 message types.

LI_* operationMeaning2013 equivalent
LI_Fyrirspurn_reikningsyfirlitAccount statementLandsbankinn.Statement.Get
LI_Fyrirspurn_gengi_gjaldmidlaCurrency ratesLandsbankinn.CurrencyRates.Get
LI_Greidsla / LI_Greidslur / LI_Stofna_greidslurDomestic payment(s)Landsbankinn.Payment.Batch
LI_Fyrirspurn_greidslubunkiPayment batch inquiryLandsbankinn.Payment.ResultBatch
LI_Claim_get / LI_Fyrirspurn_krafaRetrieve / inquire claimLandsbankinn.Claim.QueryOne
LI_Claim_search / _by_day / _paymentSearch claimsLandsbankinn.Claim.Query
LI_Claim_todays_payment_infoToday's claim payment infoLandsbankinn.Claim.QueryPayments
LI_Innheimta_krofur_stofna / _breyta / _eydaCreate / modify / delete collection claimsLandsbankinn.Claim.CreateBatch / AlterBatch / CancelBatch
LI_Innheimta_Magninnsending_krofur_saekjaRetrieve batch collection claimsLandsbankinn.Claim.GetOperationResult
LI_Innheimta_fyrirspurn_krofur / _greidslur / _dagsCollection claims / payments inquiryLandsbankinn.Claim.Query / QueryPayments
LI_Krafa_veita_greidslufrestGrant payment deferment(none — could ship as new)
LI_Milliinnheimta_skila_krofuReturn claim to secondary collectionSecondary Collection plan

LI_Krafa_veita_greidslufrest (grant deferment) has no 2013 equivalent — promote it to the New-capabilities list as Landsbankinn.Claim.GrantDeferment if required.

Objects to create

IDs continue at 72363+ — resolve the ID-range discrepancy first (see API_Gap_Analysis.md).

Transport / shared (once)

ObjectNameRole
CodeunitLbi Skema SessionLogin/token cache/logout against process.ashx
CodeunitLbi Skema EnvelopeWrap an LI_* body in the Landsbankaskema envelope + token
CodeunitLbi Skema Fault ParserParse LI_Error/LI_Villa responses (sibling to Lbi Soap Fault Parser)

Plus the interface/enum/transport/client/endpoint edits listed under Architecture.

Per domain — vertical slice (mirror src/Services/<X> + src/MessageTypes/<X>)

For each domain (ForeignPayments, Index, GiftCards, Cards, AccountValidation, UnpaidInvoices, DirectDebit, PaymentSlips, DataSubmission):

Mock strategy (tests)

Lbi Mock Transport.SendSkemaRequest pops the next row from Lbi Mock Response Q exactly like SendRequest — no session, no envelope. Reuse Enqueue / GetLastConsumed. Tests:

No change to the existing Lbi Test Init / Lbi Mock Response Q infrastructure beyond implementing the new interface method.

Phasing

  1. Transport foundation — interface procedure, Lbi Skema Session, envelope, fault

parser, endpoint, client facade, mock method. Prove with a LI_Innskra + one read (e.g. Account.Verify) round-trip. (~3 days)

  1. New capabilities — the New-capabilities table, highest-value first (foreign

payments, index, account validation typically). (~1.5 days per domain)

  1. Overlap variants — only on customer demand; prefix Lbs. (per requirement)

Foundation + 3 priority domains ≈ ~8–9 developer-days; full New-capabilities set ≈ ~15 developer-days. Each domain needs the live LI_* XSD fields and the TS manual confirmed before coding.

Open questions for Landsbankinn / TS manuals

separate Landsbankaskema agreement is required (the same provisioning gap that currently blocks the 2013 calls applies here too).


© Origo – Cloud Events Base Extension