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
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.
| Item | Value |
|---|---|
| Endpoint | https://b2b.fbl.is/process.ashx (live, HTTP 200) |
| Message style | Flat LI_* request/response XSDs wrapped in a Landsbankaskema envelope (POST text/xml) |
| Schema base | https://b2b.fbl.is/schema/LI_*.xsd, envelope.xsd, Schema_1_1.xsd, Schema_1_2.xsd |
| Auth | Session token — LI_Innskra (login: notandanafn + lykilord) → token, reused per call, LI_Utskra (logout) |
| Handbooks | Tæ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.
Keep the existing contract; do not build a parallel stack.
| Existing object | Change |
|---|---|
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 isExtensible, so any downstream extension that implements this interface must add the procedure too — within this solution only the two implementations above exist.
Lbi Live Transport.SendSkemaRequest must:
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).
expiry, so a burst of calls logs in once.
401-equivalent fault.LI_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.
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).
| LI_* operation | Meaning | Proposed message type | Gate |
|---|---|---|---|
LI_Stofna_erlendar_greidslur | Create foreign payments | Landsbankinn.ForeignPayment.Create | Yes |
LI_Fyrirspurn_erlendar_greidslur | Foreign payments inquiry | Landsbankinn.ForeignPayment.Query | No |
LI_Get_Index | CPI / indexation index lookup | Landsbankinn.Index.Get | No |
LI_Fyrirspurn_hreyfd_gjafakort | Gift card activity | Landsbankinn.GiftCard.QueryActivity | No |
LI_Fyrirspurn_kort | Card inquiry | Landsbankinn.Card.Query | No |
LI_Innborgun_kreditkorts | Credit card deposit | Landsbankinn.CreditCard.Deposit | Yes |
LI_Fyrirspurn_er_reikningur_til | Account existence / validation | Landsbankinn.Account.Verify | No |
LI_Fyrirspurn_er_token_til | Token existence check | Landsbankinn.Token.Verify | No |
LI_Fyrirspurn_ogreiddir_reikningar | Unpaid invoices inquiry | Landsbankinn.UnpaidInvoice.Query | No |
LI_Fyrirspurn_beingreidsla | Direct debit inquiry | Landsbankinn.DirectDebit.Query | No |
LI_Fyrirspurn_beingreidsluadilar | Direct debit providers inquiry | Landsbankinn.DirectDebit.QueryProviders | No |
LI_Fyrirspurn_greidslusedill | Payment slip inquiry | Landsbankinn.PaymentSlip.Query | No |
LI_Innsending_gagna | Generic data submission | Landsbankinn.Data.Submit | Yes |
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_* operation | Meaning | 2013 equivalent |
|---|---|---|
LI_Fyrirspurn_reikningsyfirlit | Account statement | Landsbankinn.Statement.Get |
LI_Fyrirspurn_gengi_gjaldmidla | Currency rates | Landsbankinn.CurrencyRates.Get |
LI_Greidsla / LI_Greidslur / LI_Stofna_greidslur | Domestic payment(s) | Landsbankinn.Payment.Batch |
LI_Fyrirspurn_greidslubunki | Payment batch inquiry | Landsbankinn.Payment.ResultBatch |
LI_Claim_get / LI_Fyrirspurn_krafa | Retrieve / inquire claim | Landsbankinn.Claim.QueryOne |
LI_Claim_search / _by_day / _payment | Search claims | Landsbankinn.Claim.Query |
LI_Claim_todays_payment_info | Today's claim payment info | Landsbankinn.Claim.QueryPayments |
LI_Innheimta_krofur_stofna / _breyta / _eyda | Create / modify / delete collection claims | Landsbankinn.Claim.CreateBatch / AlterBatch / CancelBatch |
LI_Innheimta_Magninnsending_krofur_saekja | Retrieve batch collection claims | Landsbankinn.Claim.GetOperationResult |
LI_Innheimta_fyrirspurn_krofur / _greidslur / _dags | Collection claims / payments inquiry | Landsbankinn.Claim.Query / QueryPayments |
LI_Krafa_veita_greidslufrest | Grant payment deferment | (none — could ship as new) |
LI_Milliinnheimta_skila_krofu | Return claim to secondary collection | Secondary 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.
IDs continue at 72363+ — resolve the ID-range discrepancy first (see API_Gap_Analysis.md).
Transport / shared (once)
| Object | Name | Role |
|---|---|---|
| Codeunit | Lbi Skema Session | Login/token cache/logout against process.ashx |
| Codeunit | Lbi Skema Envelope | Wrap an LI_* body in the Landsbankaskema envelope + token |
| Codeunit | Lbi Skema Fault Parser | Parse 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):
Lbi <Domain> Builder — build the LI_* request bodyLbi <Domain> Parser — parse the LI_*_svar response into buffersLbi <Domain> Mgt — orchestrate build → Lbi Client.SendSkemaRequest → parseLbi <Domain> <Op> Impl + Lbi <Domain> <Op> Help per message typeLbi Mock Transport.SendSkemaRequest pops the next row from Lbi Mock Response Q exactly like SendRequest — no session, no envelope. Reuse Enqueue / GetLastConsumed. Tests:
LI_* body for each operation.Lbi Skema Session performs login once across a multi-call sequence (assert one LI_Innskra).No change to the existing Lbi Test Init / Lbi Mock Response Q infrastructure beyond implementing the new interface method.
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)
payments, index, account validation typically). (~1.5 days per domain)
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.
process.ashx require a TLS client certificate in addition to the session token?Schema_1_2.xsd (latest) vs 1_1.notandanafn/lykilord and agreement entitle the LI_* services, or aseparate Landsbankaskema agreement is required (the same provisioning gap that currently blocks the 2013 calls applies here too).
© Origo – Cloud Events Base Extension