Peppol Ap Admin Applet
The console for operating BigLedger’s own Peppol Access Point — AP here means Access Point, not Accounts Payable: the inbox every inbound network message lands in, the history of what was delivered, the receiver mappings that decide which customer a document is handed to, and the PINT Malaysia testbed. It creates no accounting entries and moves no stock. A document in Inbox History that the customer never received usually means no receiver mapping matched — the message is recorded and delivered to nobody, with no error — and a mapping exists only for a Peppol ID that has been added to a company on the Organisation applet’s Peppol Config tab.
Your job, and the screen for it
| The job | Screen or tab | Read |
|---|---|---|
| Find out why a customer never received a Peppol document — a receiver ID with no mapping is recorded and delivered to nobody, with no error | Inbox History, then that tenant on Registered Companies | Troubleshooting; Lifecycle and effects |
| Check that inbound messages are being routed — rows here mean routing has not run | Inbox Queue (normally empty) | Lifecycle and effects |
| Confirm a customer’s new Peppol ID is routable — one row, against the right company | Registered Companies › pick the tenant in the Tenant dropdown (read-only) | Lifecycle and effects |
| Add, correct or remove a receiver mapping — not here: Edit’s SAVE does nothing, and the mapping follows the company’s Peppol ID | Organisation applet › company › Peppol Config | Settings in other applets that control this applet |
Validate PINT Malaysia sample files — name each file with invoice or creditnote; a malformed time still passes VALID; check times separately | Testbed › Validation Test › upload a ZIP › Run Checking | Troubleshooting |
| Get access — a session in BigLedger’s access-point tenant, and read permissions for inbox and testbed screens | Applet installation and login; Settings › Permission Set / Role Permission | Before you can use it |
Overview
The Peppol AP Admin Applet is the console for operating BigLedger’s own Peppol Access Point, not for a customer’s own Peppol traffic. Where the My Peppol Admin Applet is a tenant looking at its own outgoing and incoming documents, this applet is the access point looking at everything the network delivers to it — the inbox queue that every inbound AS4 message lands in, the history of what was delivered, the tenant-company receiver mappings that decide which customer a document is handed to, and the PINT Malaysia testbed used to prove conformance to OpenPeppol and MDEC.
It is an operations and accreditation tool. It creates no accounting entries, moves no stock, and has no document of its own that can be finalised or voided.
Where it fits
| Upstream | This applet | Downstream |
|---|---|---|
| Any Peppol access point on the network sending an AS4 message to a participant ID that resolves to BigLedger | Inbox Queue — one transient row per inbound message | A background job routes the document into the receiving tenant and removes the queue row |
| The routed document | Inbox History — the retained access-point record | The tenant’s own External Reception screens in the My Peppol Admin Applet |
| A company Peppol participant ID added, changed or deleted in the Organisation Applet → company → Peppol Config | Registered Companies — the routing table: one row per company Peppol ID, written, changed and deleted along with that ID | Routing decisions for every inbound document |
| Sample XML supplied by OpenPeppol / MDEC for accreditation | Testbed → Validation Test, Testbed → Sending Test | Validation results, and (when the sending path works — see Troubleshooting) test transmissions through the access point |
Screens and menus
| Menu | Route | What it shows | Actions |
|---|---|---|---|
| Inbox Queue | peppol-testbed-receiving-test-queue | Messages waiting to be routed, newest first — Sender ID, Receiver ID, Organization ID, Document Creation Datetime, Document Creation Datetime UTC, Document Type ID, Process ID, Payload ID, Lookup Results Status, Lookup Results Endpoint URL, Lookup Results Duration, App Domain, App Mode | View only — click a row for the read-only Details tab |
| Inbox History | peppol-testbed-receiving-test-history | Every message received, same columns, newest first | View only |
| Registered Companies | registered-companies | The receiver mappings for one selected tenant — Tenant Code, Tenant Comp Peppol ID, Comp Name, Comp Code, Created Date, Updated Date. A Tenant dropdown at the top lists every tenant on the platform | Pick a tenant; quick search; view only — the Edit screen has a SAVE button that does nothing (see Troubleshooting) |
| Testbed → Sending Test | peppol-testbed-sending-test | Sending tests — Test Name, Description | Create (choose one of the four PINT MY test cases, paste XML, Submit) |
| Testbed → Validation Test | peppol-testbed-validation-test | Validation test runs — Validation Test Name, Validation Test Code, Validation Test Description, Validation Test Date | Create; open a test, upload a ZIP of XML files, Run Checking, Send Only Valid XML; drill into one file to Revalidate or Send |
| Settings | settings/field-settings, settings/default-selection, plus the shared Webhook, Feature Visibility and Permission Set / User / Team / Role screens | See Configuration | — |
| Personalization | personalization/personal-default-selection, personalization/sidebar | Per-user defaults and sidebar | — |
The Registered Companies grid starts empty: its tenant code defaults to peppolap — the access point’s own tenant, which normally has no mappings of its own — and only fills in once a tenant is chosen from the dropdown.
Two things in the navigation do not do what their labels suggest. The Testbed parent entry only opens and closes its group — Sending Test and Validation Test beneath it are the screens. And the Personalization menu lists a Field Settings item that leads to the applet’s 404 page.
Inside the Inbox Queue listing there is an advanced-search box that does nothing; typing in it has no effect.
Screenshots needed
Screenshots for this applet are still to be captured. A capture session should take: the Inbox Queue listing with rows; the Inbox Queue Details read-only tab; the Registered Companies listing; the Validation Test listing; Validation Test → upload ZIP; the Checking grid showing VALID and INVALID rows with an error message; and the Sending Test input form with the Test Name dropdown open. Because every row on these screens is a real trading party’s identifier, captures must come from a scratch tenant or be redacted before publishing.
Configuration
Before you can use it
| Prerequisite | Where | Why |
|---|---|---|
| A session in BigLedger’s access-point tenant | Applet installation and login | The Inbox screens show the current tenant’s data, and the inbox is kept in BigLedger’s access-point tenant — on an ordinary customer tenant both grids are empty. Registered Companies goes further and refuses any caller that is not the access-point tenant. |
| A Peppol ID on each company that should receive documents | Organisation Applet → company → Peppol Config | Adding the ID is what creates the company’s receiver mapping, and deleting it deletes the mapping. No screen adds a mapping by hand, and My Peppol Admin’s Registration screen saves nothing. The Registration step on the Organisation tab, with the KYC PDF, puts the ID on the Peppol network so that senders can find this access point. It writes no mapping. |
| The AS4 receiving endpoint connected | Platform configuration | Without it nothing arrives in the inbox. |
| The inbox routing job running | BigLedger support | If it is not running, rows pile up in Inbox Queue and nothing is delivered onward. |
| Server-side permissions assigned | Settings → Permission Set / Role Permission | Each screen’s data is behind its own permission — see below. |
Applet settings
There are no working applet settings; both settings screens are inert:
- Settings → Field Settings shows eight slide toggles — Unit Discount, SST/VAT/GST, WHT, Blanket Order, Segment, G/L Dimension, Profit Center, Project — that are not saved, and a SAVE button that does nothing. These are the labels of a sales-document settings screen and have nothing to do with Peppol.
- Settings → Default Selection and Personalization → Default Selection offer a Default Branch and a Default Location dropdown. Changing either raises an error and SAVE saves nothing — and nothing in the applet would use either value if it did.
Settings in other applets that control this applet
| Setting | Where it is set | Effect here |
|---|---|---|
| Company Peppol participant IDs | Organisation Applet → company → Peppol Config | Each ID saved there writes one receiver mapping row, editing the ID rewrites the row, and deleting the ID deletes it. That decides whether an inbound document reaches a tenant at all. The SMP registration on the same tab decides whether senders can find the ID. Neither is done in My Peppol Admin. |
Feature visibility / permissions
The applet has no client-side permissions and no HIDE_* / SHOW_* keys, so the Feature Visibility screen has nothing to gate. Access is decided entirely server-side:
| Screen | Permission needed to read |
|---|---|
| Inbox Queue | API_TNT_DM_ERP_PPL_AP_INBOX_QUEUE_READ |
| Inbox History | API_TNT_DM_ERP_PEPPOL_AP_INBOX_DOC_HDR_READ |
| Registered Companies | No permission — the screen answers only when the caller is the access-point tenant |
| The Tenant dropdown on Registered Companies | Whatever the platform’s tenant list requires; an empty dropdown is the symptom of not having it |
| Sending Test | API_TNT_DM_ERP_PEPPOL_AP_TESTBED_SENDING_DOC_HDR_READ (create needs …_CREATE) |
| Validation Test listing and create | API_TNT_DM_ERP_PEPPOL_AP_VALIDATION_TEST_HDR_READ / …_CREATE |
| Uploaded file listing | API_TNT_DM_ERP_PEPPOL_AP_VALIDATION_TEST_FILE_ZIP_HELPER_READ |
| Run Checking and Revalidate | API_TNT_DM_ERP_PEPPOL_AP_VALIDATION_TEST_FILE_ZIP_HELPER_RUN_CHECKING_READ |
A role with none of these opens the applet and sees empty grids rather than an authorisation error.
Fields
Inbox Queue / Inbox History → Details — every control is read-only; this is a viewer, not a form. Several labels promise the Peppol envelope and deliver something else, and the gap matters when you are matching a message against the sender’s records. For a message received from the network:
| Field | What it actually holds |
|---|---|
| Sender ID | The sending participant’s Peppol ID, as it arrived in the SBDH. It is also the ID the receiving tenant’s supplier record is looked up by — for a self-billed document, the customer record — so a document from a supplier whose Peppol ID is missing or different in the tenant arrives with no supplier record linked |
| Receiver ID | The receiving participant’s Peppol ID — the value matched against the receiver mapping table |
| Document Creation Datetime | The document’s own issue date and time (midnight when the document carries no time), not the moment the envelope was created. Shown as a date only |
| Document Creation Datetime UTC | When BigLedger’s access point received the message, stored in UTC — not the creation time converted. Shown as a date only, in your browser’s time zone |
| Document Type ID | The document’s type code from inside the invoice or credit note, not the Peppol document-type identifier that names the PINT profile |
| Process ID | The document’s own number (the invoice or credit-note ID), not the Peppol process identifier — which makes it the column to search when a sender quotes an invoice number |
| Organization ID, Payload ID | Always empty — the receiving code never fills either |
| Lookup Results Status / Endpoint URL / Duration; App Domain, App Mode | Always empty — the receiving path fills none of them, so a blank here is not a failed lookup and not a reason to resend |
Registered Companies → Details — also entirely read-only: Tenant Code, Tenant Comp Peppol ID, Company Name, Company Code, Created Date, Updated Date.
Validation Test → Create — Validation Test Code, Name and Description, none of them checked; a code is not required to be unique.
Sending Test → Create
| Field | Meaning | Required | Notes |
|---|---|---|---|
| Test Name | One of four fixed PINT Malaysia test cases: PINT-TC-BISC1-1 (MY Invoice to MY recipient), -2 (MY Credit Note), -3 (MY Self Billing Invoice), -4 (MY Self Billing Credit Note) | No validator | The list is hard-coded in the component, not fetched |
| XML | The document to send, pasted as text | No validator | Nothing pasted here leaves the screen. Submit posts an empty request to an unrelated service and still toasts Send Successfully (see Troubleshooting) |
Checking grid (Validation Test → open a test → open an uploaded ZIP): No., File Name, File Size, File Format, Validation Status, Validation Error, Error Message, User Error Message, Created Date, Updated Date — one row per XML file found in the ZIP.
Lifecycle and effects
This is a master-data and operations applet. It has no document of its own, no journal and no stock movement; nothing here is finalised or voided.
Receiving — what happens to an inbound document
- An AS4 message arrives. The access point reads its Standard Business Document envelope, writes one Inbox Queue row and starts the routing job at once.
- The routing job copies the row into Inbox History — the permanent access-point record.
- It then looks up Registered Companies by the message’s receiver Peppol ID. For every mapping found it hands the document to that tenant, where it appears under External Reception.
- Finally it permanently deletes the Inbox Queue row.
Two consequences follow directly, and they are the two facts an operator needs. Inbox Queue is transient — under normal operation it is empty, because rows are removed as soon as they are routed; a row sitting in it means the routing job has not run. And a receiver ID with no mapping is not an error — the job simply finds nobody to deliver to, the Inbox History row is written, and the message is silently not delivered to any tenant.
How a mapping appears, changes and goes
A receiver mapping is written when a company’s Peppol ID is saved on the Organisation applet’s Peppol Config tab. The backend copies the tenant, the company and the ID into the access point’s own database at that moment. Editing the ID rewrites that row, and deleting the ID deletes it. This applet only reads the table.
The participant registration on the same tab does not write a mapping. That is the SMP step, with the KYC PDF. So the two can disagree. An ID can be routable here and still unknown to the network, so nothing is sent to it. Or a registration can stay on the network after its company ID was deleted, so documents arrive and land in Inbox History with nobody to deliver to.
A tenant cannot see this table, so the check that a new ID is routable belongs to BigLedger. After a customer adds an ID, an operator picks that tenant in Registered Companies and confirms one row for the ID, against the right company. A missing row means the ID was never saved in Organisation. Two rows for one ID mean two companies hold it, and both will receive every document sent to it.
Validation Test — what “Run Checking” actually checks
Run Checking checks every file extracted from the ZIP. For each file:
- the document type is inferred from the file name — a name containing
invoiceselects the invoice rules, a name containingcreditnotethe credit-note rules, anything else yields an empty type; - the XML is validated against the PINT UBL schematron for that type;
- it is validated a second time against the Malaysian jurisdiction rules, and every failed assertion is collected;
- one assertion is deliberately dropped before the verdict —
[ibr-119]-A time MUST be formatted hh:mm:ss with optional fractional seconds .sss and time zone expression (ibt-168).; - if nothing remains, the file is marked
VALID; otherwiseINVALIDwith the collected texts. The row’s Updated Date is stamped either way.
Revalidate on a single file checks that file again and returns either the failure texts or the single token THIS_DOCUMENTS_IS_VALID.
Uploading a ZIP attaches it to the open validation test. The success toast reads “Upload Image Successful” — a label inherited from the applet this screen was cloned from. The delete and download buttons on the uploaded-file screen do nothing.
Sending — Send Only Valid XML and the per-file Send do not work today; see Troubleshooting.
Related applets
- My Peppol Admin Applet — the tenant-side counterpart. Documents routed from here surface there under External Reception. Its Registration screen saves nothing and writes no mapping.
- My E-Invoice Admin Applet — the parallel LHDN pipeline; it shares the mandatory-field check but not this applet’s data.
- Organisation Applet — holds the company Peppol status and participant IDs. Adding, editing or deleting an ID there writes, rewrites or deletes the receiver mapping listed here. The SMP registration is made there too.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| Rows accumulate in Inbox Queue instead of clearing | The routing job is not running. When it runs it deletes the row it processed, so a non-empty queue is by itself the symptom. | Ask support to check the routing job on the access-point tenant. The documents are not lost — they are re-processed when it resumes. |
| A document appears in Inbox History but the customer never received it | No receiver mapping matches the message’s Receiver ID. The history row is written first and then there is nobody to deliver to — nothing fails, nothing is delivered. | Check the receiver ID against Registered Companies. If it is missing, add the ID to that company on the Organisation applet’s Peppol Config tab. Saving the ID is what creates the mapping. My Peppol Admin’s Registration screen saves nothing. |
| The same document is delivered to more than one recipient | Every mapping for that participant ID receives it, one for each company that holds the ID. | Delete the ID from the company that should not receive it, on the Organisation applet’s Peppol Config tab. Its mapping is deleted with it. There should be one mapping per participant ID. |
| Registered Companies → Edit → SAVE appears to do nothing | It does nothing, and every field on the form is read-only anyway. | Do not try to correct a mapping here. Edit or delete the company’s Peppol ID in the Organisation applet, and the mapping follows. |
| Run Checking fails with a server error for a whole ZIP | The document type is taken from the file name. A file whose name contains neither invoice nor creditnote has no type, no rule set can be found for it, and the whole run stops for every file in the ZIP. | Name each file so it contains invoice or creditnote — for example PINT-MY-invoice-01.xml, PINT-MY-creditnote-01.xml — and upload again. |
A file is reported VALID although it has a malformed time | The [ibr-119] time-format assertion is removed from the result list before the verdict is decided. | Expected behaviour of this build; validate time formats separately if they matter to you. |
| Send Only Valid XML or the per-file Send returns a 404 | The screen calls an address the server does not serve. | Use the validation results only; sending from the testbed needs a fix to the applet. |
| Sending Test → Submit toasts Send Successfully but nothing is sent | The screen sends an empty request to an unrelated service, left over from the applet it was cloned from. No Peppol message is sent. | Treat the Sending Test screen as not implemented. |
| The Inbox Queue advanced search does nothing | The search box is not connected to anything. | Sort and filter with the grid’s own column filters instead. |
| Personalization → Field Settings shows the 404 page | The menu entry leads to a screen that does not exist. | Use Settings → Field Settings (which is itself inert — see Configuration). |