Skip to content

Supplier

A supplier must exist here before any purchasing document, payment voucher or self-billed e-Invoice can name them. Suppliers, customers, employees and merchants share one entity record, so the same business can be your supplier and your customer at once — the Entity Type field on the Main tab decides which.

Overview

The Supplier applet is BigLedger’s supplier master. A supplier must exist here before a purchase requisition, purchase order, goods receipt, purchase invoice, debit or credit note, payment voucher or self-billed e-Invoice can name them. One record holds who you buy from (corporate or individual, registration and tax numbers), how you pay them (bank accounts, currency, AR/AP type, credit term and limit), how they are grouped and priced (categories, item pricing, branch and company links), and the identity data that self-billed e-Invoices and Peppol routing depend on.

It is opened by procurement staff who onboard suppliers, by finance who set payment and credit terms, and by master-data teams who bulk-load or de-duplicate supplier records. Suppliers, customers, employees and merchants are all rows in the same entity table; this applet is the supplier-typed view of it.

One entity, several roles. A supplier record is an entity marked as a supplier. The same record can also be marked as a customer, an employee or a merchant, in which case it appears in Customer Maintenance, Employee Maintenance or Merchant Admin as well. The Entity Type multi-select on the Main tab is what sets those flags.

Where it fits

DirectionApplet / documentWhy
UpstreamOrganisationCompanies and branches for Branch Linking, Company Linking and Supplier Branch
UpstreamChart of AccountsThe payable GL codes the supplier’s AR/AP type resolves to
UpstreamTax ConfigurationTax codes and rates on the Tax tab and on Item Pricing
UpstreamDoc Item Maintenance, Inventory Item MaintenanceItems referenced by the Item Pricing tab
SiblingCustomer Maintenance, Employee Maintenance, Merchant Admin, Entity MaintenanceSame table, same rows; each sibling edits its own entity type
DownstreamPurchase Requisition, Purchase Order, Blanket Purchase Order, Purchase GINEvery purchase document selects a supplier and inherits its currency, tax and addresses
DownstreamPurchase Invoice (Internal), Purchase Debit Note, Purchase Credit Note, Purchase Refund NoteThe supplier’s AR/AP type decides which payable account the journal credits
DownstreamPayment Voucher (Internal), Purchase ReportSettlement against the supplier; supplier is a filter and grouping dimension
DownstreamConsignment GIN, Consignment GRNConsignor / consignee entity on consignment stock movements
DownstreamStock ReplenishmentReads Entity Pricing to choose a supplier and price for generated purchase orders
DownstreamSupplier Delivery Order and the *-supplier-access-* appletsThe supplier’s login link is what gives their staff a portal account
DownstreamMY E-Invoice Admin, MY E-Invoice Portal, MyPeppol AdminSelf-billed e-Invoices use the supplier as issuer; Peppol IDs here are the routing target

Modules: Core, Purchasing, Financial Accounting, E-Invoice.

Screens and menus

The route base is applets/wavelet/erp/entity/supplier-applet. Left menu (every entry except Supplier can be hidden in Application Settings):

MenuRouteWhat it is
Suppliersupplier-listingThe supplier directory and the entry point to create or edit a record
Categorycategory-listingThe supplier category tree
Credit Term Listingcredit-term-listingReusable credit-term definitions
Credit Limit Listingcredit-limit-listingReusable credit-limit definitions
File Importfile-listingSupplier CSV import jobs and their per-row checking results
Upload Credit Termscredit-terms-file-listingBulk assignment of credit terms to suppliers
Upload Credit Limitscredit-limits-file-listingBulk assignment of credit limits to suppliers
File Exportfile-exportGenerates and lists supplier CSV extracts
Consolidated Arapconsolidated-arapNamed groups of entities used to give one portal login visibility of several suppliers. It holds no amounts — it is a grouping and access concept, unrelated to consolidated e-Invoicing
Entity Mergingentity-mergingFinds duplicate entities and queues a merge
Entity Merge Processingentity-merge-processingThe merge queue and its outcome per job
Audit Trailaudit-trailChange log rows for the applet (applet code, table, action, user, dates)

Settings (Settings in the sidebar) groups: System Configuration — Application Settings, Default Selection, Entity Branch Group, Resource Bundle Configuration, Custom Field Placement; Server Side Permissions — Permission Wizard, Permission Set, User / Team / Role Permission; plus Feature Visibility and Webhook. Personalization offers Default Selection and Sidebar.

Applet Settings page listing System Configuration, Server Side Permissions and Developer Tools groups
Settings: the applet's own configuration screens sit under System Configuration; the permission screens are the shared platform ones.

Creating a supplier

On the current listing the + button does not open a separate create form. It looks for an entity you previously left with status TEMP and reopens it; if there is none it inserts a new entity row with status = TEMP and opens Supplier Edit on it. The new row is pre-filled from Application Settings — Entity Type from DEFAULT_ENTITY_TYPE (default SUPPLIER), Supplier Type from DEFAULT_SUPPLIER_TYPE (falls back to CORPORATE), Identity Type from DEFAULT_ID_TYPE (falls back to BRN).

Supplier Edit Main tab on a new record showing Status TEMP, Entity Type SUPPLIER, Supplier Type CORPORATE, Identity Type BRN and AR/AP Type AP_TRADE
A newly created supplier opens in Supplier Edit at status TEMP with the tenant defaults already applied. Once Supplier Name, Currency and AR/AP Type all hold a value it saves itself as ACTIVE.
TEMP rows are real rows. Because the record is inserted before you type anything, abandoning the form leaves a blank supplier with status TEMP in the listing. The listing does not filter them out. See Troubleshooting.

The record saves itself as ACTIVE once three fields hold a value. On current builds (the change landed in December 2025), Supplier Edit watches Supplier Name, Currency and AR/AP Type; the moment all three are filled on a TEMP record it sets the status to ACTIVE and saves, without waiting for you to press Save. This mirrors the Customer applet and is deliberate: a supplier you have named is a supplier, not a stub. Two things follow. AR/AP Type arrives pre-filled (AP_TRADE unless DEFAULT_AR_AP_TYPE says otherwise) and Currency does too when DEFAULT_CURRENCY is set, so on such a tenant the first pause while you type the name is enough — the record is then ACTIVE, and if you left the Supplier Code blank it has taken a number from the supplier running number, even if you close the form straight away. And a record abandoned before a name is typed stays TEMP. Pressing Save on a TEMP record also saves it as ACTIVE. If you want a supplier kept out of purchasing until it is checked, set it to INACTIVE after that first save.

Supplier edit tabs

TabWhat it holdsHidden by
MainCore profile — see Fields. The three fields that save a new supplier as ACTIVE by themselves (Supplier Name, Currency, AR/AP Type) are all here, so this is the tab where a half-finished record stops being a stub—
E-InvoiceSelf-billed flag, tax identification number, SST and tourism-tax numbers, SIC code and business activity, plus the identity and address block that goes on a self-billed e-InvoiceHIDE_E_INVOICE
Peppol ConfigPeppol participant IDs (exactly one should be flagged Default — it is the receiver on outbound documents) and the e-Invoice notification methodsHIDE_PEPPOL_CONFIG
CategoryLinks the supplier to nodes of the supplier category treeHIDE_CATEGORY
LoginLinks an akaun.com login to the supplier — the prerequisite for every supplier-access appletHIDE_LOGIN
Applet CatalogApplet catalogues installed for the supplier’s loginsHIDE_APPLET_CATALOG
Driver LoginDriver logins used by delivery-side appletsHIDE_LOGIN (shares the Login switch)
Payment ConfigBank accounts you pay this supplier fromHIDE_PAYMENT_CONFIG
TaxCountry, tax code, type, rate and option per supplierHIDE_TAX
AddressBilling and shipping addresses, one flagged as the e-Invoice addressHIDE_ADDRESS
ContactContact peopleHIDE_CONTACT
Credit Term and LimitThe credit term and credit limit assigned to this supplierHIDE_CREDIT_TERM_LIMIT
Branch LinkingWhich of your branches may transact with this supplierHIDE_BRANCH_LINKING
Supplier BranchIntercompany supplier branch records with their own address, credit terms, control account and tax codeHIDE_INTERCOMP_BRANCH
Company LinkingPer-company AR/AP type and per-company supplier / customer / employee / merchant codeHIDE_COMP_LINKING
Item PricingSupplier-specific purchase and sales prices, tax and withholding codes per itemHIDE_ITEM_PRICING
RemarkFree textHIDE_REMARK
EmployeeEmployee-entity contextHIDE_EMPLOYEE
DocumentsPurchasing and payment documents raised against this supplierHIDE_DOCUMENT

Tab order is not fixed: Settings > Default Selection > Details Tab Ordering is a drag-and-drop list saved as SUPPLIER_DETAILS_TAB_ORDER, and the edit screen renders the tabs in that order (tabs added by a later release are appended at the end). With ENABLE_VERTICAL_UI and ENABLE_SIMPLIFIED_UI both on, the same tabs render as a stacked accordion instead of a tab strip.

Configuration

Before you can use it

PrerequisiteWhereWhy
Companies and branchesOrganisationBranch Linking, Company Linking, Supplier Branch, and the Entity Branch Group screen
Payable GL codes and company defaultsChart of AccountsThe supplier’s AR/AP type resolves to a payable account when a purchase document posts
Tax codesTax ConfigurationTax tab and the tax / withholding codes on Item Pricing
Credit terms and credit limitsthis applet (Credit Term Listing / Credit Limit Listing)They must exist before they can be attached to a supplier
Supplier categoriesthis applet (Category)The Category tab picks from this tree; the same tree is editable from Entity Maintenance
ItemsDoc Item MaintenanceItem Pricing tab
Company e-Invoice and Peppol enablementOrganisationSelf-billed e-Invoices and Peppol routing only run when the company is enabled for them
An applet installation saved at least oncethis applet (Application Settings)Until Application Settings is saved, the applet falls back to a two-key default — see below

Applet settings

Settings › Application Settings (the screen’s route is field-settings). This applet has its own settings screen rather than the shared one the document applets use, and 95 of its 107 toggles hide a menu entry, a tab or a field on the supplier form — flip one and you can see what it did. The six below change what the applet will let you do, and three of them are felt in a different module altogether. How settings are stored and who they apply to.

SettingWhat changesDefault when never savedAdvisory or hard
ALLOWED_AR_AP_TYPES — on Default Selection, not Application SettingsRestricts the AR/AP Type list on a supplier to a subset of the seven. That field is not cosmetic: the type you pick decides which payable account every purchase invoice for that supplier posts to — AP_TRADE to the company’s creditor code, AP_OTHER to non-trade creditors, AP_EMPLOYEE to employee payables. Restricting the list is how you stop a clerk from quietly re-pointing a supplier’s postingsAll seven offered — the filter is skipped when the key is emptyAdvisory — it shortens a dropdown. The API accepts any type
DEFAULT_AR_AP_TYPEPre-fills that same field on a new supplier, so it is what you get when nobody thinks about itAP_TRADEAdvisory — a pre-filled value the user can change
DEFAULT_ENTITY_TYPEDecides which of the four roles a record created here is given — supplier, customer, employee, merchant. Take SUPPLIER out of the list and records created from this applet are not suppliers, so they never appear in the supplier picker on a purchase document and the person who created them cannot see why['SUPPLIER']Advisory in the screen, permanent in the data — the roles are saved on the entity record
INSTALL_ALL_APPLETS_ON_INVITEAdds a catalogue picker to the Login tab, and the invitation then asks the platform to install every applet in the chosen catalogues for the new login. The catalogue is the boundary, and that is the point. Installing everything inside a catalogue you composed on purpose — the three or four screens a supplier needs to see their own orders and deliveries — is a reasonable convenience, and the picker is mandatory precisely so that boundary has to be chosen. What it must never become is a catalogue that is really everything the tenant has: these logins belong to people outside your company. Build a supplier catalogue, keep it small, and check what is in it before you hand it over rather than afterOff — the invitation only adds the person to the tenantAdvisory on the screen; what it sends to the platform is real
DEFAULT_CURRENCYThe currency a new supplier is created in. Every purchase document for that supplier then opens in it, which pulls in exchange rates, foreign-exchange gain and loss postings, and a base-currency conversion on every lineBlank, and the user picksAdvisory — a pre-filled value
DISABLE_SWITCHING_CREATE_MODE_SELECT_MODERemoves the create a new one instead toggle from the credit-term and credit-limit pickers, so a user linking a supplier to credit terms may only attach a definition that already exists. It is the difference between a controlled list of credit terms and one that grows every time somebody is in a hurryThe toggle is shown, on both pickersAdvisory — the toggle is not rendered

Two things about hiding a field here that hiding does not usually mean. HIDE_SUPPLIER_CODE, HIDE_SUPPLIER_NICKNAME, HIDE_EMAIL and HIDE_PHONE_NUMBER do not merely hide their field — they disable it, and a disabled field is left out of what the form saves. The value is not hidden, it is not saved. And HIDE_AUDIT_LOG_MENU is the one menu toggle with no SHOW_* escape hatch, so it takes the Audit Trail away from administrators too.

On a tenant that has never saved this screen, supplier e-mail addresses are not being stored. When no APPLET_SETTINGS row exists, the applet’s session loader substitutes {HIDE_EMAIL: true, HIDE_PHONE_NO: true}. HIDE_EMAIL is a key this applet reads, and because it disables the control rather than merely hiding it, Email is both invisible on the form and absent from every supplier record created before somebody switches Hide Email off in Application Settings and saves. HIDE_PHONE_NO is not a key this applet reads — the phone key is HIDE_PHONE_NUMBER — so phone numbers are unaffected. The fallback is a defect, not a default anyone chose, and it has been reported for a fix. Until that fix ships, the workaround is to open Settings › Application Settings on a new tenant before anyone creates a supplier, switch Hide Email off, and save. Saving without touching it is not enough: the screen opens showing the same fallback, with Hide Email on, so a plain Save stores Hide Email on.

On the screen and doing nothing

  • DEFAULT_ID_TYPE — read when a new supplier is created, where it sets the record’s identity type and falls back to BRN. No screen in this applet renders it, so there is no way to change it from the product. It matters because the identity type travels to LHDN on an e-Invoice; a supplier identified by passport or NRIC has to be corrected on the record.
  • HIDE_IDENTITY_TYPE — the supplier form honours it, and it is missing from the settings form model, so the toggle on the Main Details panel has nothing to bind to and the value cannot be set here.
  • The contact-designation and listing-contact-title hides — declared, rendered and saved, and no screen reads them.
  • The Lines Settings and Department Settings panels — eight toggles (Unit Discount, SST/VAT/GST, WHT, Blanket Order, Segment, G/L Dimension, Profit Center, Project) with no form control behind them, copied from the document-applet settings screen. Nothing is read and nothing is even saved.
  • HIDE_SUPPLIER_CODE_PREFIX and the Supplier Code Prefix input are commented out in both the settings screen and the supplier form. The prefix that does work is a separate record — ENTITY_CODE_PREFIX / SUPPLIER in the application-configuration table — written by this applet’s Settings effects, not by APPLET_SETTINGS.
  • Personalization › Default Selection offers Default Branch and Default Location and cannot save: the component is never given the applet container it writes into, so the first change throws in the browser. Nothing in this applet reads either key in any case. Saving Default Selection also writes DEFAULT_BRANCH, DEFAULT_LOCATION and the default AR/AP type as null for the same reason — three form fields with no control on the screen.

The one personal setting that does work is DEFAULT_TOGGLE_COLUMN (SINGLE / DOUBLE), written silently to your own settings whenever you use the one-column / two-column toggle on the listing.

Negative claims above are whole-identifier greps across the applet project, its bundled shared-utilities and the backend at the commit in sources.settings:.

Document behaviour settings

Not applicable — this applet maintains master records. There is no status flow beyond TEMP / ACTIVE / INACTIVE, no approval, no printable format registry and no e-Invoice submission flag on the applet itself (the supplier’s own EINVOICE_SELF_BILLED flag is a field on the record, not an applet setting).

Settings in other applets that control this applet

SettingWhere it is setEffect here
Company e-Invoice status, TIN, issuer typeOrganisation → Company → E-InvoiceSelf-billed e-Invoices built from a supplier only enter the pipeline when the company is enabled
Company Peppol status and participant IDOrganisation → Peppol ConfigWhether a supplier’s Peppol participant IDs are usable for routing
Knock Off Configuration (document flow pairs)Organisation → CompanyWhich purchase documents can be raised from which — supplier data is copied along that chain
Custom field definitionsTenant Admin → Custom Fields, then Settings > Custom Field Placement hereAdds tenant-defined fields to the supplier, address, contact, credit-term and credit-limit forms

Who can change what

The applet checks ten client-side permission codes — SHOW_CATEGORY_MENU, SHOW_FILE_IMPORT_MENU, SHOW_UPLOAD_CREDIT_TERMS_MENU, SHOW_UPLOAD_CREDIT_LIMITS_MENU, SHOW_CREDIT_TERM_LISTING, SHOW_CREDIT_LIMIT_LISTING, SHOW_FILE_EXPORT_MENU, SHOW_CONSOLIDATED_ARAP_MENU, SHOW_ENTITY_MERGING_MENU, SHOW_ENTITY_MERGING_PROCESSING_MENU — and applies each as hide = !SHOW_X && HIDE_X, so a holder of the permission keeps a menu the tenant has hidden.

None of these ten codes is defined for this applet. Until they are, there is nothing to grant, and a HIDE_*_MENU switch hides the menu for everyone including administrators. This is the same gap recorded for several other applets.

Server-side permissions (Permission Wizard, Permission Set, User / Team / Role Permission) and the Feature Visibility screen are the shared platform ones and gate access to the applet’s services in the usual way.

Fields

Main tab

FieldMeaningRequiredNotes
Supplier NameThe supplier’s legal or trading nameYes in the formThe form insists on it; the backend does not validate it, so an API or import path can create a nameless supplier
Supplier CodeYour reference for the supplierNo in the formThe form shows a * but carries no validator. Leave it blank and the backend generates one from the SUPPLIER_ID running number plus the tenant’s supplier code prefix — but only once the status is no longer TEMP. Codes are upper-cased and stripped of spaces on save, and must be unique. Disabled when HIDE_SUPPLIER_CODE is on
Supplier NicknameShort nameNoMust be unique among suppliers — the backend rejects a duplicate
Entity TypeCUSTOMER / SUPPLIER / EMPLOYEE / MERCHANT, multi-selectNoSets is_customer / is_supplier / is_employee / is_merchant; controls which sibling applets also list the record
Supplier TypeCORPORATE or INDIVIDUALYesDefaults from DEFAULT_SUPPLIER_TYPE. The backend accepts nothing else
StatusTEMP on creation, then ACTIVE or INACTIVE—Becomes ACTIVE by itself once Supplier Name, Currency and AR/AP Type are all filled, or when you save — see Creating a supplier. Only a record abandoned before that stays a TEMP stub
Identity Type / ID NumberBRN, NRIC, PASSPORT, … and the numberNo in the appletMandatory for e-Invoicing; foreigners must use PASSPORT and Malaysian NRIC is 12 digits without hyphens
CurrencyDocument currency for this supplierYes in the formDefaults from DEFAULT_CURRENCY. Not validated by the backend and not checked against the currency master
AR/AP TypeAR_TRADE, AR_OTHER, AR_MERCHANT, AP_TRADE, AP_OTHER, AP_MERCHANT, AP_EMPLOYEEYesDefaults to AP_TRADE; the list can be narrowed with ALLOWED_AR_AP_TYPES. This is what decides the payable account on posting — and the account for sales too, if you also sell to this supplier: a sales invoice raised on an AP_TRADE supplier debits CREDITOR, netting against what you owe them, with no contra document. If it somehow arrives empty the backend fills in AP_TRADE
Phone Number, EmailContact details on the headerNoDisabled when their HIDE_* switch is on
SIC Code, Business Activity DescriptionMalaysian industry classificationNo in the appletRequired on the E-Invoice tab
Default Purchase Return Pricing OptionLAST_PURCHASE_PRICE, MA_COST (Moving Average Cost) or PURCHASE_INVOICE_PRICENoThe starting price for a purchase return line added by hand, and only when the Purchase Return applet’s own Purchase Return Pricing Option is set to none — that applet setting wins. After the supplier’s option comes the company’s, then last purchase price. Lines brought in from an invoice keep the invoice’s price. See Purchase Return — Applet settings
BranchBranch on the headerNoRendered only when SHOW_LOCATION is on

The tab also takes a Company Tax Registration ID, a free-text Description, and a read-only audit block (created and modified by, with dates). None of the three is validated, defaulted or read anywhere else.

E-Invoice tab

Thirteen fields carry Validators.required: SIC code, business activity description, supplier name, ID number, contact number, email, address name, address line 1, country, state, city, postcode and e-Invoice ID type. The tab is validated as a block — a partially filled tab keeps the whole record from saving.

Seven fields are not on that list and the record saves without them: the self-billed flag, ATIGA number, FTA information, tourism-tax ID, SST number, and — the two that matter most — the tax identification number (TIN) and the e-Invoice ID value. Those last two are not checked at save; they are checked at submission, where a blank one diverts the document with “Supplier TIN is missing” or “Supplier id value is missing” (see Self-billed e-Invoices and Peppol routing). So a supplier record that saved cleanly is not evidence that its e-Invoice details are complete.

The TIN matters for suppliers you do not self-bill too. When a purchase document is finalised for a company with e-invoicing enabled, a background job adds it to the list of purchases awaiting the supplier’s own e-invoice — but only if this record carries a TIN. A supplier without one is left off that list silently, for all three of GadgetSphere’s companies at once, since they share the record (Supplier e-invoices).

EINVOICE_SELF_BILLED on this tab is the flag that routes a supplier’s invoices into the self-billed e-Invoice pipeline (document types 11–14) with the supplier as issuer.

Address tab

FieldMeaningRequiredNotes
NameLabel for the addressYesHidden by HIDE_ADDRESS_NAME
Address TypeBilling or ShippingYesReplaced by the custom list when SHOW_CUSTOM_ADDRESS_TYPE is on; forced to Billing when HIDE_ADDRESS_TYPE is on and the custom list is off
PostcodePostal codeYesMalaysia: 1–5 digits. Any other country: letters, digits, spaces and hyphens, up to 50 characters
Default address / Default e-Invoice addressFlagsNoThe e-Invoice flag picks the address that goes on an e-Invoice

An address record also holds Address Line 1–5, Country, State and City (all four required), and a delivery contact — Receiver Name, Mobile No. and Email.

Contact tab

Contact Name, Contact ID, Position and Mobile No. are required; Office No., Extension No., Fax No., Other No., Email and Phone are optional.

Payment Config tab

One field on this tab is enforced and one fills itself in; the rest are a record of the supplier’s bank details — Country, Bank (from the platform bank list), Bank Acc No., Bank Acc Holder Name, IBN Number, Account Expiry and Status.

FieldMeaningRequired
Payee Residential StatusResident / Non-Resident — drives withholding treatmentYes
Swift CodeAuto-filled from the bank you choose; you do not type itNo
Payment Config Create form with Payee Residential Status, Country, Bank, Swift Code, account number, holder name, IBN number and account expiry
Payment Config: only Payee Residential Status is enforced by the form. Swift Code fills itself in once a bank is chosen.

Tax tab

One row per country, chosen from a hard-coded list of four — Malaysia, Singapore, Thailand, Indonesia. Each row carries a Tax Type, a Tax Code, a Tax Rate and a Tax Option (INCLUDE TAX / EXCLUDE TAX); a second row for a country you already have is refused. On Malaysia the Tax Type list is fixed to the three input types — GST-INPUT, SST-SLS-INPUT, SST-SVC-INPUT — whatever the tenant’s tax codes offer. That is the deliberate mirror of the customer applet, which fixes the same list to the three output types; the shared Entity Maintenance tab applies neither guard.

All five boxes are marked required, but you cannot type the Tax Rate: it is readonly disabled and is filled by copying the chosen code’s tax_rate_filing into the form. The whole row is then stored as a TAX_DETAILS JSON extension on the entity — so the rate is a copy taken at that moment, not a live reference. Change the rate later in Tax Configuration and this row keeps the old one.

Its one consumer is the shared pricing-scheme picker: when a purchase line’s item returns no pricing scheme for this supplier, the picker offers a fallback built from the stored code, rate and type, and selecting it stamps all three onto the line. Nothing in the backend reads a TAX_DETAILS row. So this tab is not where a purchase line’s tax comes from: the tax on a line is resolved from the item and the pricing scheme, and this row is only the fallback the picker offers when that resolution returns nothing.

Credit Term and Credit Limit

A credit term and a credit limit are reusable master records; the tab attaches one of each to the supplier. Read Lifecycle and effects before you rely on them — on the purchase side neither is enforced by the backend.

Credit term — Code and Name are required. The due date is expressed as set and add parts: Set Year / Set Month / Set Day fix a component of the date, Add Year / Add Month / Add Day shift it. Credit Term Logic offers None or End of Month; choosing End of Month pre-fills Set Day = 1, Add Month = 2, Add Day = −1 and leaves Set Year and Set Month empty. That does not give the last day of the following month. With Set Year and Set Month empty the Set group is not a real date, so the arithmetic falls back to the document’s transaction date and adds the Add parts to that: a 10 March document gives 9 May, not 30 April. The word End of Month itself is kept for reference only; nothing computes a date from it. Work one example by hand before you rely on the term — Credit limits and terms, Step 1 explains the arithmetic. A purchase invoice stores no due date at all, so no purchase document will show you the result.

Credit limit — Code, Name and Currency are required; Amount is validated against ^[0-9]*$, so it takes whole numbers only. Decimals, thousands separators and currency symbols are rejected silently by the pattern.

Company Linking

Company and AR/AP Type are both required; AR/AP Type defaults to AP_TRADE. The link also carries this supplier’s per-company Customer Code, Supplier Code, Employee Code and Merchant Code, so one entity can have a different code in each of your companies.

Once a company has a link, the link decides. Because the form will not save a link without an AR/AP type, every link carries one, and posting takes the link’s type ahead of the Main tab’s for that company. So after you link a supplier to a company, changing AR/AP Type on the Main tab changes nothing for that company: edit the link instead. The form refuses a second link to the same company for the same supplier. Customer Maintenance writes to the same list of links, with the receivable trade type as its default, and a link added there shows here too — see One supplier, three companies, two roles.

Item Pricing

Per supplier and item: entity item code and name, UOM, currency, purchase unit / min / max price (with and without tax), the sales equivalents, tax code and percentage, and withholding-tax code and percentage. This is the Entity Pricing data that Stock Replenishment reads when it picks a supplier and a price for a generated purchase order — links whose entity is inactive or not of type supplier are dropped from that selection.

Login tab

The tab takes the user email or phone number of the akaun.com identity to link, a Rank and a Status. Rank defaults to MEMBER.

The flow is: type the address, Verify (checks whether the login already exists), then either Send Invite for an email or Send Tac / Verify Tac Code for a mobile number, then Invitation Accepted to resolve the new subject and Save. Save is blocked until a subject has actually been resolved. With INSTALL_ALL_APPLETS_ON_INVITE on, a catalogue picker appears and the invitation asks for every applet in the chosen catalogues to be installed for the new user.

An invitation creates a pending registration, not a link — the row in the supplier ↔ login table is written only when the invitee follows the emailed link and confirms, along with any applet catalogues and roles the invitation carried. Invitation links do not expire, so an old one stays usable until it is used. Rank defaults to MEMBER; the vocabulary is OWNER, ADMIN, MANAGER, MEMBER, GUEST, VISITOR, ANONYMOUS.

This tab is the prerequisite for every supplier-access applet. Supplier Delivery Order and the Purchase Order / GRN / Invoice / Credit Note / Return Supplier Access applets resolve the portal user from this supplier ↔ login link. Without it the supplier can sign in but sees nothing.

Lifecycle and effects

A supplier is master data. It has a status (TEMP → ACTIVE / INACTIVE) and no journal of its own — creating, editing or deactivating a supplier posts nothing to the General Ledger and moves no stock. What the record does is supply values that other documents post with.

What the backend enforces on save (on create and on update) — a save that breaks any of these is refused:

  • Status must be present.
  • Supplier Type must be exactly INDIVIDUAL or CORPORATE.
  • AR/AP type must be present — when it is not, the backend fills in AP_TRADE for a supplier (and AR_TRADE for a non-supplier) before validating.
  • Supplier Code must be unique among non-deleted entities.
  • Supplier Nickname must be unique among suppliers.
  • The internal supplier id must be unique among non-deleted entities.
  • A supplier code may not be set on a record that is not flagged as a supplier.
  • A referenced consolidated AR/AP account must exist.

Codes and the TEMP status. Codes are normalised on save — upper-cased, trimmed and stripped of spaces. Running numbers are only allocated when the status is not TEMP, so a stub record never consumes a supplier number; the number is issued at the first save as ACTIVE — which Supplier Edit does by itself once name, currency and AR/AP type are filled (see Creating a supplier). The prefix in front of the running number comes from the tenant configuration row ENTITY_CODE_PREFIX / SUPPLIER, not from an applet setting (the applet’s own prefix control is commented out).

What the supplier contributes when a purchase document is finalised

Field on the supplierWhere it is used
AR/AP TypeSelects the payable account — see the posting block below. It is read from the supplier when the document posts, not copied onto the document, so changing it moves the payable account for every document posted from then on, including ones raised before the change
Company Linking (per-company AR/AP type)Takes precedence over the header AR/AP type for the company raising the document
Item PricingDefault purchase price, tax code and withholding code on purchase lines
Name, addresses and contactsCopied onto the document when it is created. The server fills that copy only when a document arrives without one and never refreshes it, so correcting the supplier here leaves documents already raised showing the old details — the opposite of AR/AP Type above
E-Invoice block and self-billed flagIssuer identity on a self-billed e-Invoice
Peppol participant IDsThe routing target; the ID flagged Default is the receiver

Deactivating a supplier does not touch documents already raised against it. Creating, updating or deleting a supplier fires the SUPPLIER_CREATED / SUPPLIER_UPDATED / SUPPLIER_DELETED webhooks.

Deleting is blocked while money is outstanding. The delete is refused when any active generic document for the entity still has a non-zero AR/AP balance. Otherwise the header is soft-deleted and the extension, line, login-link and payment-method rows are removed outright.

How the AR/AP type reaches a GL code

Posting is done by the document, not by this applet — this is what the supplier contributes to it.

  1. Posting uses the effective AR/AP type: the company’s Company Linking value if it has one, otherwise the supplier’s own — so a per-company override always wins.
  2. It maps that type to a transaction code: AP_TRADE → CREDITOR, AP_OTHER → CREDITOR_NON_TRADE, AP_MERCHANT → MERCHANT_PAYABLE, AP_EMPLOYEE → EMPLOYEE_OTHER_PAYABLE, AR_TRADE → DEBTOR, AR_OTHER → DEBTOR_NON_TRADE, AR_MERCHANT → MERCHANT_RECEIVABLE. Consignment flows ignore the entity’s type and use the document type’s own default instead.
  3. The code is looked up in the company’s default GL codes — but only when the document’s other lines leave something to balance; a document whose lines total zero needs no supplier line and posts without one. If there is no default for the code, the document still goes FINAL; the journal posting that runs after it fails with MISSING_DEFAULT_GL_CODE: CREDITOR and the document is left FINAL with no journal. If the company has no mappings at all, the posting fails because the company has no default GL codes.

A half-configured mapping fails too — with a less helpful error. If the GL mapping row exists but has no sub-ledger, the creditor line is left out of the journal, the journal no longer balances, and the posting refuses it with TOTAL_DEBITS_AND_TOTAL_CREDITS_NOT_BALANCES. Nothing unbalanced is posted: the document is FINAL with no journal at all, exactly as with a missing row, but the error names the balance rather than the code. The same happens when the supplier’s effective AR/AP type is blank. Saving a code on the company’s Default GL Codes tab normally creates its sub-ledger (Chart of Account), so this is the rarer case.

How you find out. After finalising the first document for a new supplier or company, check that it has a journal: on a purchase invoice, the Posting tab in Purchase Invoice (Internal) should show the journal posted, and Financial Report › Error Checking › Trace Document on that document reports a missing journal and offers Resolve to re-run the posting once the mapping is fixed.

One supplier, three companies, two roles

GadgetSphere’s three companies share one supplier master: a supplier is one record, whichever company buys from it. Take one of its 1,200 suppliers, for example, an accessory wholesaler billing in ringgit.

  • GadgetSphere Distribution (GSD) buys stock from it — about RM 40,000 a month on 60-day terms. That is trade, so the Main tab’s AR/AP Type stays at the trade payable default, and GSD’s purchase invoices credit your trade creditors account, LIAB-SUPPLIER-TRADE.
  • GadgetSphere Sdn Bhd (GS) buys only shop-display fixtures and co-op marketing from it. Those are not stock purchases, and your accountant wants them in non-trade creditors. Add a Company Linking row for GS with the non-trade payable type: GS’s invoices now credit non-trade creditors while GSD’s still credit trade creditors, from one record. That is what the per-company type is for, and it beats a second supplier record, which would split the wholesaler’s documents, contacts and e-invoice details between two.
  • The wholesaler also buys from you. GSD sells it about RM 5,000 a month of returned demo stock, so somebody adds Customer to its Entity Type. Change nothing else, and GSD’s sales invoice to it debits the same trade creditors account: the RM 5,000 comes off the RM 40,000 you owe, and the account shows RM 35,000, the amount you will actually pay. It is a contra without a contra document, and for a partner you trade with both ways it is usually what you want.

The trap is the fourth step nobody plans. Months later someone in sales opens the same record in Customer Maintenance and adds a company link for GSD there. That form defaults a link to the receivable trade type, and the link now wins for GSD in both directions. The next RM 40,000 purchase invoice credits your trade debtors account: trade creditors is RM 40,000 below the wholesaler’s statement, and trade debtors carries an RM 40,000 credit nobody can place. Nothing fails and nobody is told — both accounts exist and the journal balances.

Where the number came from: the payable account is not stored with the supplier’s invoices; each posting reads the type as it stands when the posting runs. So the fix is the link’s type, and it only moves what posts next. Invoices already posted keep their journals until you rebuild them: Repost beside Posting Journal in Financial Report › Error Checking › Trace Document deletes an invoice’s journal and builds it again from the invoice with the type as it now stands (Purchase Invoice (Internal)). A correcting journal is the other way.

What credit terms and limits actually do

On the purchase side, neither is enforced. Nothing in the backend reads a supplier’s purchase credit limit at posting time — there is no block and no warning. The purchase credit limit can be recorded, imported and queried, and nothing acts on it; available credit is worked out for the sales limit only. Nothing derives a due date from a supplier’s credit term either — a purchase invoice stores no due date at all. Its Due Date field is switched off, and the terms are stored on the invoice only when Purchaser is filled (Purchase invoice processing, Step 1). Track when a supplier falls due from the invoice date and the terms. The only server code that reads a credit term is statement-of-account reporting, and it is hard-coded to the sales tables.

The blacklist machinery that does block documents (credit_limit_status = BLACKLISTED, message “Customer is blacklisted due to credit limit. Transactions are not allowed for this customer.”) is scoped to customers: the Blacklist Overdue Customer sweep — which is not one of the default clocks and runs only where somebody has scheduled it or runs it by hand — only queries is_customer, and the block only applies to four sales document types. Because the flag lives on the shared entity header, an entity that is both customer and supplier can be blacklisted for its receivables behaviour — but that still only stops its sales documents.

Treat supplier credit terms and limits as recorded, reportable, importable policy — not as a control.

Sales and purchase credit terms are stored in separate tables, so a supplier that is also a customer keeps two independent sets. The entity header carries default_sales_credit_term_guid and default_sales_credit_limit_guid; there are no purchase equivalents.

Bulk load and extract

File Import takes one UTF-8 CSV with a chosen delimiter — PIPE, COMMA (preselected), SEMICOLON or TAB. Four columns are mandatory: SUPPLIER_NAME, SUPPLIER_TYPE, DOC_CURRENCY, ARAP_TYPE. Forty-one column names are recognised in total, covering supplier code, identity type and ID number, tax registration number, description, phone and email, a twelve-field billing block and a twelve-field shipping block, the self-billed flag, SST registration and tourism-tax numbers, SIC code, the e-Invoice tax identification number and the supplier category code. Column order does not matter, but a column name the importer does not recognise fails the whole file rather than being ignored. Sample Format downloads a template in the delimiter you selected.

Processing is two-stage: the file is parsed into per-row helper records, then each row is validated and created. The check stage is all or nothing — if any row fails a check, the job ends FAILED before a single supplier is created. Once the checks pass, rows are created one at a time, and a row that fails there is marked failed and the job ends FAILED without undoing the rows already created. So a FAILED job does not always mean nothing happened: before you upload the same file again, search for the codes in the file to see which rows are still missing. Per-column messages such as “SUPPLIER TYPE is Invalid”, “DOC CURRENCY is Invalid” or “Supplier Category Code is Invalid” are rolled up into the row’s validation description, which the job’s Checking tab shows.

An import updates as well as creates, and the supplier code decides which records it can touch.

The row carriesIt is matched againstWhen it matches
A supplier codeThat code onlyThe record is updated. A code nobody holds creates a new supplier — even when the same business is already in your master as a customer
No supplier codeEvery record you hold that is not deleted, customers and employees included: ID number, then tax registration number, SST number, e-mail, phone — the first that finds a record wins, and the newest such record is takenThe record is updated and made a supplier. A customer that shares a phone number or e-mail with the row is enough

An update writes every value the row carries, and four values are always carried, because the check stage refuses a row without them: the name, the supplier type, the currency and the AR/AP type. So a matched record always takes the sheet’s AR/AP type — for a customer that also sells to you, its sales invoices then post to the payable account (the worked example above shows what that does to two control accounts). Unlike the customer import, a blank AR/AP type is refused at the check stage rather than read as a default. A misspelt one passes the checks and fails that row when it is saved.

Prevention: before you load into a populated master, check the sheet against your customers by registration number. For each business you already hold, open that customer record, add Supplier to its Entity Type and set the AR/AP type yourself; take it out of the sheet. Give every remaining row a supplier code, so that none of them can land on a record you did not mean. Load five rows first and open what they changed.

File Export generates a supplier CSV for a created-date range; the listing tracks status and offers download or delete per file. Files are capped at 1,000 rows — a larger extract is split into SUPPLIER_EXPORT_<timestamp>_PART<n>_OF_<total>.csv, each with its own header row. Only one export may be queued at a time; a second request is answered with “Please wait until the current file finishes before generating additional files.”

The export is not a copy of the e-Invoice data. The supplier export writes only the eleven core columns plus the billing and shipping blocks. It omits EINVOICE_TAX_ID_NO, EINVOICE_SELF_BILLED, SST_REG_NO, TOURISM_TAX_ID, SIC_CODE and SUPPLIER_CATEGORY_CODE, so it is no backup of them. Re-importing it does not erase them: for a row whose supplier code already exists, the importer changes a field only when the file carries a value for it, and a missing column or an empty cell leaves the stored value alone. Two consequences. You cannot clear one of those fields by importing a blank — edit it in the applet. And a re-import sets the supplier’s e-Invoice identity type and number from IDENTITY_TYPE and ID_NUMBER, as a save in Supplier Edit does, so check those two columns before you re-import.

Upload Credit Terms and Upload Credit Limits are the same mechanism for attaching credit definitions to suppliers in bulk.

Import File Create with the delimiter dropdown open showing PIPE, COMMA, SEMICOLON and TAB, next to the file import listing
File Import: pick the delimiter before uploading — COMMA is preselected — and use Sample Format to get a template in that same delimiter.
Supplier File Export listing with a created-date range, a Generate CSV button and per-row download and delete actions
File Export: Generate CSV queues an extract; the row becomes downloadable when its status reaches DONE.

Entity merging

Merging is a platform function shared with customer maintenance, not something local to this applet.

  1. On Entity Merging, choose a Merge Criteria — Entity Name, Entity ID No, Entity Phone or Entity Email — type at least two characters of a search term and optionally adjust the similarity threshold (0.7 by default). The grid stays empty until all three are supplied; the search is fuzzy, not exact-substring.
  2. Results are grouped by the normalised criteria value. Open a group and mark exactly one entity Keep as main and one or more Merge and delete. The action is refused unless there is one main and at least one merge target.
  3. Confirming queues the merge (IN_QUEUE), with the surviving record and the records being merged into it.
  4. Entity Merge Processing shows the main and old entity codes and names, the merge status and a merged/total counter.

Two processors then run in sequence. The first swaps the entity GUID; the second refreshes the denormalised entity snapshots on generic document headers — the entity JSON, the sales entity name and code, the three person-in-charge slots, the delivery entity and the e-Invoice buyer and supplier blocks. The queue moves through IN_QUEUE → MERGING → DATA_REPLACING_IN_PROGRESS → SUCCESSFUL or FAILED; failures carry an error message on the row. The merged-away suppliers are set to INACTIVE, not deleted.

Merging cannot be undone, and it is not narrow. A merge re-points references to the merged-away records at the surviving one, across posted documents, journal rows and balance tables, with no filter for status, posting state or a locked fiscal period — on a document it changes the customer, the e-Invoice buyer and supplier, the sales agent, the reseller and the shipping recipient. But it is not complete: some references are not followed, notably the default sales agent carried on other entity records, which is left pointing at the merged-away record. Nothing is copied from the losing records either: a tax number, an address or a credit limit held only by the record you merged away stays only on it. Nothing prevents someone editing or transacting against the entity while the merge is running, and the merge history records only how many records were changed, not which, so even a manual reversal cannot be reconstructed. There is also no check that the entities are the same kind: nothing stops a customer being merged into a supplier. Treat a merge as a one-way, out-of-hours operation on data you have checked twice.

Self-billed e-Invoices and Peppol routing

When a purchase document is submitted as a self-billed e-Invoice, this record supplies the supplier party block: tax identification number, e-Invoice ID type and value, ID number, SST number, tourism-tax ID, industry classification code and business activity description.

Missing data does not raise an error — the document is diverted with a reason recorded against it. The reasons are, verbatim, “Supplier TIN is missing”, “Supplier id type is missing”, “Supplier id value is missing”, “Supplier id no is missing” and “Supplier business activity description is missing”. A blank SST or tourism-tax number is substituted with NA and a blank industry classification code with 00000, so those two never stop a submission — they just go out wrong.

The tax identification number is not validated against the tax authority when the document is generated; validation happens only in the separate TIN update and bulk-upload flows, so a wrong-but-present number surfaces as a rejection after submission.

For Peppol, the receiver on an outbound document is the participant ID flagged Default on this supplier. The lookup takes the first matching row with no tie-break, so flagging two IDs as default gives a non-deterministic result. There is no separate scheme field — the identifier scheme is fixed, so the ICD prefix (for example 0230:) has to be part of the participant ID string itself.

How you know a supplier is ready for the first purchase invoice

About two minutes, on a supplier you have just set up or imported:

  1. Company Linking tab. For each company with a row, that row’s AR/AP type is what the company posts with; for a company with no row, it is the Main tab’s. Read them as an accountant would — trade or non-trade, and never a receivable type unless you mean the supplier’s purchases to net against what it owes you.
  2. The company’s default GL codes. In Chart of Accounts, each company that will buy from the supplier has a GL code for the creditor key that type maps to — trade creditors for the trade payable type, non-trade creditors for the non-trade one.
  3. Reopen the record and look at Email. If it is empty although you typed one, the tenant has never saved Application Settings and the address was not stored (Applet settings).
  4. E-Invoice tab, TIN. Filled for any supplier that issues e-invoices to you, so its purchases reach the matching list; for one you self-bill, also the ID type and value, the ID number and the business activity description, the fields whose absence diverts a self-billed document.
  5. After the first purchase invoice is finalised: open it in Purchase Invoice (Internal) and check that its journal is posted and that the journal’s credit lands on the payable account you meant — LIAB-SUPPLIER-TRADE for a trade supplier — for the invoice total less anything paid on its Payment tab. An empty journal is the missing-mapping case in How the AR/AP type reaches a GL code.

When all five hold, the supplier’s invoices post to the account you chose, reach the e-invoice matching list, and the record holds the contact details you typed.

What stays your job

  • Deciding each company’s payable type. BigLedger posts with whatever type it finds; whether the wholesaler is trade for GSD and non-trade for GS is the accountant’s decision. Whoever owns the supplier master reviews the Company Linking rows of any record that is also a customer once a quarter, since a link added from Customer Maintenance changes them without anyone opening this applet.
  • Checking bank details before money moves. The Payment Config tab records the account you type; nothing on it confirms the account belongs to the supplier. Before the first payment to a new account, or after a change, confirm it with the supplier on a phone number you already held, and keep the person who edits supplier bank details apart from the person who releases payments.
  • Choosing what a bulk load may touch. The importer matches on whatever it is given (see Bulk load and extract); deciding which rows are new and which are businesses you already hold is done before the upload, not after.

Related applets

Troubleshooting

SymptomCauseFix
The listing fills with blank suppliers whose status is TEMP; users report records were lostPressing + inserts an entity row with status = TEMP before anything is typed, and the listing does not filter TEMP out. Abandoning the form before a name is typed leaves the stub forever (once name, currency and AR/AP type are filled the record saves itself as ACTIVE)Nothing was lost. Filter the listing to Active. Only press + when you intend to save. Housekeeping of accumulated stubs is a support request
Pressing + reopens a half-finished supplier instead of a blank oneBy design: + first looks for an entity you last updated with status = TEMP and resumes itFinish or deliberately abandon the existing draft; there is one draft per user
Save is greyed out on a new supplierSupplier Name, Supplier Type, Currency or AR/AP Type is empty — those four carry the form validators. On older builds Supplier Code also appeared to be required (it is not; leave it blank and the backend allocates one)Fill the four. If the form is invalid with nothing visibly flagged, see the next row
The form reports invalid but no field shows an error, and values from fields no longer on screen appear in the saved payloadOrphaned custom-field controls left behind when a custom-field layout re-renders — their required validators stay attached. Fixed in the shared custom-field form componentReload the record. If it persists on an older build, upgrade the applet
Email is missing from the supplier form on a brand-new tenantWith no APPLET_SETTINGS row yet, the session loader substitutes {HIDE_EMAIL: true, HIDE_PHONE_NO: true}Open Settings > Application Settings, switch HIDE_EMAIL off and Save once. That writes a real settings row
A menu or tab has disappeared and no permission brings it backA HIDE_* switch is on and the paired SHOW_* client-side permission is not seeded for this appletTurn the HIDE_* switch off in Application Settings; per-role visibility is not available until the permission codes are seeded
A newly defined custom field does not appear on the supplier formThe applet reads a cached CUSTOM_FIELD_PLACEMENTS snapshotReload the applet. On builds before the refresh fix, open Settings > Custom Field Placement once to force the snapshot to update
Created By / Modified By on the supplier header names the wrong userThe header used the denormalised created_by_name / updated_by_name, which were stamped at the TEMP insert rather than at save; every other screen resolves the name from the subject GUIDTrust the audit trail and the other screens; upgrade for the header fix
A credit limit of 50,000.00 will not saveThe Amount field is validated against ^[0-9]*$ — whole numbers onlyEnter 50000. No decimal point, no comma, no currency symbol
An overseas supplier’s postcode is rejected, and their e-Invoice fails address validationMalaysian postcodes are limited to five digits; the alphanumeric pattern applies only when the country is not MalaysiaSet Country before Postcode. On older builds the field accepted digits only for every country
Saving fails with a duplicate-nickname errorSupplier Nickname is unique across suppliers on the backend, though the form does not check it as you typeGive the supplier a distinct nickname, or clear it. On builds before this check was added, duplicates already in the data stay until edited
Entity Merging shows nothingThe grid needs a Merge Criteria and a search term of at least two characters before it queriesChoose the criteria, type at least two characters, then search. Lower the similarity threshold if near-matches are missing
Duplicates you can see are not offered as a mergeThey were not grouped into a suggestion, and entities selected individually are refusedSearch on a different criteria (ID No or Phone often groups better than Name), or lower the threshold
A merge appears to have done nothingThe merge is queued and processed asynchronously; documents carry a denormalised copy of the entity name that is rewritten job by jobCheck Entity Merge Processing for the merge status, the merged/total counter and any error message
A CSV import ends with a failed process statusDelimiter mismatch, a missing mandatory column, a column name the importer does not recognise, or an invalid value in any rowDownload Sample Format in the delimiter you intend to use, remove extra columns, then re-upload and read the Error Message and the Checking tab. The checks are all-or-nothing: a row that fails a check means no supplier was created. A row that fails later, while being saved, does not undo the rows before it — check what exists before uploading again
You blanked a supplier’s SST number, tourism-tax ID, SIC code, e-Invoice TIN, self-billed flag or category in an import file, and the stored value is still thereFor a supplier code that already exists, the importer writes a field only when the file carries a value; an empty cell or a missing column leaves the stored value as it wasClear those fields in Supplier Edit. Import changes them only to a new, non-blank value
After a supplier import, a customer now appears in the supplier listing, or its name or currency changedA row with no supplier code matched it on ID number, tax registration, SST number, e-mail or phone, and the import updated it and made it a supplier — with the sheet’s AR/AP typeSet the record’s AR/AP type back and decide whether it should stay a supplier. Next time give every row a code (Bulk load and extract)
One company’s purchase invoices from a supplier credit trade debtors, while another company’s credit trade creditorsThat company has a Company Linking row with a receivable type — often added from Customer Maintenance, whose link defaults to it. The link wins over the Main tab for that companyChange the link’s type, then Repost each invoice already posted (the worked example)
A large export produced several filesFiles are capped at 1,000 rows and split into …_PART<n>_OF_<total>.csv, each with its own headerExpected. Concatenate them, dropping the repeated header rows
Saving a supplier fails with “the supplier_code … should not be set”, but you did set a supplier code and it belongs on a supplierThe duplicate-supplier-code check is wired to the wrong message template, so a duplicate code reports itself as “should not be set”Check whether another non-deleted entity already uses that supplier code. The genuine “should not be set” error only occurs when a code is present on a record not flagged as a supplier
A purchase document is FINAL but its Journal Txn grid is empty. The reason BigLedger support reads is MISSING_DEFAULT_GL_CODE: CREDITOR; no screen shows it until you press ResolveThe company has no GL mapping for the transaction code the supplier’s AR/AP type resolves to. FINAL succeeded; the journal posting after it failedAdd the mapping in Chart of Accounts / the company’s default GL codes, or change the supplier’s AR/AP type; then Financial Report › Error Checking › Trace Document → Missing Journal → Resolve on each affected purchase invoice, return, credit or debit note or payment voucher. A refund note reads Unsupported document type there: ask BigLedger support to post it. A consignment billing reads the same, but you can post it from the Stock Flow Report’s Difference Listing (Purchase Consignment row, CREATE)
A purchase document is FINAL but has no journal; the reason BigLedger support reads is TOTAL_DEBITS_AND_TOTAL_CREDITS_NOT_BALANCES (Resolve, pressed before the fix, shows Total Debits: …, Total Credits: …)The creditor line was left out, so the journal could not balance and none was written: the company’s mapping row for the creditor code has no sub-ledger, or the supplier’s effective AR/AP type is blankComplete the mapping row or set the AR/AP type, then Trace Document → Missing Journal → Resolve on each affected document, or ask BigLedger support for a type Trace Document does not accept
There is no Delete on a supplierThis applet’s supplier form has none (its Remove button is commented out). The Remove button on a purchase document’s supplier panel does delete, by marking the record DELETED, and it checks neither outstanding documents nor balancesSet the supplier INACTIVE instead. Do not use Remove on a supplier that has documents: they keep pointing at a record no picker shows
A self-billed e-Invoice never reached the tax authorityA required supplier field was blank. The document is diverted with a reason such as “Supplier TIN is missing” rather than failing loudlyFill the E-Invoice tab: TIN, e-Invoice ID type and value, ID number and business activity description. A blank SST number or industry classification does not stop submission — they are sent as NA and 00000
Peppol documents go to the wrong participantMore than one Peppol ID is flagged Default, and the receiver lookup takes the first match with no tie-breakFlag exactly one. Remember the identifier scheme is fixed, so the ICD prefix has to be inside the participant ID string
A supplier’s outstanding balance looks wrong after a mergeThe merge rewrites entity references across the whole tenant database, including posted documents, and runs asynchronouslyWait for Entity Merge Processing to report SUCCESSFUL, then re-run the report. A merge cannot be undone — the history row records only how many rows changed
Your supplier count does not match the legacy systemThe number on the listing footer is the page count, not the record countCompare against a File Export instead
The supplier’s portal login sees no dataThe akaun.com login is not linked on the Login tabLink it there; the supplier-access applets resolve the portal user from that link
A code you typed came back upper-cased with the spaces removedThe backend normalises supplier, customer, employee and merchant codes on save (sanitiseCode). The master screens also force-uppercase typed input, email exceptedExpected behaviour — search on the normalised form
The main address cannot be savedOn older builds the main address type was not editable from this appletEdit it from Entity Maintenance, or upgrade — a Main Address option was added to the address-type list

Related documentation

Last updated on