title: Implementation Plan — Electronic Documents Service audience: developer keywords: Landsbankinn, Documents, UploadDocument, GetDocumentResult, GetDocumentsResult, IOBS, TS 165, rafræn skjöl, implementation plan
Add support for the Landsbankinn IcelandicOnlineBankingDocuments service (electronic documents / rafræn skjöl, handbook TS 165).
| Item | Value |
|---|---|
| Endpoint | https://b2b.fbl.is/IcelandicOnlineBankingDocuments.svc (live, HTTP 200) |
| SOAPAction prefix | http://IcelandicOnlineBanking/2012/04/13 |
| Request body namespace | http://IcelandicOnlineBanking/2013/10/15/Documents (wrapper), types in …/2013/10/15/DocumentTypes |
| Binding | WCF BasicHttpBinding (SOAP 1.1) — handled by Lbi Live Transport |
| Handbook | TS 165 — Electronic Documents; XSD IcelandicOnlineBankingDocumentTypes.xsd |
| Operation | SOAPAction | Request | Response | Pattern |
|---|---|---|---|---|
UploadDocument | …/2012/04/13/UploadDocument | Document (type DocumentTypes:Document) | DocumentID (string) | Submit, returns an ID |
GetDocumentResult | …/2012/04/13/GetDocumentResult | Query (DocumentResultQuery) | DocumentResult | Poll one by ID |
GetDocumentsResult | …/2012/04/13/GetDocumentsResult | Query (DocumentsResultQuery, nillable) | ArrayOfDocumentResult | Poll many |
The flow mirrors Payments: submit (UploadDocument → DocumentID), then poll (GetDocumentResult / GetDocumentsResult). Confirm the exact Document, DocumentResultQuery, and DocumentResult fields against the live XSD (?xsd=xsd0 / ?xsd=xsd1) and TS 165 before coding the builder/parser.
| Message type | Operation | Direction | Access gate |
|---|---|---|---|
Landsbankinn.Document.Upload | UploadDocument | Outbound | Yes — write operation |
Landsbankinn.Document.Result | GetDocumentResult | Outbound | No — read |
Landsbankinn.Document.ResultBatch | GetDocumentsResult | Outbound | No — read |
Identifiers are Locked = true (public wire contract), matching the existing pattern.
Follow the existing vertical slice (compare against src/Services/Payments + src/MessageTypes/Payments). IDs continue at 72363+ — see the ID-range prerequisite in API_Gap_Analysis.md.
**Services layer — src/Services/Documents/**
| Object | Name | Role |
|---|---|---|
| Codeunit | Lbi Documents Builder | Build the inner SOAP body for each operation |
| Codeunit | Lbi Documents Parser | Parse DocumentResult / ArrayOfDocumentResult into buffers |
| Codeunit | Lbi Documents Mgt | Orchestrate build → Lbi Client.SendRequest → parse |
| Table | Lbi Document Buf (temp) | Upload payload buffer (name, content/Base64, type) |
| Table | Lbi Doc Result Buf (temp) | Parsed result rows (DocumentID, status, timestamp) |
| Enum | Lbi Document Status | Wire status values (locked case map, never Format()) |
**Message-type layer — src/MessageTypes/Documents/**
| Object | Name |
|---|---|
| Codeunit (Impl) | Lbi Document Upload Impl implements Cloud Event Msg Interface |
| Codeunit (Help) | Lbi Document Upload Help |
| Codeunit (Impl) | Lbi Document Result Impl |
| Codeunit (Help) | Lbi Document Result Help |
| Codeunit (Impl) | Lbi Document ResultBatch Impl |
| Codeunit (Help) | Lbi Document ResultBatch Help |
Access gate + permissions
| Object | Name | Note |
|---|---|---|
| Table | Lbi Document Gate | Gate table for the upload (write) operation |
| PermissionSet | Lbi Document Gate | Grants the upload gate |
Wire the gate through Lbi Access Gate (codeunit 72300), mirroring Lbi Payment Gate. Add the new objects to Lbi Banki Full.
Lbi Operation enum** — add DocumentUpload, DocumentResult, DocumentResultBatch.Lbi Client.SoapActionFor** — add a `DocumentsActionPrefixTok = 'http://IcelandicOnlineBanking/2012/04/13' and the three cases (/UploadDocument, /GetDocumentResult, /GetDocumentsResult`).
Lbi Endpoint** — add `DocumentServicePathTok = '/IcelandicOnlineBankingDocuments.svc', a DocumentServiceUrl() accessor, and the three operations to ServiceUrlFor`.
Lbi Cloud Event Msg Type enum extension** — add the three message-type values, each binding Cloud Event Msg Interface to its Impl codeunit.
Help.Landsbankinn.Get** overview — bump the message-type count and list the new types.test/test/LbiDocumentsTests.Codeunit.al…/Documents, inner elements qualified in …/DocumentTypes), via the mock transport.
GetDocumentResult / GetDocumentsResult response populates the buffers.Landsbankinn.Document.Upload with valid input returns DocumentID; missing required fields return a clean RespondWithError.
Document.Upload without permission.UploadDocument.DocumentResult is available synchronously or requires polling delay.DocumentsResultQuery filter fields (by date, status, type?).Rough total: ~5 developer-days, plus live verification once Landsbankinn confirms the credential/certificate entitlement covers the Documents service.
© Origo – Cloud Events Base Extension