Sovos Docs

Show Page Sections

Malaysia

Enabling support for Malaysia involves confirming prerequisites and product IDs, registering with the Inland Revenue Board of Malaysia (IRBM) tax authority, and setting up credentials or registering Sovos as an intermediary.

Prerequisites

Basic integration
Intermediary integration
Register Sovos as an intermediary using MyInvois (https://mytax.hasil.gov.my/). Use the following values:
PropertyValue
TINC58775637030
BRN202401023235
Name
UAT
SXXX_XXXXD
PROD
SOVOS COMPLIANCE SDN.  BHD.
Note:

To switch from basic to intermediary integration, contact the Sovos Professional Services team.

General requirements

Available products

my_UBLInvoice__1.0
Outbound electronic invoice
my_UBLInvoice_Polling_1.0
Inbound electronic invoice

Error handling

When handling errors, the client application must follow the Indirect Tax API's error handling principles, as specified in the error handling documentation.

In general, all error codes in the 400 range are client errors, which you need to analyze. After fixing the error, you can resend the request. Error codes 408 and 429 are exceptions: In these cases, you should wait at least 60 seconds before retrying. Error codes in the 500 range are server errors. In that case, resend the request according to the instructions given on the error handling documentation, which also includes a full list of error codes Indirect Tax API can return.

Note:

In the event of an error while consulting document details, the response will return a generic 200 status notifying you that the call was successful, but the content of the response will contain the "errors" object instead.

Errors coming from the tax authority are shown in the application response. This means that if the tax authority rejects the request, SCIResponseCode is set to "RE" and any error codes will be located in the SCIGovtStatusCode element.

Note:

You need to take action after receiving an error code and a message from the tax authority.

For additional help on error handling, see this government documentation, which includes all the error codes and messages that the tax authority can return.

Configure credentials for Malaysia

You only need to upload transmission, polling, or signing credentials for your company if you are using basic integration. If your company has registered Sovos as an intermediary, you can skip this configuration.
  1. Send a POST request to the endpoint URL:
    POST https://api-test.sovos.com/v2/configurations/organizations/{orgId}/settings
  2. Include the following headers in your request:
    • Content-Type: application/json

    • Authorization: Bearer {accessToken}

    • x-correlationId: {uniqueValue}

  3. Optional: For transmission and polling credentials, include the following parameters inside the JSON payload in the request body.
    NameTypeRequiredDescription
    contextstringYesUse "transmission" or "polling"
    configurationsarray of objectsYes
    namestringYesUse "partner_credentials_irbm"
    valueobjectYes
    clientIdstringYesThe client ID obtained from IRBM
    clientSecretstringYesThe secret obtained from IRBM
    scopeobjectYes
    categorystringYesUse "MY_INV"
    productIdstringYesUse "my_UBLInvoice__1.0"
    orgIdstringYesThe organization ID obtained from the Sovos Professional Services team
    taxIdstringYesThe tax ID of the company
  4. Optional: For signing credentials, include the following parameters inside the JSON payload in the request body.
    NameTypeRequiredDescription
    contextstringYesUse "signing"
    configurationsarray of objectsYes
    namestringYesUse "credentials"
    valueobjectYes
    certificateFileDatastringYesThe Base64-encoded contents of the signing certificate (private key) obtained from a trusted CA.
    Note:

    To convert your certificate to Base64, see the SSL certificate conversion to Base64 format documentation.

    passwordstringYesThe password retrieved from the CA
    scopeobjectYes
    categorystringYesUse "MY_INV"
    productIdstringYesUse "my_UBLInvoice__1.0"
    orgIdstringYesThe organization ID obtained from the Sovos Professional Services team
    taxIdstringYesThe tax ID of the company

Upon successful creation, the API will return a JSON object containing the uploaded credentials and their assigned SETTING-ID.

Samples for uploading credentials for Malaysia

Transmission credentials

Request sample
curl --location --request POST 'https://api-test.sovos.com/v2/configurations/organizations/{orgId}/settings' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {accessToken}' \
--header 'x-correlationId: {uniqueValue}' \
--data-raw '[
    {
        "context": "transmission",
        "configurations": [
            {
                "name": "partner_credentials_irbm",
                "value": {
                    "client_id": "INSERT-CLIENTID-HERE",
                    "client_secret": "INSERT-SECRET-HERE"
                },
                "scope": {
                    "category": "MY_INV",
                    "productId": "my_UBLInvoice__1.0",
                    "orgId": "YOUR-ORG-ID",
                    "taxId": "YOUR-COMPANY-TAXID"
                }
            }
        ]
    }
]'
Response sample
{
    "status": 201,
    "message": "Created",
    "success": true,
    "timestamp": 1664826411521,
    "data": [
        {
            "message": "Configurations are created",
            "statusCode": 201,
            "configurationContextResponse": {
                "context": "Transmission",
                "configurations": [
                    {
                        "id": "SETTING-ID",
                        "name": "partner_credentials_irbm",
                        "value": {
                            "client_id": "INSERT-CLIENTID-HERE",
                            "client_secret": "INSERT-SECRET-HERE"
                        },
                        "scope": {
                            "category": "MY_INV",
                            "productId": "my_UBLInvoice__1.0",
                            "orgId": "YOUR-ORG-ID",
                            "taxId": "YOUR-COMPANY-TAXID"
                        },
                        "auditData": {
                            "createdAt": 1664826410,
                            "createdBy": "user@company.com",
                            "isDeleted": false,
                            "version": 1
                        }
                    }
                ]
            }
        }
    ]
}

Polling credentials

Request sample
curl --location --request POST 'https://api-test.sovos.com/v2/configurations/organizations/{orgId}/settings' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {accessToken}' \
--header 'x-correlationId: {uniqueValue}' \
--data-raw '[
    {
        "context": "polling",
        "configurations": [
            {
                "name": "partner_credentials_irbm",
                "value": {
                    "client_id": "INSERT-CLIENTID-HERE",
                    "client_secret": "INSERT-SECRET-HERE"
                },
                "scope": {
                    "category": "MY_INV",
                    "productId": "my_UBLInvoice_Polling_1.0",
                    "orgId": "YOUR-ORG-ID",
                    "taxId": "YOUR-COMPANY-TAXID"
                }
            }
        ]
    }
]'
Response sample
{
    "status": 201,
    "message": "Created",
    "success": true,
    "timestamp": 1664826411521,
    "data": [
        {
            "message": "Configurations are created",
            "statusCode": 201,
            "configurationContextResponse": {
                "context": "Polling",
                "configurations": [
                    {
                        "id": "SETTING-ID",
                        "name": "partner_credentials_irbm",
                        "value": {
                            "client_id": "INSERT-CLIENTID-HERE",
                            "client_secret": "INSERT-SECRET-HERE"
                        },
                        "scope": {
                            "category": "MY_INV",
                            "productId": "my_UBLInvoice_Polling_1.0",
                            "orgId": "YOUR-ORG-ID",
                            "taxId": "YOUR-COMPANY-TAXID"
                        },
                        "auditData": {
                            "createdAt": 1664826410,
                            "createdBy": "user@company.com",
                            "isDeleted": false,
                            "version": 1
                        }
                    }
                ]
            }
        }
    ]
}

Signing credentials

Request sample
curl --location --request POST 'https://api-test.sovos.com/v2/configurations/organizations/{orgId}/settings' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {accessToken}' \
--header 'x-correlationId: {uniqueValue}' \
--data-raw '[
    {
        "context": "signing",
        "configurations": [
            {
                "name": "credentials",
                "value": {
                    "certificateFileData": "INSERT-CERT-HERE",
                    "password": "INSERT-PASSWORD-HERE"
                },
                "scope": {
                    "category": "MY_INV",
                    "productId": "my_UBLInvoice__1.0",
                    "orgId": "YOUR-ORG-ID",
                    "taxId": "YOUR-COMPANY-TAXID"
                }
            }
        ]
    }
]'
Response sample
{
    "status": 201,
    "message": "Created",
    "success": true,
    "timestamp": 1667465886908,
    "data": [
        {
            "message": "Configurations are created",
            "statusCode": 201,
            "configurationContextResponse": {
                "context": "Signing",
                "configurations": [
                    {
                        "id": "SETTING-ID",
                        "name": "credentials",
                        "value": {
                            "certificateFileData": "*****",
                            "password": "*****"
                        },
                        "scope": {
                            "category": "MY_INV",
                            "productId": "my_UBLInvoice__1.0",
                            "orgId": "YOUR-ORG-ID",
                            "taxId": "YOUR-COMPANY-TAXID"
                        },
                        "auditData": {
                            "createdAt": 1667465886,
                            "createdBy": "user@company.com",
                            "isDeleted": false,
                            "version": 1
                        }
                    }
                ]
            }
        }
    ]
}

Update credentials for Malaysia

  1. Send a PUT request to the endpoint URL:
    PUT https://api-test.sovos.com/v2/configurations/organizations/{orgId}/settings/{settingId}
  2. Include the following headers in your request:
    • Content-Type: application/json

    • Authorization: Bearer {accessToken}

    • x-correlationId: {uniqueValue}

  3. Optional: For transmission and polling credentials, include the following parameters inside the JSON payload in the request body.
    NameTypeRequiredDescription
    valueobjectYes
    clientIdstringYesThe client ID obtained from IRBM
    clientSecretstringYesThe secret obtained from IRBM
  4. Optional: For signing credentials, include the following parameters inside the JSON payload in the request body.
    NameTypeRequiredDescription
    valueobjectYes
    certificateFileDatastringYesThe Base64-encoded contents of the signing certificate (private key) obtained from a trusted CA
    passwordstringYesThe password retrieved from the CA

Upon successful creation, the API will return a JSON object containing the uploaded credentials and their assigned SETTING-ID.

Samples for updating credentials for Malaysia

Transmission and polling

Request sample
curl --location --request PUT 'https://api-test.sovos.com/v2/configurations/organizations/{orgId}/settings/{settingId}' \
--header Content-Type: application/json \
--header Authorization: Bearer {accessToken} \
--header x-correlationId: {uniqueValue} \
--data-raw '{
    "value": {
        "client_id": "INSERT-CLIENTID-HERE",
        "client_secret": "INSERT-CLIENTSECRET-HERE"
    }
}'
Response sample
{
    "status": 200,
    "message": "OK",
    "success": true,
    "timestamp": 1664826591499,
    "data": {
        "id": "SETTING-ID",
        "name": "partner_credentials_irbm",
        "value": {
            "client_id": "INSERT-CLIENTID-HERE",
            "client_secret": "INSERT-CLIENTSECRET-HERE"
        },
        "scope": {
            "category": "MY_INV",
            "productId": "my_UBLInvoice__1.0",
            "orgId": "YOUR-ORG-ID",
			"taxId": "YOUR-COMPANY-TAXID"
        },
        "auditData": {
            "createdAt": 1664826411,
            "createdBy": "user@company.com",
            "updatedAt": 1664826591,
            "updatedBy": "user@company.com",
            "isDeleted": false,
            "version": 1
        }
    }
}

Signing

Request sample
curl --location --request PUT 'https://api-test.sovos.com/v2/configurations/organizations/{orgId}/settings/{setting-id}' \
--header Content-Type: application/json \
--header Authorization: Bearer {accessToken} \
--header x-correlationId: {uniqueValue} \
--data-raw '{
    "value": {
        "certificateFileData": "NEW-CERT-HERE",
        "password": "NEW-PASSWORD-HERE"
    }
}'
Response sample
{
    "status": 200,
    "message": "OK",
    "success": true,
    "timestamp": 1667468931220,
    "data": {
        "id": "SETTING-ID",
        "name": "credentials",
        "value": {
            "certificateFileData": "NEW-CERT-HERE",
            "password": "NEW-KEYID-HERE"
        },
        "scope": {
            "category": "MY_INV",
            "productId": "my_UBLInvoice__1.0",
            "orgId": "YOUR-ORG-ID",
            "taxId": "YOUR-COMPANY-TAXID"
        },
        "auditData": {
            "createdAt": 1667465886,
            "createdBy": "user@company.com",
            "updatedAt": 1667468931,
            "updatedBy": "user@company.com",
            "isDeleted": false,
            "version": 1
        }
    }
}

Configure an inbound service for Malaysia

Important: You only need to configure an inbound service for your company if you are using basic integration. If your company registered Sovos as an intermediary, you can skip this configuration. Only the Sovos Professional Services team can start the inbound process.

When you configure an inbound service, you enable Sovos to fetch documents from the tax authority. To retrieve the invoices from Sovos, see the Retrieve invoice documentation.

The time interval Sovos uses to fetch (poll) invoices is:

  • 2 hours for Production

  • 30 minutes for UAT

  1. Send a POST request to the endpoint URL:
    POST https://api-test.sovos.com/v2/configurations/organizations/{orgId}/settings
  2. Include the following headers in your request:
    • Content-Type: application/json

    • Authorization: Bearer {accessToken}

    • x-correlationId: {uniqueValue}

  3. Include the following parameters in the request body.
    NameTypeRequiredDescription
    contextstringYesUse "polling"
    configurationsarray of objectsYes
    namestringYesUse "query_filter_params"
    valueobjectYes
    itemsarray of objectsYes
    namestringYesUse "PollingDateFrom"
    valuestringYesUse the polling start datetime.
    Important: You cannot use a date more than 10 days in the past due to IRBM’s limitation.
    scopeobjectYes
    categorystringYesUse "MY_INV"
    productIdstringYesUse "my_UBLInvoice_Polling_1.0"
    orgIdstringYesThe organization ID obtained from the Sovos Professional Services team
    taxIdstringYesThe tax ID of the company
    namestringYesUse "polling_process_configuration"
    valueobjectYes
    pollingWorkflowStatestringYesUse "enable" or "disable" to control the inbound flow of the company
    scopeobjectYes
    operationstringYesUse "Validate"
    categorystringYesUse "MY_INV"
    productIdstringYesUse "my_UBLInvoice_Polling_1.0"
    orgIdstringYesThe organization ID obtained from the Sovos Professional Services team
    taxIdstringYesThe tax ID of the company
    systemIdstringYesThe systemId configured for document retrieval

Upon successful creation, the API will return a JSON object containing the uploaded credentials and their assigned SETTING-ID.

Samples for configuring an inbound service

Request sample

curl --location --request POST 'https://api-test.sovos.com/v2/configurations/organizations/{orgId}/settings' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {accessToken}' \
--header 'x-correlationId: {uniqueValue}' \
--data '[
    {
        "context": "polling",
        "configurations": [
            {
                "name": "query_filter_params",
                "value": {
                    "items": [
                        {
                            "name": "PollingDateFrom",
                            "value": "2023-10-01T00:00:00Z"
                        }
                    ]
                },
                "scope": {
                    "category": "MY_INV",
                    "productId": "my_UBLInvoice_Polling_1.0",
                    "orgId": "YOUR-ORG-ID",
                    "taxId": "YOUR-COMPANY-TAXID"
                }
            },
            {
                "name": "polling_process_configuration",
                "value": {
                    "pollingWorkflowState": "enable"
                },
                "scope": {
                    "operation": "Validate",
                    "category": "MY_INV",
                    "productId": "my_UBLInvoice_Polling_1.0",
                    "orgId": "YOUR-ORG-ID",
                    "taxId": "YOUR-COMPANY-TAXID",
                    "systemId": "CUSTOM-SYSTEM-ID"
                }
            }
        ]
    }
]'

Response sample

{
    "status": 201,
    "message": "Created",
    "success": true,
    "timestamp": 1692564160451,
    "data": [
        {
            "message": "Configurations are created",
            "statusCode": 201,
            "configurationContextResponse": {
                "context": "Polling",
                "configurations": [
                    {
                        "id": "SETTING-ID",
                        "name": "query_filter_params",
                        "value": {
                            "items": [
                                {
                                    "name": "PollingDateFrom",
                                    "value": "2023-10-01T00:00:00Z"
                                }
                            ]
                        },
                        "scope": {
                            "category": "MY_INV",
                            "productId": "my_UBLInvoice_Polling_1.0",
                            "orgId": "YOUR-ORG-ID",
                            "taxId": "YOUR-COMPANY-TAXID"
                        },
                        "auditData": {
                            "createdAt": 1678885806,
                            "createdBy": "user@company.com",
                            "isDeleted": false,
                            "version": 1
                        }
                    },
                    {
                        "id": "SETTING-ID",
                        "name": "polling_process_configuration",
                        "value": {
                            "pollingWorkflowState": "enable"
                        },
                        "scope": {
                            "operation": "Validate",
                            "category": "MY_INV",
                            "productId": "my_UBLInvoice_Polling_1.0",
                            "orgId": "YOUR-ORG-ID",
                            "taxId": "YOUR-COMPANY-TAXID",
                            "systemId": "CUSTOM-SYSTEM-ID"
                        },
                        "auditData": {
                            "createdAt": 1692564160,
                            "createdBy": "user@company.com",
                            "isDeleted": false,
                            "version": 1
                        }
                    }
                ]
            }
        }
    ]
}

Update an inbound service for Malaysia

Enable or disable an existing inbound service for Malaysia.
  1. Send a PUT request to the endpoint URL:
    PUT https://api-test.sovos.com/v2/configurations/organizations/{orgId}/settings/{settingId}
  2. Include the following headers in your request:
    • Content-Type: application/json

    • Authorization: Bearer {accessToken}

    • x-correlationId: {uniqueValue}

  3. Optional: To update an inbound service configuration, include the following parameters in the request body.
    NameTypeRequiredDescription
    valueobjectYes
    pollingWorkflowStatestringYesUse "enable" or "disable" to control the inbound flow of the company

Samples for updating an inbound service

Request sample

curl --location --request PUT 'https://api-test.sovos.com/v2/configurations/organizations/{orgId}/settings/{settingId}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {accessToken}' \
--header 'x-correlationId: {uniqueValue}' \
--data '{
    "value": {
        "pollingWorkflowState": "disable"
    }
}'

Response sample

{
    "status": 200,
    "message": "OK",
    "success": true,
    "timestamp": 1679585983490,
    "data": {
        "id": "ec534dbb-...-aabf658325c2",
        "name": "polling_process_configuration",
        "value": {
            "pollingWorkflowState": "disable"
        },
        "scope": {
            "operation": "Validate",
            "category": "MY_INV",
            "productId": "my_UBLInvoice_Polling_1.0",
            "orgId": "YOUR-ORG-ID",
            "taxId": "YOUR-COMPANY-TAXID",
            "systemId": "CUSTOM-SYSTEM-ID"
        },
        "auditData": {
            "createdAt": 1679585857,
            "createdBy": "user@company.com",
            "updatedAt": 1679585983,
            "updatedBy": "user@company.com",
            "isDeleted": false,
            "version": 2
        }
    }
}

Issue invoice

Invoice clearance in Malaysia is based on the default business process, which follows this order: Mapping, Signing and Transmission. The diagram below provides a detailed overview:

Malaysia invoice clearance outbound workflow

Step 1: Supplier creates the Standard Business Document

Every invoice sent to Sovos must be part of a Standard Business Document (SBD). This document includes a Standard Business Document Header (SBDH) and a Sovos Document node, which includes a Sovos Canonical Invoice (SCI). To create the SBD, follow the detailed instructions in the SBDH, Sovos Document, and SCI pages.

Besides the SCI format, the payload can use the Malaysian UBL 2.1 format. The structure of the Malaysian format is explained here.

Here is a list of supported e-invoice types (InvoiceTypeCode):

  • Invoice (01)

  • Credit Note (02)

  • Debit Note (03)

  • Refund Note (04)

  • Self-billed Invoice (11)

  • Self-billed Credit Note (12)

  • Self-billed Debit Note (13)

  • Self-billed Refund Note (14)

Note:

Although not an e-Invoice type, consolidated invoices are also supported.

SBDH - Invoice
The Standard Business Document Header (SBDH) must use the following values when issuing a document in the SCI format:
NodeRequiredAttributesValue
StandardBusinessDocumentHeader.Sender.IdentifierYesAuthority="MY" Supplier's tax ID
StandardBusinessDocumentHeader.Receiver.IdentifierYesAuthority="MY"
StandardBusinessDocumentHeader.DocumentIdentification.StandardYesurn:oasis:names:specification:ubl:schema:xsd:Invoice-2
StandardBusinessDocumentHeader.DocumentIdentification.TypeVersionYes2.1
StandardBusinessDocumentHeader.DocumentIdentification.TypeYes Invoice
StandardBusinessDocumentHeader.BusinessScope.Scope (with child nodes)Yes

Child node Type: Country

Child node Identifier: MY

StandardBusinessDocumentHeader.BusinessScope.Scope (with child nodes)Yes

Child node Type: ProcessType

Child node Identifier: Outbound

StandardBusinessDocumentHeader.BusinessScope.Scope (with child nodes)Yes

Child node Type: CompanyCode

Child node Identifier: Supplier's tax ID

StandardBusinessDocumentHeader.BusinessScope.Scope (with child nodes)Yes

Child node Type: SenderDocumentId

Child node Identifier: A unique document ID. We recommend the ERP document ID.

StandardBusinessDocumentHeader.BusinessScope.Scope (with child nodes)Yes

Child node Type: SenderSystemId

Child node Identifier: The system ID configured in the backend. This parameter is used to determine which notifications are returned to the client and what attachments they include. If SenderSystemId is not configured on the client side, it'll use the default value of "DefaultSystemERP". For more information, see this topic.

StandardBusinessDocumentHeader.BusinessScope.Scope (with child nodes)Yes

Child node Type: Mapping.OutputSchema

Child node Identifier: UBLInvoice

StandardBusinessDocumentHeader.BusinessScope.Scope (with child nodes)Yes

Child node Type: Mapping.TransformDocument

Child node Identifier: SCI-TO-LEGAL_INVOICE

StandardBusinessDocumentHeader.BusinessScope.Scope (with child nodes)Yes

Child node Type: Transmission.OperationType

Child node Identifier: SIGNING

StandardBusinessDocumentHeader.BusinessScope.Scope.BusinessService.BusinessServiceNameYesDefault
StandardBusinessDocumentHeader.BusinessScope.Scope (with child nodes)Yes

Child node Type: BusinessCategory

Child node Identifier: B2B

SovosDocument.SovosCanonicalInvoice.InvoiceYesSCI
StandardBusinessDocumentHeader.BusinessScope.Scope (with child nodes)Yes

Child node Type: Version

Child node Identifier: 1.0

Local format - Invoice

The supplier can use the local format (XML) instead of SCI. Use the following values in the SBDH for documents that use the local format:

NodeRequiredValue
StandardBusinessDocumentHeader.BusinessScope.Scope (with child nodes)Yes

Child node Type: Mapping.TransformDocument

Child node Identifier: LEGAL-TO-SCI_INVOICE

SovosDocument.SovosLegalDocument.Base64DocumentYesA local format
Note:

The local format (XML) document must be Base64-encoded before it can be added to the SBD.

</sbd:StandardBusinessDocumentHeader>
<svs:SovosDocument>
	<svs:SovosLegalDocument>
		<enc:Base64Document>
			<enc:EmbeddedDocument id="1" filename="invoice.xml" mimeCode="application/xml">PD94bWwgdmVyc...FRdHVyYT4NCg==<enc:EmbeddedDocument>
		</enc:Base64Document>
	</svs:SovosLegalDocument>
</svs:SovosDocument>
</sbd:StandardBusinessDocument>
Note:

Include all the mandatory nodes as specified in the SBDH schema. If the information cannot be provided and the respective mandatory node has not been mentioned on the current page, the node can be left empty but must still be included in the SBDH.

SBD Sample
Below is a sample of the SBD. In addition, there's a full sample of the SBD in the Postman Samples page.
<sbd:StandardBusinessDocument xmlns="http://uri.etsi.org/01903/v1.4.1#" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:sbd="http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" xmlns:ad="http://www.sovos.com/namespaces/additionalData" xmlns:sci="http://www.sovos.com/namespaces/sovosCanonicalInvoice" xmlns:svs="http://www.sovos.com/namespaces/sovosDocument" xmlns:sov="http://www.sovos.com/namespaces/sovosExtensions" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" xmlns:inv="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
	<sbd:StandardBusinessDocumentHeader>
		<sbd:HeaderVersion>1.0</sbd:HeaderVersion>
		<sbd:Sender>
			<sbd:Identifier Authority="MY">123456789</sbd:Identifier>
			<sbd:ContactInformation>
				<sbd:Contact>123456789</sbd:Contact>
				<sbd:EmailAddress/>
				<sbd:FaxNumber/>
				<sbd:TelephoneNumber/>
				<sbd:ContactTypeIdentifier/>
			</sbd:ContactInformation>
		</sbd:Sender>
		<sbd:Receiver>
			<sbd:Identifier Authority="MY"/>
			<sbd:ContactInformation>
				<sbd:Contact/>
				<sbd:EmailAddress/>
				<sbd:FaxNumber/>
				<sbd:TelephoneNumber/>
				<sbd:ContactTypeIdentifier/>
			</sbd:ContactInformation>
		</sbd:Receiver>
		<sbd:DocumentIdentification>
			<sbd:Standard>urn:oasis:names:specification:ubl:schema:xsd:Invoice-2</sbd:Standard>
			<sbd:TypeVersion>2.1</sbd:TypeVersion>
			<sbd:InstanceIdentifier/>
			<sbd:Type>Invoice</sbd:Type>
			<sbd:MultipleType>false</sbd:MultipleType>
			<sbd:CreationDateAndTime>2020-06-16T00:31:52Z</sbd:CreationDateAndTime>
		</sbd:DocumentIdentification>
		<sbd:BusinessScope>
			<sbd:Scope>
				<sbd:Type>Version</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>1.0</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>SenderDocumentId</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>321412</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>SenderSystemId</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>UAT101</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>CompanyCode</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>123456789</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>Country</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>MY</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>ProcessType</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>Outbound</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>Mapping.TransformDocument</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>SCI-TO-LEGAL_INVOICE</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>Mapping.OutputSchema</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>UBLInvoice</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>SubSchema</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier/>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>BusinessCategory</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>B2B</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>Transmission.OperationType</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>SIGNING</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>BusinessProcess</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:BusinessService>
					<sbd:BusinessServiceName>Default</sbd:BusinessServiceName>
				</sbd:BusinessService>
			</sbd:Scope>
		</sbd:BusinessScope>
	</sbd:StandardBusinessDocumentHeader>
	<svs:SovosDocument>
		<sci:SovosCanonicalInvoice>
			<inv:Invoice>
			*UBL Elements*
			</inv:Invoice>
		</sci:SovosCanonicalInvoice>a
	</svs:SovosDocument>
</sbd:StandardBusinessDocument>
Important:

If you have configured a certificate, the listVersionID attribute with value "1.1" needs to be provided for the node InvoiceTypeCode.

<cbc:InvoiceTypeCode listVersionID="1.1">

Currently, you don't need to sign documents to submit them to IRBM. If you don't have a certificate, you can use the following scope in the SBDH instead.

<cbc:InvoiceTypeCode listVersionID="1.0">

<sbd:StandardBusinessDocument xmlns="http://uri.etsi.org/01903/v1.4.1#" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:sbd="http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" xmlns:ad="http://www.sovos.com/namespaces/additionalData" xmlns:sci="http://www.sovos.com/namespaces/sovosCanonicalInvoice" xmlns:svs="http://www.sovos.com/namespaces/sovosDocument" xmlns:sov="http://www.sovos.com/namespaces/sovosExtensions" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" xmlns:inv="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
	<sbd:StandardBusinessDocumentHeader>
        ...
		<sbd:Scope>
			<sbd:Type>Transmission.OperationType</sbd:Type>
			<sbd:InstanceIdentifier/>
			<sbd:Identifier>SIGNING</sbd:Identifier>
		</sbd:Scope>
        ...
	</sbd:StandardBusinessDocumentHeader>
	<svs:SovosDocument>
		<sci:SovosCanonicalInvoice>
			<inv:Invoice>
			    ...
			    <cbc:InvoiceTypeCode listVersionID="1.1">...</cbc:InvoiceTypeCode>
			    ...
			</inv:Invoice>
		</sci:SovosCanonicalInvoice>
	</svs:SovosDocument>
</sbd:StandardBusinessDocument>

Step 2: Supplier sends the SBD to Sovos

The supplier sends a POST request to the /documents endpoint. The request must include the following request body parameters:

NameTypeRequiredDescription
datastringYesThe Base64-encoded SBD from step 1
dataEncodingstringYes Use "base64"
Request Sample
curl --location --request POST 'https://api-test.sovos.com/v1/documents' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer TOKEN' \
--header 'x-correlationId: SET-TO-UNIQUE-VALUE' \
--data-raw '{
	"data": "PD9...d4=",
	"dataEncoding" : "base64"
}'
Response Sample
{
    "timestamp": 1605282724079,
    "status": 202,
    "success": true,
    "message": "Document Received",
    "data": {
        "documentId": "DOCUMENT-ID"
    }
}

Step 3: Sovos maps the SCI into XML

Upon receiving the SCI file, Sovos maps it into the required XML format.

Note:

This step is skipped if the SBD contains the invoice in the local format (Malaysian UBL in XML representation supported only, not Malaysian UBL in JSON representation).

Step 4: Sovos validates the XML

Sovos validates the schema based on the information provided by the tax authority. If there are errors in the document that the client sent, Sovos detects them instead of waiting for the tax authority's response.

Step 5: Sovos signs the XML

Sovos signs the file using the taxpayer's certificate, which generates the legalSigned attachment .

Step 6: Sovos batches the XMLs

After the XML file is signed, the request is placed into a batch before being transmitted to IRBM. The batch is transmitted after one of the following limits is met:

Production
  • Time limit: Five minutes have passed since the batch was created.
  • Number of documents limit: 100 documents have been added to the batch.

  • Total size limit: Five megabytes of documents have been added to the batch.

Important:

Documents need to be less than 300KB; Otherwise, Sovos rejects them.

UAT
  • Time limit: One minute has passed since the batch was created.
  • Number of documents limit: 100 documents have been added to the batch.

  • Total size limit: Five megabytes of documents have been added to the batch.

Important:

Documents need to be less than 300KB; Otherwise, Sovos rejects them.

Step 7: Sovos transmits the XML

Sovos transmits the batch to the Tax Authority's e-Invoice system (IRBM).

Step 8: IRBM processes the XML

The IRBM system proceeds to validate the schema documents and verify that business logic, signature, taxpayer information and duplicates are checked before returning a success message or rejection message indicating IRBM has approved the document.

The XML file is then also made available for the counterparty to retrieve, and potentially reject, within 72 hours. If the counterparty rejects the invoice, it is still considered active until the taxpayer cancels the invoice separately or issues a credit note or a debit note. After 72 hours of issuance, the counterparty can still reject out-of-band and thus it is not implicitly accepted just because 72 hours have passed without a rejection.

The counterparty can't reject consolidated invoices.

Step 9: IRBM sends the response to Sovos

After performing its services, the IRBM system sends the response to Sovos.

Step 10: Taxpayer retrieves the application responses

Attachments configuration

There are three ways you can access your attachments:

  • As binary data, so the file is embedded in the Base64-encoded application response.

  • As open download links, in which the response contains a public URL to download the file.

  • As secure download links, in which you need to use the Indirect Tax API's bearer token to download the attachment.

By default, Sovos configures your attachments as open download links to avoid potential size limitations when retrieving responses. To improve security, you should configure them as secure links. Then, make a GET call to the secure link returned by the Indirect Tax API, and include the API token. Sample request:

curl --location 'https://einvoicing-api.sovos.com/download/api/v1/download/JqYyqliXiJFKhXshnBQZfW3qpfwATVGE5Q73T41JUynNLJD8zHy5VH__9qzL9No-Kia9olSw3_lNX3KmaA9Je89Xx--vk5pQjyKx0iT_4CwPSABD0Yg7uxXZ8SNiliEhFY-4TOX7m1TV5FwwfqntehbGaiGMI2JVYu18VBDiC_0/plain%27 \
--header 'Authorization: Bearer TOKEN'Y

As a response to the initial sending of the document, the client receives a JSON response message with an HTTP status code of 202 (asynchronous transaction). This means that the supplier must retrieve the application responses that become available during the transaction, which provide status information and also contain the signed XML encoded in Base64 when it's available.

You can retrieve application responses (notifications) in two ways:

Fetch everything in one single response (notification)
When polling for responses, Sovos returns one final notification with SCICloudStatusCode 209 that contains all the relevant attachments/data.

To complete a transaction, the supplier retrieves only one notification, with an SCICloudStatusCode of 209 and all the necessary attachments and data. The notification needs to be parsed for the SCIResponseCode value. There are two possible values for SCIResponseCode:

  • "AP", meaning the document's compliance status has been accepted with all the necessary attachments/data present.

  • "RE", meaning the document's compliance status has been rejected and more parsing is needed:

    • if SCIGovtStatusCode is present, the error can be found by reading StatusReason

    • if SCIInternalValidationCode is present, the error can be found by reading StatusReason

Note:

Receiving a notification containing SCICloudStatusCode with a value in the 5xx range indicates a server error. In this case, the workflow would not be considered complete since it would not return a notification with SCICloudStatusCode of 209.

SCICloudStatusCodeSCIResponseCodeSample
209

AP

UBLExtensions in the ApplicationResponse will contain:

  • Uuid - Assigned to each document accepted by IRBM.

  • LongId - Assigned to each document accepted by IRBM in order to allow for querying data anonymously.

  • validationLink - A link to be embedded into the QR code generated for human readable representation of the invoice.

  • receptionDate - The date and time when the document was submitted to IRBM.

Workflow successfully completed
209REWorkflow successfully completed
Fetch multiple responses (notifications) containing different information
When polling for responses, Sovos returns multiple notifications with different SCICloudStatusCode values containing different attachments and data until the final one (with status 209) is returned.

To complete a transaction, the supplier must retrieve the application responses until the transaction has finished. If the supplier has subscribed to multiple notifications, the transaction can generate different application responses, as shown in the table below. The transaction finishes when a notification containing SCICloudStatusCode with value of 209 has been received.

Note:

Receiving a notification containing SCICloudStatusCode with a value in the 5xx range indicates a server error. In this case, the workflow would not complete and will not return a notification with SCICloudStatusCode of 209.

SCICloudStatusCodeSCIResponseCodeSample
100IPDocument received successfully
101IPDocument mapped successfully
200IP/AP

Initially IP is sent and when the workflow finishes (after 72h) AP is sent.

UBLExtensions in the ApplicationResponse will contain:

  • Uuid - Assigned to each document accepted by IRBM.

  • LongId - Assigned to each document accepted by IRBM to allow for querying data anonymously.

  • validationLink - A link to be embedded into the QR code generated for human readable representation of the invoice.

  • receptionDate - The date and time when the document was submitted to IRBM.

Authorized by the Tax Authority
207APPDF created successfully
209APWorkflow successfully completed
400RERejected by the Tax Authority or the counterparty
400 (401)RERejected by the Tax Authority or the counterparty
Note:

To configure notifications for your company, or update your current configuration, contact our Professional Services team.

The taxpayer can use the following Indirect Tax API endpoints to retrieve application responses:

  • GET /notifications/MY

  • GET /documents/MY/{documentId}/notifications

GET /notifications/MY

The supplier can send a GET request to the /notifications/MY endpoint to retrieve application responses that match the set search criteria. This endpoint allows using the following query parameters:

NameTypeRequiredDefaultDescription
taxIdstringNo

Include only notifications related to the specified taxId. This value is related to the CompanyCode set in the SBDH.

Note:

If a request does not include this parameter, it returns all the notifications related to the country and the sourceSystemId parameter.

pageintegerNo1To specify the page to be returned, use a value between 1 and 10.
perPageintegerNo10

To specify the number of results for the returned page, use a value between 1 and 100.

Important:

If the attachment file is configured to return binary content instead of a link, use only values between 1 and 10.

sourceSystemIdstringYes Include only notifications related to documents that originate from the given source system. This value is related to the SenderSystemId in the SBDH.
includeAcknowledgedbooleanNofalseUse "true" to include previously acknowledged notifications, within 24 hours of their acknowledgment, in the result.
processTypestringNoUse "0" to only include notifications related to outbound documents.
Request sample
curl --location --request GET 'https://api-test.sovos.com/v1/notifications/MY?page=1&perPage=2&taxId={taxId}&sourceSystemId={sourceSystemId}&processType=0' \
--header 'Content-Type: application/json' \
--header 'x-correlationId: SET-TO-UNIQUE-VALUE' \
--header 'Authorization: Bearer TOKEN'
Response sample
{
    "timestamp": 1633685509314,
    "status": 200,
    "success": true,
    "message": "Notifications Listed",
    "data": {
        "pageState": {
            "page": 1,
            "perPage": 50,
            "totalEntries": 1
        },
        "notifications": [
            {
                "createdDate": 1633681296,
                "metadata": {
                    "productId": "my_UBLInvoice__1.0",
                    "documentId": "DOCUMENT-ID",
                    "erpDocumentId": "321412",
                    "erpSystemId": "UAT101",
                    "processType": "0",
                    "taxId": "YOUR-TAXID",
                    "sciCloudStatusCode": "200",
                    "sciResponseCode": "AP",
                    "sciStatusAction": "NOA",
                    "sciGovtStatusCode": "100"
                },
                "appPrefix": "DLT",
                "notificationId": "a8dc1aa2-fbe6-45ce-9e4c-97a3d5fdb91c",
                "content": "PEF...NlPg=="
            }
        ]
    }
}
GET /documents/MY/{documentId}/notifications

The supplier can send a GET request to the /documents/MY/{documentId}/notifications endpoint to retrieve application responses related to a single document.

To make this request, use the following path parameter:

NameTypeRequiredDescription
documentIdstringYesThe document ID returned in step 2
Request sample
curl --location --request GET 'https://api-test.sovos.com/v1/documents/MY/{documentId}/notifications?' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer TOKEN' \
--header 'x-correlationId: SET-TO-UNIQUE-VALUE'
Response sample
{
    "timestamp": 1633685509314,
    "status": 200,
    "success": true,
    "message": "Notifications Listed",
    "data": {
        "pageState": {
            "page": 1,
            "perPage": 50,
            "totalEntries": 1
        },
        "notifications": [
            {
                "createdDate": 1633681296,
                "metadata": {
                    "productId": "my_UBLInvoice__1.0",
                    "documentId": "DOCUMENT-ID",
                    "erpDocumentId": "321412",
                    "erpSystemId": "UAT101",
                    "processType": "0",
                    "taxId": "YOUR-TAXID",
                    "sciCloudStatusCode": "200",
                    "sciResponseCode": "AP",
                    "sciStatusAction": "NOA",
                    "sciGovtStatusCode": "100"
                },
                "appPrefix": "DLT",
                "notificationId": "a8dc1aa2-fbe6-45ce-9e4c-97a3d5fdb91c",
                "content": "PEF...NlPg=="
            }
        ]
    }
}

Step 11: Supplier marks the application responses as acknowledged

The supplier must process the retrieved application responses and mark them as acknowledged. To do this, send a PUT request to the /notifications/MY endpoint.

To make this request, use the following request body parameters:

NameTypeRequiredDescription
statusstringYesEnter "read"
notificationIdstringYesThe notification ID
Note:

Multiple notificationId values can be acknowledged using one Indirect Tax API call by including them in a single request.

Request sample
curl --location --request PUT 'https://api-test.sovos.com/v1/notifications/MY' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer TOKEN' \
--header 'x-correlationId: SET-TO-UNIQUE-VALUE' \
--data-raw '[
    {
        "status": "read",
        "notificationId": "51341d39-fd3e-4dcf-aea3-a73d73e0de76"
    }
]'
Response sample
{
    "timestamp": 1601673284,
    "status": 200,
    "success": true,
    "message": "Notifications acknowledged successfully."
}

Sovos generates the PDF

Sovos generates a PDF that contains the content of the invoice XML in a human-readable format along with the QR code. The QR code itself contains a public link to the invoice on the IRBM portal.

Archiving

Archiving can be done as a bundle, for example, as part of the Clearance flow, and is recommended for suppliers integrating with the Sovos solution for Malaysia for the first time. It can also be done separately, using an explicit API call that uses another archive. For more information on standalone archiving, see the e-Archiving documentation page.

Bundled e-invoice archiving on the new platform is optional. Existing customers can choose to use their current solution and include e-Archiving.

Distribution

The invoice can be communicated to the counterparty by Sovos or the taxpayer.

Sovos shares the invoice with the counterparty

For Sovos to be able to distribute the invoice to the counterparty, the taxpayer needs an email distribution channel. For more information contact Sovos Professional Services.

After a distribution channel is configured, the taxpayer should no longer send the invoice to the counterparty.

Taxpayer shares the invoice with their counterparty

In cases where a distribution channel has not been configured, the tTaxpayer is responsible for distributing the invoice to the Counterparty.

The invoice can be communicated to the Counterparty with the QR code included if the human readable version is shared. The invoice data is made available in IRBM's system and can be consulted by the Counterparty using the QR code.

When communicating the invoice, it's important to ensure the invoice's authenticity and integrity. See our post-audit signing and validation service for more information on how to sign electronic documents in Malaysia.

Retrieve invoice

The diagram below provides an overview of the inbound flow process for invoice retrieval in Malaysia:

Inbound flow process for invoice retrieval in Malaysia

Step 1: Sovos retrieves the documents from the IRBM system

Sovos uses the buyer's credentials to authenticate with the IRBM system to collect the documents that have been made available (either in JSON or XML formats).

Step 2: Sovos generates the PDF

Sovos generates a PDF from each document from IRBM and generates a notification. That includes the content of the QR code and the validation link for this document.

Step 3: Sovos maps the retrieved document into SCI and makes them available

Sovos stores the retrieved documents, maps them to SCI, and makes them available for buyers to get. The PDF version of the documents is also made available.

Step 4: Sovos distributes the PDF

Sovos can distribute the PDF through email to a configurable email address.

Step 5: Buyer retrieves the application responses

Attachments configuration

There are three ways you can access your attachments:

  • As binary data, so the file is embedded in the Base64-encoded application response.

  • As open download links, in which the response contains a public URL to download the file.

  • As secure download links, in which you need to use the Indirect Tax API's bearer token to download the attachment.

By default, Sovos configures your attachments as open download links to avoid potential size limitations when retrieving responses. To improve security, you should configure them as secure links. Then, make a GET call to the secure link returned by the Indirect Tax API, and include the API token. Sample request:

curl --location 'https://einvoicing-api.sovos.com/download/api/v1/download/JqYyqliXiJFKhXshnBQZfW3qpfwATVGE5Q73T41JUynNLJD8zHy5VH__9qzL9No-Kia9olSw3_lNX3KmaA9Je89Xx--vk5pQjyKx0iT_4CwPSABD0Yg7uxXZ8SNiliEhFY-4TOX7m1TV5FwwfqntehbGaiGMI2JVYu18VBDiC_0/plain%27 \
--header 'Authorization: Bearer TOKEN'Y

To complete a transaction, the buyer must use the GET /notifications/MY endpoint to retrieve the application responses until the transaction has finished. If the buyer has subscribed to all notifications, the transaction can generate different application responses, as shown in the table below:

SCICloudStatusCodeSCIResponseCodeSample
100IPDocument received successfully
101IPDocument mapped successfully
207APPDF created successfully

The PDF is part of the attachments in the notification (see the attached document)

209APWorkflow successfully completed
GET /notifications/MY
The buyer can send a GET request to

the /notifications/MY endpoint to retrieve application responses that match the set search criteria. This endpoint allows using the following query parameters:

NameTypeRequiredDefaultDescription
taxIdstringNo

Include only notifications related to the specified taxId.

pageintegerNo1To specify the page to be returned, use a value between 1 and 10.
perPageintegerNo10

To specify the number of results for the returned page, use a value between 1 and 100.

Important:

If the attachment file is configured to return the binary content instead of a link, only use values between 1 and 10.

sourceSystemIdstringYes Include only notifications related to documents that originate from the given source system.
includeAckwnowledgedbooleanNofalse Use "true" to include previously acknowledged notifications in the result.
processTypestringNoUse "1" to only include notifications related to inbound documents.
Request sample
curl --location --request GET 'https://api-test.sovos.com/v1/notifications/MY?page=1&perPage=2&taxId={taxId}&sourceSystemId={sourceSystemId}&processType=1' \
--header 'Content-Type: application/json' \
--header 'x-correlationId: SET-TO-UNIQUE-VALUE' \
--header 'Authorization: Bearer TOKEN'
Response sample
{
    "timestamp": 1633685509314,
    "status": 200,
    "success": true,
    "message": "Notifications Listed",
    "data": {
        "pageState": {
            "page": 1,
            "perPage": 50,
            "totalEntries": 1
        },
        "notifications": [
            {
                "createdDate": 1633681296,
                "metadata": {
                    "productId": "my_UBLInvoice_Polling_1.0",
                    "documentId": "DOCUMENT-ID",
                    "erpDocumentId": "321412",
                    "erpSystemId": "UAT101",
                    "processType": "0",
                    "taxId": "YOUR-TAXID",
                    "sciCloudStatusCode": "200",
                    "sciResponseCode": "AP",
                    "sciStatusAction": "NOA",
                    "sciGovtStatusCode": "100"
                },
                "appPrefix": "DLT",
                "notificationId": "a8dc1aa2-fbe6-45ce-9e4c-97a3d5fdb91c",
                "content": "PEF...NlPg=="
            }
        ]
    }
}

Step 6: Buyer acknowledges the retrieved documents

After retrieving the documents, the buyer must process them and mark them as acknowledged. To do this, send a PUT request to the /notifications/MY endpoint.

To make this request, use the following request body parameters:

NameTypeRequiredDescription
statusstringYesU Use "read"
notificationIdstringYesThe notification ID
Note:

Multiple notificationId values can be acknowledged using one Indirect Tax API call by including them in a single request.

Request sample
curl --location --request PUT 'https://api-test.sovos.com/v1/notifications/MY' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer TOKEN' \
--header 'x-correlationId: SET-TO-UNIQUE-VALUE' \
--data-raw '[
    {
        "status": "read",
        "notificationId": "51341d39-fd3e-4dcf-aea3-a73d73e0de76"
    }
]'
Response sample
{
    "timestamp": 1601673284,
    "status": 200,
    "success": true,
    "message": "Notifications acknowledged successfully."
}

Reject invoice

The following figure gives a detailed overview of the process for invoice rejection in Malaysia based on the default business process. The text below describes the process step by step.

Overview process for invoice rejection in Malaysia

Step 1: Buyer sends a POST Request to Sovos

The buyer sends a POST request to the /documents/MY/action endpoint. To make this request, set the following request body parameters:

NameTypeRequiredDescription
actionCodestringYesUse "document.rejection".
documentsarray of objectsYes
metadataobjectNo
reasonstringNoThe reason for rejecting the invoice. The max length is 300 characters.
documentIdstringYesThe documentId that Sovos returns when receiving the document.
Note:

You can reject more than one document at the same time.

Request sample
curl --location 'https://api-test.sovos.com/v1/documents/MY/action' \
--header 'x-correlationId: SET-TO-UNIQUE-VALUE' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer TOKEN' \
--data '{
  "actionCode": "document.reject",
  "documents": [
    {
      "metadata": {
        "reason": "reject action test"
      },
      "documentId": "70acd7b6595bd6c27c7f760d594c89a0"
    }
  ]
}
Response sample
{
	"status": 202,
	"message": "Accepted",
	"success": true,
	"timestamp": 1724404345626
	"data":[
		{
			"status": 202,
			"transactionId": "564c4995-ecc9-4ba0-a578-4a3976feb6ea",
			"documentId": "70acd7b6595bd6c27c7f760d594c89a0"
		}
	]
}

Step 2: Sovos transmits request to IRBM

Sovos finds the corresponding document in the system and transmits the rejection request to IRBM.

Step 3: IRBM processes the request

IRBM verifies that the 72-hour window has not passed since the original document was issued, and that the document can be rejected successfully.

Step 4: IRBM returns the response

IRBM returns the success message, or the error message if the rejection could not be performed.

Step 5: Buyer retrieves the application responses

Attachments configuration

There are three ways you can access your attachments:

  • As binary data, so the file is embedded in the Base64-encoded application response.

  • As open download links, in which the response contains a public URL to download the file.

  • As secure download links, in which you need to use the Indirect Tax API's bearer token to download the attachment.

By default, Sovos configures your attachments as open download links to avoid potential size limitations when retrieving responses. To improve security, you should configure them as secure links. Then, make a GET call to the secure link returned by the Indirect Tax API, and include the API token. Sample request:

curl --location 'https://einvoicing-api.sovos.com/download/api/v1/download/JqYyqliXiJFKhXshnBQZfW3qpfwATVGE5Q73T41JUynNLJD8zHy5VH__9qzL9No-Kia9olSw3_lNX3KmaA9Je89Xx--vk5pQjyKx0iT_4CwPSABD0Yg7uxXZ8SNiliEhFY-4TOX7m1TV5FwwfqntehbGaiGMI2JVYu18VBDiC_0/plain%27 \
--header 'Authorization: Bearer TOKEN'Y

As a response to the initial sending of the document, the client receives a JSON response message with an HTTP status code of 202 (asynchronous transaction). This means that the supplier must retrieve the application responses that become available during the transaction, which provide status information.

Clients have the option to retrieve application responses (notifications) in one of two ways:

Fetch everything in one single response (notification)
This means, when polling for responses, Sovos only returns one final notification with SCICloudStatusCode 209 that contains all the relevant attachments/data. Detailed description follows.
Fetch multiple responses (notifications) containing different information
In this case, when polling for responses, Sovos returns multiple notifications with different SCICloudStatusCode values containing different attachments/data until the final one (with status 209) is returned. Detailed description follows.
Single response

To complete a transaction, the buyer retrieves only one notification, the complete workflow one, with SCICloudStatusCode of 209 and all the necessary attachments/data. Afterwards, the notification needs to be parsed for SCIResponseCode value. Possible values for SCIResponseCode:

  • "AP", meaning the document's compliance status has been accepted with all the necessary attachments/data present.

  • "RE", meaning the document's compliance status has been rejected, and more parsing is needed:

    • if SCIGovtStatusCode is present, the error can be found by reading StatusReason

    • if SCIInternalValidationCode is present, the error can be found by reading StatusReason

Note:

Receiving a notification containing SCICloudStatusCode with a value in the 5xx range still remains an option, as it indicates a server error. In this case, the workflow would not be considered complete since it would not return a notification with SCICloudStatusCode of 209.

SCICloudStatusCodeSCIResponseCodeSample
209APWorkflow successfully completed
209REWorkflow successfully completed
Multiple responses

To complete a transaction, the buyer retrieves only one notification with SCICloudStatusCode of 209 and all the necessary attachments/data. The notification needs to be parsed for SCIResponseCode value. Possible values for SCIResponseCode:

  • "AP", meaning the document's compliance status has been accepted with all the necessary attachments/data present.

  • "RE", meaning the document's compliance status has been rejected, and more parsing is needed:

    • if SCIGovtStatusCode is present, the error can be found by reading StatusReason

    • if SCIInternalValidationCode is present, the error can be found by reading StatusReason

Note:

Receiving a notification containing SCICloudStatusCode with a value in the 5xx range, still remains an option, as it indicates a server error. In this case the workflow would not be considered complete since it would not return a notification with SCICloudStatusCode of 209.

SCICloudStatusCodeSCIResponseCodeSample
101IPDocument mapped successfully
212APRejection Request Accepted
209APWorkflow successfully completed

The buyer can use the following Indirect Tax API endpoints to retrieve application responses:

  • GET /notifications/MY

  • GET /documents/MY/{documentId}/notifications

GET /notifications/MY

The buyer can send a GET request the /notifications/MY endpoint to retrieve application responses that match the set search criteria. This endpoint allows setting the following query parameters:

NameTypeRequiredDefaultDescription
taxIdstringNoInclude only notifications related to the specified taxId. This value is related to the CompanyCode in the SBDH.
Note:

If a request does not include this parameter, it returns all the notifications related to the country and the sourceSystemId parameter.

pageintegerNo1 To specify the page to be returned, use a value between 1 and 10.
perPageintegerNo10To specify the number of results for the returned page, use a value between 1 and 100.
Important:

If the attachment file is configured to return the binary content instead of a link, use only values between 1 and 10.

sourceSystemIdstringYesInclude only notifications related to documents that originate from the given source system. This value is related to the SenderSystemId in the SBDH.
includeAcknowledgedbooleanNofalseUse "true" to include previously acknowledged notifications in the result.
processTypestringNo Use "0" to only include notifications related to outbound documents.
Request sample
curl --location --request GET 'https://api-test.sovos.com/v1/notifications/MY?page=1&perPage=2&includeAcknowledged=true&taxId={taxId}&sourceSystemId={sourceSystemId}&processType=0' \
--header 'Content-Type: application/json' \
--header 'x-correlationId: SET-TO-UNIQUE-VALUE' \
--header 'Authorization: Bearer TOKEN' \
Response sample
"status": 200,
"message": "Notifications Listed",
"success": true,
"timestamp": 1708533734893,
"data": {
    "pageState": {
        "page": 1,
        "perPage": 20,
        "totalEntries": 52,
        "totalPages": 3
    },
    "notifications": [
        {
            "notificationId": "78bd5a18-...-73bfbdb3bf21",
            "correlationId": "SET-TO-UNIQUE-VALUE",
            "appPrefix": "DLT",
            "metadata": {
                "productId": "my_UBLInvoice_Polling_1.0",
                "transactionId": "43...d94",
                "documentId": "DOCUMENT-ID",
                "erpDocumentId": "192714478",
                "erpSystemId": "ERPSystem",
                "processType": "1",
                "taxId": "C873686030",
                "sciCloudStatusCode": "209",
                "sciResponseCode": "AP",
                "sciStatusAction": "NOA",
                "sciGovtStatusCode": "Success"
            },
            "content": "PD...2U+",
            "createdDate": 1708533707255
GET /documents/MY/{documentId}/notifications

The buyer can send a GET request to the /documents/MY/{documentId}/notifications endpoint to retrieve application responses related to a single document.

To make this request, set the following parameters:

NameTypeRequiredParameter typeDefaultDescription
documentIdstringYesPathThe document ID returned in step 1
includeAcknowledgedbooleanNoQueryfalse Use "true" to include previously acknowledged notifications in the result
Request sample
curl --location 'https://api-test.sovos.com/v1/documents/MY/DOCUMENT-ID/notifications?includeAcknowledged=false' \
--header 'Content-Type: application/json' \
--header 'x-correlationId: SET-TO-UNIQUE-VALUE' \
--header 'Authorization: Bearer TOKEN'
Response sample
"status": 200,
"message": "Notifications Listed",
"success": true,
"timestamp": 1708533734893,
"data": {
    "pageState": {
        "page": 1,
        "perPage": 20,
        "totalEntries": 52,
        "totalPages": 3
    },
    "notifications": [
        {
            "notificationId": "78bd5a18-...-73bfbdb3bf21",
            "correlationId": "SET-TO-UNIQUE-VALUE",
            "appPrefix": "DLT",
            "metadata": {
                "productId": "my_UBLInvoice_Polling_1.0",
                "transactionId": "43...d94",
                "documentId": "DOCUMENT-ID",
                "erpDocumentId": "192714478",
                "erpSystemId": "ERPSystem",
                "processType": "1",
                "taxId": "C873686030",
                "sciCloudStatusCode": "209",
                "sciResponseCode": "AP",
                "sciStatusAction": "NOA",
                "sciGovtStatusCode": "Success"
            },
            "content": "PD...2U+",
            "createdDate": 1708533707255

Step 6: Buyer marks the application responses as acknowledged

The buyer must process the retrieved application responses and mark them as acknowledged. To do this, send a PUT request to the /notifications/MY endpoint.

To make this request, set the following request body parameters:

NameTypeRequiredDescription
statusstringYesUse "read"
notificationIdstringYesThe notification ID
Note:

Multiple notificationId values can be acknowledged using one Indirect Tax API call by including them in a single request.

Request sample
curl --location --request PUT 'https://api-test.sovos.com/v1/notifications/MY' \
--header 'Content-Type: application/json' \
--header 'x-correlationId: SET-TO-UNIQUE-VALUE' \
--header 'Authorization: Bearer TOKEN' \
--data '[
    {
        "status": "read",
        "notificationId": "e7b32eda-cb67-43b9-91de-f6d9c90f60d9"
    }
]'
Response sample
{
    "status": 200,
    "message": "OK",
    "success": true,
    "timestamp": 1708509282198,
    "data": {}
}

Cancel invoice

The following figure gives a detailed overview of the process for invoice cancellation in Malaysia based on the default business process. The text below describes the process step by step.

Overview process for Invoice Cancellation in Malaysia

Step 1: Supplier sends a POST request to Sovos

The supplier sends a POST request to the /documents/MY/action endpoint. To make this request, set the following request body parameters:

NameTypeRequiredDescription
actionCodestringYesUse "document.cancellation".
documentsarray of objectsYes
metadataobjectNo
reasonstringNoThe reason for canceling the invoice. The max length is 300 characters.
documentIdstringYesThe documentId that Sovos returns when sending the document.
Request sample
curl --location 'https://api-test.sovos.com/v1/documents/MY/action' \
--header 'x-correlationId: SET-TO-UNIQUE-VALUE' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer TOKEN' \
--data '{
    "actionCode": "document.cancellation",
    "documents": [
      {
        "metadata": {
            "reason": "Wrong total submitted"
        },
        "documentId": "DOCUMENT-ID"
      }
    ]
  }'
Response sample
{
    "status": 202,
    "message": "Accepted",
    "success": true,
    "timestamp": 1708018192828,
    "data": [
        {
            "status": 202,
            "documentId": "DOCUMENT-ID"
        }
    ]
}

Step 2: Sovos transmits the request to IRBM

Sovos finds the corresponding document in the system and transmits the cancellation request to IRBM.

Step 3: IRBM processes the request

IRBM verifies that the 72-hour window has not passed since the original document was issued, and that the document can be cancelled successfully. If the 72-hour window has passed, the taxpayer can still cancel the document by issuing a credit note, debit note, or refund note separately.

Step 4: IRBM returns the response

IRBM returns the success or error message if the cancellation could not be performed.

Step 5: Taxpayer retrieves the application responses

Attachments configuration

There are three ways you can access your attachments:

  • As binary data, so the file is embedded in the Base64-encoded application response.

  • As open download links, in which the response contains a public URL to download the file.

  • As secure download links, in which you need to use the Indirect Tax API's bearer token to download the attachment.

By default, Sovos configures your attachments as open download links to avoid potential size limitations when retrieving responses. To improve security, you should configure them as secure links. Then, make a GET call to the secure link returned by the Indirect Tax API, and include the API token. Sample request:

curl --location 'https://einvoicing-api.sovos.com/download/api/v1/download/JqYyqliXiJFKhXshnBQZfW3qpfwATVGE5Q73T41JUynNLJD8zHy5VH__9qzL9No-Kia9olSw3_lNX3KmaA9Je89Xx--vk5pQjyKx0iT_4CwPSABD0Yg7uxXZ8SNiliEhFY-4TOX7m1TV5FwwfqntehbGaiGMI2JVYu18VBDiC_0/plain%27 \
--header 'Authorization: Bearer TOKEN'Y

As a response to the initial sending of the document, the client receives a JSON response message with an HTTP status code of 202 (asynchronous transaction). This means that the taxpayer must retrieve the application responses that become available during the transaction, which provide status information.

Clients have the option to retrieve application responses (notifications) in one of two ways:

Fetch everything in one single response (notification)
This means, when polling for responses, Sovos only returns one final notification with SCICloudStatusCode of 209 that contains all the relevant attachments/data. Detailed description follows.
Fetch multiple responses (notifications) containing different information
In this case, when polling for responses, Sovos returns multiple notifications with different SCICloudStatusCode values containing different attachments/data until the final one (with status 209) is returned. Detailed description follows.
Single response

To complete a transaction, the supplier retrieves only one notification, the complete workflow one, with SCICloudStatusCode of 209 and all the necessary attachments/data. Afterwards, the notification needs to be parsed for SCIResponseCode value. Possible values for SCIResponseCode:

  • "AP", meaning the document's compliance status has been accepted with all the necessary attachments/data present.

  • "RE", meaning the document's compliance status has been rejected, and more parsing is needed:

    • if SCIGovtStatusCode is present, the error can be found by reading StatusReason

    • if SCIInternalValidationCode is present, the error can be found by reading StatusReason

Note:

Receiving a notification containing SCICloudStatusCode with a value in the 5xx range indicates a server error. In this case, the workflow would not be considered complete since it would not return a notification with SCICloudStatusCode of 209.

SCICloudStatusCodeSCIResponseCodeSample
209APWorkflow successfully completed
209REWorkflow successfully completed
Multiple responses

To complete a transaction, the supplier retrieves only one notification with SCICloudStatusCode of 209 and all the necessary attachments/data. Afterwards, the notification needs to be parsed for SCIResponseCode value. Possible values for SCIResponseCode:

  • "AP", meaning the document's compliance status has been accepted with all the necessary attachments/data present.

  • "RE", meaning the document's compliance status has been rejected, and more parsing is needed:

    • if SCIGovtStatusCode is present, the error can be found by reading StatusReason

    • if SCIInternalValidationCode is present, the error can be found by reading StatusReason

Note:

Receiving a notification containing SCICloudStatusCode with a value in the 5xx range indicates a server error. In this case the workflow would not be considered complete since it would not return a notification with SCICloudStatusCode of 209.

SCICloudStatusCodeSCIResponseCodeSample
101IPDocument mapped successfully
201APCancelled
209APWorkflow successfully completed

The supplier can use the following Indirect Tax API endpoints to retrieve application responses:

  • GET /notifications/MY

  • GET /documents/MY/{documentId}/notifications

GET /notifications/MY

The supplier can send a GET request to the /notifications/MY endpoint to retrieve application responses that match the set search criteria. This endpoint allows setting the following query parameters:

NameTypeRequiredDefaultDescription
taxIdstringNoInclude only notifications related to the specified tax ID. This value relates to the CompanyCode set in the SBDH.
Note:

If a request doesn't include this parameter, it returns all the notifications related to the country and the sourceSystemId parameter.

pageintegerNo1 To specify the page to be returned, use a value between 1 and 10.
perPageintegerNo10To specify the number of results for the returned page, use a value between 1 and 100.
Important:

If the attachment file is configured to return the binary content instead of a link, use only values between 1 and 10.

sourceSystemIdstringYesInclude only notifications related to documents that originate from the given source system. This value is related to the SenderSystemId in the SBDH.
includeAcknowledgedbooleanNofalseUse "true" to include previously acknowledged notifications in the result.
processTypestringNo Use "0" to only include notifications related to outbound documents.
Request sample
curl --location --request GET 'https://api-test.sovos.com/v1/notifications/MY?page=1&perPage=2&includeAcknowledged=true&taxId={taxId}&sourceSystemId={sourceSystemId}&processType=0' \
--header 'Content-Type: application/json' \
--header 'x-correlationId: SET-TO-UNIQUE-VALUE' \
--header 'Authorization: Bearer TOKEN' \
Response sample
"status": 200,
"message": "Notifications Listed",
"success": true,
"timestamp": 1708533734893,
"data": {
    "pageState": {
        "page": 1,
        "perPage": 20,
        "totalEntries": 52,
        "totalPages": 3
    },
    "notifications": [
        {
            "notificationId": "40e2ef57-...-8e1c9e8de016",
            "correlationId": "SET-TO-UNIQUE-VALUE",
            "appPrefix": "DLT",
            "metadata": {
                "productId": "my_UBLInvoice__1.0",
                "transactionId": "78...5f0",
                "documentId": "DOCUMENT-ID",
                "erpDocumentId": "172012265",
                "erpSystemId": "ERPSystem",
                "processType": "0",
                "taxId": "11161161",
                "sciCloudStatusCode": "209",
                "sciResponseCode": "AP",
                "sciStatusAction": "NOA",
                "sciGovtStatusCode": "Success"
            },
            "content": "PD...2U+",
            "createdDate": 1708533707255
GET /documents/MY/{documentId}/notifications

The supplier can send a GET request to the /documents/MY/{documentId}/notifications endpoint to retrieve application responses related to a single document.

To make this request, use the following parameters:

NameTypeRequiredParameter typeDefaultDescription
documentIdstringYesPathThe document ID returned in step 1
includeAcknowledgedbooleanNoQueryfalse Use "true" to include previously acknowledged notifications in the result
Request sample
curl --location 'https://api-test.sovos.com/v1/documents/MY/DOCUMENT-ID/notifications?includeAcknowledged=false' \
--header 'Content-Type: application/json' \
--header 'x-correlationId: SET-TO-UNIQUE-VALUE' \
--header 'Authorization: Bearer TOKEN'
Response sample
"status": 200,
"message": "Notifications Listed",
"success": true,
"timestamp": 1708533734893,
"data": {
    "pageState": {
        "page": 1,
        "perPage": 20,
        "totalEntries": 52,
        "totalPages": 3
    },
    "notifications": [
        {
            "notificationId": "40e2ef57-...-8e1c9e8de016",
            "correlationId": "SET-TO-UNIQUE-VALUE",
            "appPrefix": "DLT",
            "metadata": {
                "productId": "my_UBLInvoice__1.0",
                "transactionId": "78...5f0",
                "documentId": "DOCUMENT-ID",
                "erpDocumentId": "172012265",
                "erpSystemId": "ERPSystem",
                "processType": "0",
                "taxId": "11161161",
                "sciCloudStatusCode": "209",
                "sciResponseCode": "AP",
                "sciStatusAction": "NOA",
                "sciGovtStatusCode": "Success"
            },
            "content": "PD...2U+",
            "createdDate": 1708533707255

Step 6: Taxpayer marks the application responses as acknowledged

The supplier must process the retrieved application responses and mark them as acknowledged. To do this, send a PUT request to the /notifications/MY endpoint.

To make this request, set the following request body parameters:

NameTypeRequiredDescription
statusstringYesUse "read"
notificationIdstringYesThe notification ID
Note:

Multiple notificationId values can be acknowledged using one Indirect Tax API call by including them in a single request.

Request sample
curl --location --request PUT 'https://api-test.sovos.com/v1/notifications/MY' \
--header 'Content-Type: application/json' \
--header 'x-correlationId: SET-TO-UNIQUE-VALUE' \
--header 'Authorization: Bearer TOKEN' \
--data '[
    {
        "status": "read",
        "notificationId": "e7b32eda-cb67-43b9-91de-f6d9c90f60d9"
    }
]'
Response sample
{
    "status": 200,
    "message": "OK",
    "success": true,
    "timestamp": 1708509282198,
    "data": {}
}

Consult document details

The following diagram gives a detailed overview of the process for consulting document details in Malaysia based on the default business process:

Overview process for document details consultation in Malaysia

Step 1: Buyer sends a consultation request for a specific UUID to Sovos

The customer sends a POST request to the /v1/documents/MY/consultation endpoint.

Request body parameters:

NameTypeRequiredDescription
consultationCodestringYesUse "document.retrieval" to make a validation on the IRBM
productIdstringYesUse "my_UBLInvoice__1.0"
countrystringUse "MY"
companyobject
taxIdStringThe tax ID of the company
documentsArray of objects
metadataString
uuidStringThe UUID of the document
Request sample
curl --location --request POST 'https://api-test-tls.sovos.com/v1/consultations' \
--header 'x-correlationId: SET-TO-UNIQUE-VALUE' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
    "consultationCode": "document.retrieval",
    "productId": "MY_UBLInvoice__1.0",
    "country": "MY",
    "company": {
        "taxId": "<company tax id>"
    },
    "documents": [
    {
        "metadata": {
            "uuid": <UUID of the document>
        }
     }
   ]
}
Response sample
{
    "message": "OK",
    "status": 200,
    "success": true,
    "data": {
        "completed": true,
        "detailsDto": {
            "completed": "Success",
            "messages": [],
            "documents": [
                {
                    "key": "M32Z3ZDRJVK2W0535KXFK2DJ10_DocumentDetails.json",
                    "data": "eyJ1dWlkIjoiTTMyWjNaRFJKVksyVzA1MzVLWEZLMkRKMTAiLCJzdWJtaXNzaW9uVWlkIjoiNDE2SEZLWDZXUThGRDBZMzVLWEZLMkRKMTAiLCJsb25nSWQiOiJONDZFNjM3ME5RWDJEQ1pFNUtYRksyREoxMFEwcnhhbjE3MzIwMzMxMTUiLCJkYXRlVGltZVJlY2VpdmVkIjoiMjAyNC0xMS0xOVQxNjoxODozNVoiLCJkYXRlVGltZVZhbGlkYXRlZCI6IjIwMjQtMTEtMTlUMTY6MTg6MzZaIiwic3RhdHVzIjoiVmFsaWQiLCJjcmVhdGVkQnlVc2VySWQiOiJDODczNjg2MDMwOmZkNTlmY2NkLTk1OTctNDY0OS1iNmNiLWI4MTc4OGJmNzgyOCIsImRvY3VtZW50U3RhdHVzUmVhc29uIjpudWxsLCJjYW5jZWxEYXRlVGltZSI6bnVsbCwicmVqZWN0UmVxdWVzdERhdGVUaW1lIjpudWxsLCJ2YWxpZGF0aW9uUmVzdWx0cyI6eyJTdGF0dXMiOiJWYWxpZCIsIlZhbGlkYXRpb25TdGVwcyI6W3siU3RhdHVzIjoiVmFsaWQiLCJFcnJvciI6bnVsbCwiTmFtZSI6IlN0ZXAwMy1EdXBsaWNhdGVkIFN1Ym1pc3Npb24gVmFsaWRhdG9yIn0seyJTdGF0dXMiOiJWYWxpZCIsIkVycm9yIjpudWxsLCJOYW1lIjoiU3RlcDA0LUNvZGUgRmllbGQgVmFsaWRhdG9yIn0seyJTdGF0dXMiOiJWYWxpZCIsIkVycm9yIjpudWxsLCJOYW1lIjoiU3RlcDA1LVRheHBheWVyIFByb2ZpbGUgVmFsaWRhdG9yIn0seyJTdGF0dXMiOiJWYWxpZCIsIkVycm9yIjpudWxsLCJOYW1lIjoiU3RlcDA2LURvY3VtZW50IFJlZmVyZW5jZXMgVmFsaWRhdG9yIn0seyJTdGF0dXMiOiJWYWxpZCIsIkVycm9yIjpudWxsLCJOYW1lIjoiU3RlcDA3LURvY3VtZW50IEN1cnJlbmN5IFZhbGlkYXRvciJ9XX0sImludGVybmFsSWQiOiIwMS1CdXllci1yZWplY3Rpb24iLCJkYXRlVGltZUlzc3VlZCI6IjIwMjQtMTEtMTdUMDA6MDA6MDBaIiwidHlwZU5hbWUiOiJJbnZvaWNlIiwidHlwZVZlcnNpb25OYW1lIjoiVmVyc2lvbiAxIiwiaXNzdWVyVGluIjoiQzg3MzY4NjAzMCIsImlzc3Vlck5hbWUiOiJBTVMgU2V0aWEgSmF5YSBTZG4uIEJoZC4iLCJyZWNlaXZlcklkIjoiQzg3MzY4NjAzMCIsInJlY2VpdmVyTmFtZSI6IkhlYmF0IEdyb3VwIiwidG90YWxFeGNsdWRpbmdUYXgiOiIxNDM2LjUiLCJ0b3RhbERpc2NvdW50IjoiMTQzNi41IiwidG90YWxOZXRBbW91bnQiOiIxNDM2LjUiLCJ0b3RhbFBheWFibGVBbW91bnQiOiIxNDM2LjUifQ==",
                    "mimeType": "application/json"
                }
            ]
        }
    }
}
Response sample with an error
{
    "timestamp": 1732034087,
    "message": "TaxAuthorityRejectedError",
    "status": 200,
    "success": false,
    "errors": [
        {
            "subCode": "404",
            "message": "It seems that you are not authorized to get document details"
        }
    ]
}

Step 2: Sovos validates the request and calls IRBM

Upon receipt of the request, Sovos validates the request and calls IRBM to retrieve the details for the given UUID.

Step 3: IRBM Returns the document details

IRBM returns all the details for the given UUID.

Step 4: Sovos returns the document details

After receiving the details for the given UUID from IRBM, the Sovos Platform builds the consultation response that is returned to the user. This response contains a Base64-encoded JSON object representing the details of the document.

Mock tax authority integration

Customers can test the integration with the Sovos solution using a mocked tax authority communication.

It's possible to use a mock service created by Sovos, which replaces the tax authority communication in the solution and allows limited testing of business scenarios.

Customers can dynamically distinguish between mock services and testing against the real tax authority UAT environment on a document-by-document basis.

Testing with Sovos' mocked service is not a replacement for UAT/Sandbox environment testing, so UAT/Sandbox environment testing should still be performed before moving to the Production environment. This is because Sovos' mocked service cannot fully simulate the tax authority behavior and validations due to the vast amount of different business scenarios that are applicable for Malaysia.

Outbound mock

The outbound mock simulates sending documents to the tax authority. To use the mock service, customers must upload specific credentials using the Configurations v2 resource. Afterward, they can proceed to issue documents.

How to configure the outbound mock
To use the mock service for Malaysia outbound, configure any arbitrary credentials (inside the value object) through the settings endpoint from configurations v2.

Here is a sample request:

curl --location --request POST 'https://api-test.sovos.com/v2/configurations/organizations/YOUR-ORG-ID/settings' \
--header 'x-correlationId: developer-guide' \
--header 'Content-Type: application/json' \
--data-raw '[
    {
        "context": "transmission",
        "configurations": [
            {
                "name": "partner_credentials_irbm",
                "value": {
                    "client_id": "INSERT-ARBITRARY-CLIENTID-HERE",
                    "client_secret": "INSERT-ARBITRARY-SECRET-HERE"
                },
                "scope": {
                    "category": "MY_INV",
                    "productId": "my_UBLInvoice__1.0",
                    "orgId": "YOUR-ORG-ID",
                    "taxId": "YOUR-COMPANY-TAXID"
                }
            }
        ]
    }
]'
How to use the outbound mock
When sending a document with a POST request to the Send a new Document endpoint to reach the mocked services, the x-correlationId value must end with "-mock". For example, x-correlationId = "123-mock". Sovos' solution distinguishes between the mocked outbound service and the real tax authority UAT environment based on the presence of this value.

When using the GET method with the Notifications endpoints, the x-correlationId doesn't need to end with "-mock". This is because the Sovos solution does not differentiate between mocked notifications and notifications related to the real tax authority UAT environment — they are both treated as "notifications", which can be retrieved normally. The same reasoning applies to using the PUT method with the Mark Notifications as acknowledged endpoint: There's no need to add an x-correlationId ending with "-mock".

To test outbound against the real tax authority UAT environment, it is crucial to follow the correct prerequisites and configuration steps. This involves obtaining the real tax authority credentials and configuring them in the Sovos solution. So, when issuing the document, ensure that the x-correlationId doesn't end with "-mock".

Outbound mock validation
The main purpose of the mocked service is to allow customers in the early stages of integration to test the end-to-end flow without being blocked by the lack of real tax authority credentials. Only a limited set of scenarios can be tested based on the document's content, as explained in the list below:
  • If one or more required fields in the document are missing or empty.

  • Submit exactly same document (same hash) within 10 minutes.

    Request payload is identical to a previous payload sent in the last 10 minutes. Try to submit payload after {secondsRemaining} seconds (seconds remaining replaced with actual value).

  • If the request hash value of the document is not the same as the hash we compute based on the document.

    Document hash is not valid.

  • IssueDate or IssueTime missing in the document.

    IssueDate OR IssueTime is missing in the document.

  • IssueDate or IssueTime are not valid date times.

    IssueDate OR IssueTime is not in a valid format.

  • IssueDateTime (which is created combining IssueDate and IssueTime from document) is over 72 hours in the past.

    Issuance date time value of the document is too old that cannot be submitted.

  • If IssueDateTime is in the future.

    Document issuance date time is in the future.

  • UUID is not found.

    Document UUID :uuid is not found. Please ensure the UUID is correct.

SCI Samples

The samples provided below are meant to be guidelines for integration with the Indirect Tax API in Malaysia and should be treated as such, since each integrating system is unique and has different requirements. This means that the samples cannot be copied directly, and must be adapted to the your system during the integration.

SCI normal invoice

<?xml version="1.0" encoding="UTF-8"?>
<sbd:StandardBusinessDocument xmlns="http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ad="http://www.sovos.com/namespaces/additionalData" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:n0="urn:oasis:names:specification:ubl:schema:xsd:CommonSignatureComponents-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:cct="urn:un:unece:uncefact:data:specification:CoreComponentTypeSchemaModule:2" xmlns:crn="urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2" xmlns:dbn="urn:oasis:names:specification:ubl:schema:xsd:DebitNote-2" xmlns:enc="http://www.sovos.com/namespaces/base64Document" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" xmlns:inv="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:leg="http://www.sovos.com/namespaces/sovosExtensions/LegalExtension" xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDataTypes-2" xmlns:sac="urn:oasis:names:specification:ubl:schema:xsd:SignatureAggregateComponents-2" xmlns:sbc="urn:oasis:names:specification:ubl:schema:xsd:SignatureBasicComponents-2" xmlns:sci="http://www.sovos.com/namespaces/sovosCanonicalInvoice" xmlns:sov="http://www.sovos.com/namespaces/sovosExtensions" xmlns:svs="http://www.sovos.com/namespaces/sovosDocument" xmlns:sbd="http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader" xmlns:udt="urn:oasis:names:specification:ubl:schema:xsd:UnqualifiedDataTypes-2" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" xsi:schemaLocation="http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader file:///C:/git/turkey/transformation/SCI/Turkey/UBL%202.1/Schemas/Sovos/Standard%20Business%20Document/SBD.xsd">
	<sbd:StandardBusinessDocumentHeader>
		<sbd:HeaderVersion>1.0</sbd:HeaderVersion>
		<sbd:Sender>
			<sbd:Identifier Authority="MY">C05897629090</sbd:Identifier>
		</sbd:Sender>
		<sbd:Receiver>
			<sbd:Identifier Authority="MY">C23451377020</sbd:Identifier>
		</sbd:Receiver>
		<sbd:DocumentIdentification>
			<sbd:Standard>urn:oasis:names:specification:ubl:schema:xsd:Invoice-2</sbd:Standard>
			<sbd:TypeVersion>2.1</sbd:TypeVersion>
			<sbd:InstanceIdentifier/>
			<sbd:Type>Invoice</sbd:Type>
			<sbd:MultipleType>false</sbd:MultipleType>
			<sbd:CreationDateAndTime>2024-06-03T00:00:00Z</sbd:CreationDateAndTime>
		</sbd:DocumentIdentification>
		<sbd:BusinessScope>
			<sbd:Scope>
				<sbd:Type>Country</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>MY</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>Mapping.TransformDocument</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>SCI-TO-LEGAL_INVOICE</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>Mapping.OutputSchema</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>UBLInvoice</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>CompanyCode</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>C05897629090</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>SenderDocumentId</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>S-0006-issuance</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>SenderSystemId</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>ERPSystem</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>ProcessType</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>Outbound</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>BusinessProcess</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:BusinessService>
					<sbd:BusinessServiceName>Default</sbd:BusinessServiceName>
				</sbd:BusinessService>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>BusinessCategory</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>B2B</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>Version</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>1.0</sbd:Identifier>
			</sbd:Scope>
		</sbd:BusinessScope>
	</sbd:StandardBusinessDocumentHeader>
	<svs:SovosDocument>
		<sci:SovosCanonicalInvoice>
			<inv:Invoice>
				<cbc:ID>1234567894</cbc:ID>
				<cbc:IssueDate>2024-06-05</cbc:IssueDate>
				<cbc:IssueTime>15:30:00Z</cbc:IssueTime>
				<cbc:InvoiceTypeCode listVersionID="1.0">01</cbc:InvoiceTypeCode>
				<cbc:DocumentCurrencyCode>MYR</cbc:DocumentCurrencyCode>
				<cac:InvoicePeriod>
					<cbc:StartDate>2017-11-26</cbc:StartDate>
					<cbc:EndDate>2017-11-30</cbc:EndDate>
					<cbc:Description>Monthly</cbc:Description>
				</cac:InvoicePeriod>
				<cac:BillingReference>
					<cac:AdditionalDocumentReference>
						<cbc:ID>E12345678912</cbc:ID>
					</cac:AdditionalDocumentReference>
				</cac:BillingReference>
				<cac:AdditionalDocumentReference>
					<cbc:ID>E12345678912</cbc:ID>
					<cbc:DocumentType>CustomsImportForm</cbc:DocumentType>
				</cac:AdditionalDocumentReference>
				<cac:AdditionalDocumentReference>
					<cbc:ID>ASEAN-Australia-New Zealand FTA (AANZFTA)</cbc:ID>
					<cbc:DocumentType>FreeTradeAgreement</cbc:DocumentType>
					<cbc:DocumentDescription>Sample Description</cbc:DocumentDescription>
				</cac:AdditionalDocumentReference>
				<cac:AdditionalDocumentReference>
					<cbc:ID>E12345678912</cbc:ID>
					<cbc:DocumentType>K2</cbc:DocumentType>
				</cac:AdditionalDocumentReference>
				<cac:AdditionalDocumentReference>
					<cbc:ID>CIF</cbc:ID>
				</cac:AdditionalDocumentReference>
				<cac:AccountingSupplierParty>
					<cbc:AdditionalAccountID schemeAgencyName="CertEX">CPT-CCN-W-211111-KL-000002</cbc:AdditionalAccountID>
					<cac:Party>
						<cbc:IndustryClassificationCode name="Growing of maize">01111</cbc:IndustryClassificationCode>
						<cac:PartyIdentification>
							<cbc:ID schemeID="TIN">C05897629090</cbc:ID>
						</cac:PartyIdentification>
						<cac:PartyIdentification>
							<cbc:ID schemeID="BRN">199801007405</cbc:ID>
						</cac:PartyIdentification>
						<cac:PostalAddress>
							<cbc:CityName>Kuala Lumpur</cbc:CityName>
							<cbc:PostalZone>50480</cbc:PostalZone>
							<cbc:CountrySubentityCode>14</cbc:CountrySubentityCode>
							<cac:AddressLine>
								<cbc:Line>Lot 66</cbc:Line>
							</cac:AddressLine>
							<cac:AddressLine>
								<cbc:Line>Bangunan Merdeka</cbc:Line>
							</cac:AddressLine>
							<cac:AddressLine>
								<cbc:Line>Persiaran Jaya</cbc:Line>
							</cac:AddressLine>
							<cac:Country>
								<cbc:IdentificationCode listID="ISO3166-1" listAgencyID="6">MYS</cbc:IdentificationCode>
							</cac:Country>
						</cac:PostalAddress>
						<cac:PartyLegalEntity>
							<cbc:RegistrationName>AMS Setia Jaya Sdn. Bhd.</cbc:RegistrationName>
						</cac:PartyLegalEntity>
						<cac:Contact>
							<cbc:Telephone>+60-123456789</cbc:Telephone>
							<cbc:ElectronicMail>general.ams@supplier.com</cbc:ElectronicMail>
						</cac:Contact>
					</cac:Party>
				</cac:AccountingSupplierParty>
				<cac:AccountingCustomerParty>
					<cac:Party>
						<cac:PartyIdentification>
							<cbc:ID schemeID="TIN">C23451377020</cbc:ID>
						</cac:PartyIdentification>
						<cac:PartyIdentification>
							<cbc:ID schemeID="BRN">201401001812</cbc:ID>
						</cac:PartyIdentification>
						<cac:PostalAddress>
							<cbc:CityName>Kuala Lumpur</cbc:CityName>
							<cbc:PostalZone>50480</cbc:PostalZone>
							<cbc:CountrySubentityCode>14</cbc:CountrySubentityCode>
							<cac:AddressLine>
								<cbc:Line>Lot 66</cbc:Line>
							</cac:AddressLine>
							<cac:AddressLine>
								<cbc:Line>Bangunan Merdeka</cbc:Line>
							</cac:AddressLine>
							<cac:AddressLine>
								<cbc:Line>Persiaran Jaya</cbc:Line>
							</cac:AddressLine>
							<cac:Country>
								<cbc:IdentificationCode listID="ISO3166-1" listAgencyID="6">MYS</cbc:IdentificationCode>
							</cac:Country>
						</cac:PostalAddress>
						<cac:PartyLegalEntity>
							<cbc:RegistrationName>Hebat Group</cbc:RegistrationName>
						</cac:PartyLegalEntity>
						<cac:Contact>
							<cbc:Telephone>+60-123456789</cbc:Telephone>
							<cbc:ElectronicMail>name@buyer.com</cbc:ElectronicMail>
						</cac:Contact>
					</cac:Party>
				</cac:AccountingCustomerParty>
				<cac:Delivery>
					<cac:DeliveryParty>
						<cac:PartyIdentification>
							<cbc:ID schemeID="TIN">C23451377020</cbc:ID>
						</cac:PartyIdentification>
						<cac:PartyIdentification>
							<cbc:ID schemeID="BRN">201401001812</cbc:ID>
						</cac:PartyIdentification>
						<cac:PostalAddress>
							<cbc:CityName>Kuala Lumpur</cbc:CityName>
							<cbc:PostalZone>50480</cbc:PostalZone>
							<cbc:CountrySubentityCode>14</cbc:CountrySubentityCode>
							<cac:AddressLine>
								<cbc:Line>Lot 66</cbc:Line>
							</cac:AddressLine>
							<cac:AddressLine>
								<cbc:Line>Bangunan Merdeka</cbc:Line>
							</cac:AddressLine>
							<cac:AddressLine>
								<cbc:Line>Persiaran Jaya</cbc:Line>
							</cac:AddressLine>
							<cac:Country>
								<cbc:IdentificationCode listID="ISO3166-1" listAgencyID="6">MYS</cbc:IdentificationCode>
							</cac:Country>
						</cac:PostalAddress>
						<cac:PartyLegalEntity>
							<cbc:RegistrationName>Greenz Sdn. Bhd.</cbc:RegistrationName>
						</cac:PartyLegalEntity>
					</cac:DeliveryParty>
					<cac:Shipment>
						<cbc:ID>1234</cbc:ID>
						<cac:FreightAllowanceCharge>
							<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
							<cbc:AllowanceChargeReason>Service charge</cbc:AllowanceChargeReason>
							<cbc:Amount currencyID="MYR">100</cbc:Amount>
						</cac:FreightAllowanceCharge>
					</cac:Shipment>
				</cac:Delivery>
				<cac:PaymentMeans>
					<cbc:PaymentMeansCode>01</cbc:PaymentMeansCode>
					<cac:PayeeFinancialAccount>
						<cbc:ID>1234567890123</cbc:ID>
					</cac:PayeeFinancialAccount>
				</cac:PaymentMeans>
				<cac:PaymentTerms>
					<cbc:Note>Payment method is cash</cbc:Note>
				</cac:PaymentTerms>
				<cac:PrepaidPayment>
					<cbc:ID>E12345678912</cbc:ID>
					<cbc:PaidAmount currencyID="MYR">1</cbc:PaidAmount>
					<cbc:PaidDate>2000-01-01</cbc:PaidDate>
					<cbc:PaidTime>12:00:00Z</cbc:PaidTime>
				</cac:PrepaidPayment>
				<cac:AllowanceCharge>
					<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
					<cbc:AllowanceChargeReason>Sample Description</cbc:AllowanceChargeReason>
					<cbc:Amount currencyID="MYR">100</cbc:Amount>
				</cac:AllowanceCharge>
				<cac:AllowanceCharge>
					<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
					<cbc:AllowanceChargeReason>Service charge</cbc:AllowanceChargeReason>
					<cbc:Amount currencyID="MYR">100</cbc:Amount>
				</cac:AllowanceCharge>
				<cac:TaxExchangeRate>
					<cbc:SourceCurrencyCode>MYR</cbc:SourceCurrencyCode>
					<cbc:TargetCurrencyCode>MYR</cbc:TargetCurrencyCode>
					<cbc:CalculationRate>1</cbc:CalculationRate>
				</cac:TaxExchangeRate>
				<cac:TaxTotal>
					<cbc:TaxAmount currencyID="MYR">87.63</cbc:TaxAmount>
					<cac:TaxSubtotal>
						<cbc:TaxableAmount currencyID="MYR">87.63</cbc:TaxableAmount>
						<cbc:TaxAmount currencyID="MYR">87.63</cbc:TaxAmount>
						<cac:TaxCategory>
						    <cbc:ID>01</cbc:ID>
							<cbc:TaxExemptionReason>Exempt New Means of Transport</cbc:TaxExemptionReason>
							<cac:TaxScheme>
								<cbc:ID>OTH</cbc:ID>
							</cac:TaxScheme>
						</cac:TaxCategory>
					</cac:TaxSubtotal>
				</cac:TaxTotal>
				<cac:LegalMonetaryTotal>
					<cbc:LineExtensionAmount currencyID="MYR">1436.5</cbc:LineExtensionAmount>
					<cbc:TaxExclusiveAmount currencyID="MYR">1436.5</cbc:TaxExclusiveAmount>
					<cbc:TaxInclusiveAmount currencyID="MYR">1436.5</cbc:TaxInclusiveAmount>
					<cbc:AllowanceTotalAmount currencyID="MYR">1436.5</cbc:AllowanceTotalAmount>
					<cbc:ChargeTotalAmount currencyID="MYR">1436.5</cbc:ChargeTotalAmount>
					<cbc:PayableRoundingAmount currencyID="MYR">0.3</cbc:PayableRoundingAmount>
					<cbc:PayableAmount currencyID="MYR">1436.5</cbc:PayableAmount>
				</cac:LegalMonetaryTotal>
				<cac:InvoiceLine>
					<cbc:ID>1234</cbc:ID>
					<cbc:InvoicedQuantity unitCode="C62">1</cbc:InvoicedQuantity>
					<cbc:LineExtensionAmount currencyID="MYR">1436.5</cbc:LineExtensionAmount>
					<cac:AllowanceCharge>
						<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
						<cbc:AllowanceChargeReason>Sample Description</cbc:AllowanceChargeReason>
						<cbc:MultiplierFactorNumeric>0.15</cbc:MultiplierFactorNumeric>
						<cbc:Amount currencyID="MYR">100</cbc:Amount>
					</cac:AllowanceCharge>
					<cac:AllowanceCharge>
						<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
						<cbc:AllowanceChargeReason>Sample Description</cbc:AllowanceChargeReason>
						<cbc:MultiplierFactorNumeric>0.1</cbc:MultiplierFactorNumeric>
						<cbc:Amount currencyID="MYR">100</cbc:Amount>
					</cac:AllowanceCharge>
					<cac:TaxTotal>
						<cbc:TaxAmount currencyID="MYR">1460.5</cbc:TaxAmount>
						<cac:TaxSubtotal>
							<cbc:TaxableAmount currencyID="MYR">1460.5</cbc:TaxableAmount>
							<cbc:TaxAmount currencyID="MYR">0</cbc:TaxAmount>
							<cbc:Percent>6</cbc:Percent>
							<cac:TaxCategory>
								<cbc:Percent>6</cbc:Percent>
								<cbc:TaxExemptionReason>Exempt New Means of Transport</cbc:TaxExemptionReason>
								<cac:TaxScheme>
									<cbc:ID>OTH</cbc:ID>
								</cac:TaxScheme>
							</cac:TaxCategory>
						</cac:TaxSubtotal>
					</cac:TaxTotal>
					<cac:Item>
						<cbc:Description>Laptop Peripherals</cbc:Description>
						<cac:OriginCountry>
							<cbc:IdentificationCode>MYS</cbc:IdentificationCode>
						</cac:OriginCountry>
						<cac:CommodityClassification>
							<cbc:ItemClassificationCode listID="PTC">12344321</cbc:ItemClassificationCode>
						</cac:CommodityClassification>
						<cac:CommodityClassification>
							<cbc:ItemClassificationCode listID="CLASS">12344321</cbc:ItemClassificationCode>
						</cac:CommodityClassification>
					</cac:Item>
					<cac:Price>
						<cbc:PriceAmount currencyID="MYR">17</cbc:PriceAmount>
					</cac:Price>
					<cac:ItemPriceExtension>
						<cbc:Amount currencyID="MYR">100</cbc:Amount>
					</cac:ItemPriceExtension>
				</cac:InvoiceLine>
			</inv:Invoice>
		</sci:SovosCanonicalInvoice>
	</svs:SovosDocument>
</sbd:StandardBusinessDocument>

SCI self-billed invoice

<?xml version="1.0" encoding="UTF-8"?>
<sbd:StandardBusinessDocument xmlns="http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ad="http://www.sovos.com/namespaces/additionalData" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:n0="urn:oasis:names:specification:ubl:schema:xsd:CommonSignatureComponents-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:cct="urn:un:unece:uncefact:data:specification:CoreComponentTypeSchemaModule:2" xmlns:crn="urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2" xmlns:dbn="urn:oasis:names:specification:ubl:schema:xsd:DebitNote-2" xmlns:enc="http://www.sovos.com/namespaces/base64Document" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" xmlns:inv="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:leg="http://www.sovos.com/namespaces/sovosExtensions/LegalExtension" xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDataTypes-2" xmlns:sac="urn:oasis:names:specification:ubl:schema:xsd:SignatureAggregateComponents-2" xmlns:sbc="urn:oasis:names:specification:ubl:schema:xsd:SignatureBasicComponents-2" xmlns:sci="http://www.sovos.com/namespaces/sovosCanonicalInvoice" xmlns:sov="http://www.sovos.com/namespaces/sovosExtensions" xmlns:svs="http://www.sovos.com/namespaces/sovosDocument" xmlns:sbd="http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader" xmlns:udt="urn:oasis:names:specification:ubl:schema:xsd:UnqualifiedDataTypes-2" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" xsi:schemaLocation="http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader file:///C:/git/turkey/transformation/SCI/Turkey/UBL%202.1/Schemas/Sovos/Standard%20Business%20Document/SBD.xsd">
	<sbd:StandardBusinessDocumentHeader>
		<sbd:HeaderVersion>1.0</sbd:HeaderVersion>
		<sbd:Sender>
			<sbd:Identifier Authority="MY">C05897629090</sbd:Identifier>
		</sbd:Sender>
		<sbd:Receiver>
			<sbd:Identifier Authority="MY">C23451377020</sbd:Identifier>
		</sbd:Receiver>
		<sbd:DocumentIdentification>
			<sbd:Standard>urn:oasis:names:specification:ubl:schema:xsd:Invoice-2</sbd:Standard>
			<sbd:TypeVersion>2.1</sbd:TypeVersion>
			<sbd:InstanceIdentifier/>
			<sbd:Type>Invoice</sbd:Type>
			<sbd:MultipleType>false</sbd:MultipleType>
			<sbd:CreationDateAndTime>2024-06-03T00:00:00Z</sbd:CreationDateAndTime>
		</sbd:DocumentIdentification>
		<sbd:BusinessScope>
			<sbd:Scope>
				<sbd:Type>Country</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>MY</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>Mapping.TransformDocument</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>SCI-TO-LEGAL_INVOICE</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>Mapping.OutputSchema</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>UBLInvoice</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>CompanyCode</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>C05897629090</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>SenderDocumentId</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>S-0006-issuance</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>SenderSystemId</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>ERPSystem</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>ProcessType</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>Outbound</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>BusinessProcess</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:BusinessService>
					<sbd:BusinessServiceName>Default</sbd:BusinessServiceName>
				</sbd:BusinessService>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>BusinessCategory</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>B2B</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>Version</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>1.0</sbd:Identifier>
			</sbd:Scope>
		</sbd:BusinessScope>
	</sbd:StandardBusinessDocumentHeader>
	<svs:SovosDocument>
		<sci:SovosCanonicalInvoice>
			<inv:Invoice>
				<cbc:ID>1234567894</cbc:ID>
				<cbc:IssueDate>2024-06-05</cbc:IssueDate>
				<cbc:IssueTime>15:30:00Z</cbc:IssueTime>
				<cbc:InvoiceTypeCode listVersionID="1.0">11</cbc:InvoiceTypeCode>
				<cbc:DocumentCurrencyCode>MYR</cbc:DocumentCurrencyCode>
				<cac:InvoicePeriod>
					<cbc:StartDate>2017-11-26</cbc:StartDate>
					<cbc:EndDate>2017-11-30</cbc:EndDate>
					<cbc:Description>Monthly</cbc:Description>
				</cac:InvoicePeriod>
				<cac:BillingReference>
					<cac:AdditionalDocumentReference>
						<cbc:ID>E12345678912</cbc:ID>
					</cac:AdditionalDocumentReference>
				</cac:BillingReference>
				<cac:AdditionalDocumentReference>
					<cbc:ID>E12345678912</cbc:ID>
					<cbc:DocumentType>CustomsImportForm</cbc:DocumentType>
				</cac:AdditionalDocumentReference>
				<cac:AdditionalDocumentReference>
					<cbc:ID>ASEAN-Australia-New Zealand FTA (AANZFTA)</cbc:ID>
					<cbc:DocumentType>FreeTradeAgreement</cbc:DocumentType>
					<cbc:DocumentDescription>Sample Description</cbc:DocumentDescription>
				</cac:AdditionalDocumentReference>
				<cac:AdditionalDocumentReference>
					<cbc:ID>E12345678912</cbc:ID>
					<cbc:DocumentType>K2</cbc:DocumentType>
				</cac:AdditionalDocumentReference>
				<cac:AdditionalDocumentReference>
					<cbc:ID>CIF</cbc:ID>
				</cac:AdditionalDocumentReference>
				<cac:AccountingSupplierParty>
					<cbc:AdditionalAccountID schemeAgencyName="CertEX">CPT-CCN-W-211111-KL-000002</cbc:AdditionalAccountID>
					<cac:Party>
						<cbc:IndustryClassificationCode name="Growing of maize">01111</cbc:IndustryClassificationCode>
						<cac:PartyIdentification>
							<cbc:ID schemeID="TIN">C05897629090</cbc:ID>
						</cac:PartyIdentification>
						<cac:PartyIdentification>
							<cbc:ID schemeID="BRN">199801007405</cbc:ID>
						</cac:PartyIdentification>
						<cac:PostalAddress>
							<cbc:CityName>Kuala Lumpur</cbc:CityName>
							<cbc:PostalZone>50480</cbc:PostalZone>
							<cbc:CountrySubentityCode>14</cbc:CountrySubentityCode>
							<cac:AddressLine>
								<cbc:Line>Lot 66</cbc:Line>
							</cac:AddressLine>
							<cac:AddressLine>
								<cbc:Line>Bangunan Merdeka</cbc:Line>
							</cac:AddressLine>
							<cac:AddressLine>
								<cbc:Line>Persiaran Jaya</cbc:Line>
							</cac:AddressLine>
							<cac:Country>
								<cbc:IdentificationCode listID="ISO3166-1" listAgencyID="6">MYS</cbc:IdentificationCode>
							</cac:Country>
						</cac:PostalAddress>
						<cac:PartyLegalEntity>
							<cbc:RegistrationName>AMS Setia Jaya Sdn. Bhd.</cbc:RegistrationName>
						</cac:PartyLegalEntity>
						<cac:Contact>
							<cbc:Telephone>+60-123456789</cbc:Telephone>
							<cbc:ElectronicMail>general.ams@supplier.com</cbc:ElectronicMail>
						</cac:Contact>
					</cac:Party>
				</cac:AccountingSupplierParty>
				<cac:AccountingCustomerParty>
					<cac:Party>
						<cac:PartyIdentification>
							<cbc:ID schemeID="TIN">C23451377020</cbc:ID>
						</cac:PartyIdentification>
						<cac:PartyIdentification>
							<cbc:ID schemeID="BRN">201401001812</cbc:ID>
						</cac:PartyIdentification>
						<cac:PostalAddress>
							<cbc:CityName>Kuala Lumpur</cbc:CityName>
							<cbc:PostalZone>50480</cbc:PostalZone>
							<cbc:CountrySubentityCode>14</cbc:CountrySubentityCode>
							<cac:AddressLine>
								<cbc:Line>Lot 66</cbc:Line>
							</cac:AddressLine>
							<cac:AddressLine>
								<cbc:Line>Bangunan Merdeka</cbc:Line>
							</cac:AddressLine>
							<cac:AddressLine>
								<cbc:Line>Persiaran Jaya</cbc:Line>
							</cac:AddressLine>
							<cac:Country>
								<cbc:IdentificationCode listID="ISO3166-1" listAgencyID="6">MYS</cbc:IdentificationCode>
							</cac:Country>
						</cac:PostalAddress>
						<cac:PartyLegalEntity>
							<cbc:RegistrationName>Hebat Group</cbc:RegistrationName>
						</cac:PartyLegalEntity>
						<cac:Contact>
							<cbc:Telephone>+60-123456789</cbc:Telephone>
							<cbc:ElectronicMail>name@buyer.com</cbc:ElectronicMail>
						</cac:Contact>
					</cac:Party>
				</cac:AccountingCustomerParty>
				<cac:Delivery>
					<cac:DeliveryParty>
						<cac:PartyIdentification>
							<cbc:ID schemeID="TIN">C23451377020</cbc:ID>
						</cac:PartyIdentification>
						<cac:PartyIdentification>
							<cbc:ID schemeID="BRN">201401001812</cbc:ID>
						</cac:PartyIdentification>
						<cac:PostalAddress>
							<cbc:CityName>Kuala Lumpur</cbc:CityName>
							<cbc:PostalZone>50480</cbc:PostalZone>
							<cbc:CountrySubentityCode>14</cbc:CountrySubentityCode>
							<cac:AddressLine>
								<cbc:Line>Lot 66</cbc:Line>
							</cac:AddressLine>
							<cac:AddressLine>
								<cbc:Line>Bangunan Merdeka</cbc:Line>
							</cac:AddressLine>
							<cac:AddressLine>
								<cbc:Line>Persiaran Jaya</cbc:Line>
							</cac:AddressLine>
							<cac:Country>
								<cbc:IdentificationCode listID="ISO3166-1" listAgencyID="6">MYS</cbc:IdentificationCode>
							</cac:Country>
						</cac:PostalAddress>
						<cac:PartyLegalEntity>
							<cbc:RegistrationName>Greenz Sdn. Bhd.</cbc:RegistrationName>
						</cac:PartyLegalEntity>
					</cac:DeliveryParty>
					<cac:Shipment>
						<cbc:ID>1234</cbc:ID>
						<cac:FreightAllowanceCharge>
							<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
							<cbc:AllowanceChargeReason>Service charge</cbc:AllowanceChargeReason>
							<cbc:Amount currencyID="MYR">100</cbc:Amount>
						</cac:FreightAllowanceCharge>
					</cac:Shipment>
				</cac:Delivery>
				<cac:PaymentMeans>
					<cbc:PaymentMeansCode>01</cbc:PaymentMeansCode>
					<cac:PayeeFinancialAccount>
						<cbc:ID>1234567890123</cbc:ID>
					</cac:PayeeFinancialAccount>
				</cac:PaymentMeans>
				<cac:PaymentTerms>
					<cbc:Note>Payment method is cash</cbc:Note>
				</cac:PaymentTerms>
				<cac:PrepaidPayment>
					<cbc:ID>E12345678912</cbc:ID>
					<cbc:PaidAmount currencyID="MYR">1</cbc:PaidAmount>
					<cbc:PaidDate>2000-01-01</cbc:PaidDate>
					<cbc:PaidTime>12:00:00Z</cbc:PaidTime>
				</cac:PrepaidPayment>
				<cac:AllowanceCharge>
					<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
					<cbc:AllowanceChargeReason>Sample Description</cbc:AllowanceChargeReason>
					<cbc:Amount currencyID="MYR">100</cbc:Amount>
				</cac:AllowanceCharge>
				<cac:AllowanceCharge>
					<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
					<cbc:AllowanceChargeReason>Service charge</cbc:AllowanceChargeReason>
					<cbc:Amount currencyID="MYR">100</cbc:Amount>
				</cac:AllowanceCharge>
				<cac:TaxExchangeRate>
					<cbc:SourceCurrencyCode>MYR</cbc:SourceCurrencyCode>
					<cbc:TargetCurrencyCode>MYR</cbc:TargetCurrencyCode>
					<cbc:CalculationRate>1</cbc:CalculationRate>
				</cac:TaxExchangeRate>
				<cac:TaxTotal>
					<cbc:TaxAmount currencyID="MYR">87.63</cbc:TaxAmount>
					<cac:TaxSubtotal>
						<cbc:TaxableAmount currencyID="MYR">87.63</cbc:TaxableAmount>
						<cbc:TaxAmount currencyID="MYR">87.63</cbc:TaxAmount>
						<cac:TaxCategory>
						    <cbc:ID>01</cbc:ID>
							<cbc:TaxExemptionReason>Exempt New Means of Transport</cbc:TaxExemptionReason>
							<cac:TaxScheme>
								<cbc:ID>OTH</cbc:ID>
							</cac:TaxScheme>
						</cac:TaxCategory>
					</cac:TaxSubtotal>
				</cac:TaxTotal>
				<cac:LegalMonetaryTotal>
					<cbc:LineExtensionAmount currencyID="MYR">1436.5</cbc:LineExtensionAmount>
					<cbc:TaxExclusiveAmount currencyID="MYR">1436.5</cbc:TaxExclusiveAmount>
					<cbc:TaxInclusiveAmount currencyID="MYR">1436.5</cbc:TaxInclusiveAmount>
					<cbc:AllowanceTotalAmount currencyID="MYR">1436.5</cbc:AllowanceTotalAmount>
					<cbc:ChargeTotalAmount currencyID="MYR">1436.5</cbc:ChargeTotalAmount>
					<cbc:PayableRoundingAmount currencyID="MYR">0.3</cbc:PayableRoundingAmount>
					<cbc:PayableAmount currencyID="MYR">1436.5</cbc:PayableAmount>
				</cac:LegalMonetaryTotal>
				<cac:InvoiceLine>
					<cbc:ID>1234</cbc:ID>
					<cbc:InvoicedQuantity unitCode="C62">1</cbc:InvoicedQuantity>
					<cbc:LineExtensionAmount currencyID="MYR">1436.5</cbc:LineExtensionAmount>
					<cac:AllowanceCharge>
						<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
						<cbc:AllowanceChargeReason>Sample Description</cbc:AllowanceChargeReason>
						<cbc:MultiplierFactorNumeric>0.15</cbc:MultiplierFactorNumeric>
						<cbc:Amount currencyID="MYR">100</cbc:Amount>
					</cac:AllowanceCharge>
					<cac:AllowanceCharge>
						<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
						<cbc:AllowanceChargeReason>Sample Description</cbc:AllowanceChargeReason>
						<cbc:MultiplierFactorNumeric>0.1</cbc:MultiplierFactorNumeric>
						<cbc:Amount currencyID="MYR">100</cbc:Amount>
					</cac:AllowanceCharge>
					<cac:TaxTotal>
						<cbc:TaxAmount currencyID="MYR">1460.5</cbc:TaxAmount>
						<cac:TaxSubtotal>
							<cbc:TaxableAmount currencyID="MYR">1460.5</cbc:TaxableAmount>
							<cbc:TaxAmount currencyID="MYR">0</cbc:TaxAmount>
							<cbc:Percent>6</cbc:Percent>
							<cac:TaxCategory>
								<cbc:Percent>6</cbc:Percent>
								<cbc:TaxExemptionReason>Exempt New Means of Transport</cbc:TaxExemptionReason>
								<cac:TaxScheme>
									<cbc:ID>OTH</cbc:ID>
								</cac:TaxScheme>
							</cac:TaxCategory>
						</cac:TaxSubtotal>
					</cac:TaxTotal>
					<cac:Item>
						<cbc:Description>Laptop Peripherals</cbc:Description>
						<cac:OriginCountry>
							<cbc:IdentificationCode>MYS</cbc:IdentificationCode>
						</cac:OriginCountry>
						<cac:CommodityClassification>
							<cbc:ItemClassificationCode listID="PTC">12344321</cbc:ItemClassificationCode>
						</cac:CommodityClassification>
						<cac:CommodityClassification>
							<cbc:ItemClassificationCode listID="CLASS">12344321</cbc:ItemClassificationCode>
						</cac:CommodityClassification>
					</cac:Item>
					<cac:Price>
						<cbc:PriceAmount currencyID="MYR">17</cbc:PriceAmount>
					</cac:Price>
					<cac:ItemPriceExtension>
						<cbc:Amount currencyID="MYR">100</cbc:Amount>
					</cac:ItemPriceExtension>
				</cac:InvoiceLine>
			</inv:Invoice>
		</sci:SovosCanonicalInvoice>
	</svs:SovosDocument>
</sbd:StandardBusinessDocument>

SCI consolidated invoice

<?xml version="1.0" encoding="utf-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
	<cbc:ID>20240613164512</cbc:ID>
	<cbc:IssueDate>2024-06-13</cbc:IssueDate>
	<cbc:IssueTime>00:00:01Z</cbc:IssueTime>
	<cbc:InvoiceTypeCode listVersionID="1.0">01</cbc:InvoiceTypeCode>
	<cbc:DocumentCurrencyCode>MYR</cbc:DocumentCurrencyCode>
	<cac:AccountingSupplierParty>
		<cac:Party>
			<cbc:IndustryClassificationCode name="Growing of maize">01111</cbc:IndustryClassificationCode>
			<cac:PartyIdentification>
				<cbc:ID schemeID="TIN">C873686030</cbc:ID>
			</cac:PartyIdentification>
			<cac:PartyIdentification>
				<cbc:ID schemeID="BRN">197501000529</cbc:ID>
			</cac:PartyIdentification>
			<cac:PostalAddress>
				<cbc:CityName>Kuala Lumpur</cbc:CityName>
				<cbc:PostalZone>50480</cbc:PostalZone>
				<cbc:CountrySubentityCode>14</cbc:CountrySubentityCode>
				<cac:AddressLine>
					<cbc:Line>Lot 66 Bangunan Merdeka</cbc:Line>
				</cac:AddressLine>
				<cac:AddressLine>
					<cbc:Line>Persiaran Jaya</cbc:Line>
				</cac:AddressLine>
				<cac:Country>
					<cbc:IdentificationCode listID="ISO3166-1" listAgencyID="6">MYS</cbc:IdentificationCode>
				</cac:Country>
			</cac:PostalAddress>
			<cac:PartyLegalEntity>
				<cbc:RegistrationName>AMS Setia Jaya Sdn. Bhd</cbc:RegistrationName>
			</cac:PartyLegalEntity>
			<cac:Contact>
				<cbc:Telephone>+60-123456789</cbc:Telephone>
				<cbc:ElectronicMail>general.ams@supplier.com</cbc:ElectronicMail>
			</cac:Contact>
		</cac:Party>
	</cac:AccountingSupplierParty>
	<cac:AccountingCustomerParty>
		<cac:Party>
			<cac:PartyIdentification>
				<cbc:ID schemeID="TIN">EI00000000010</cbc:ID>
			</cac:PartyIdentification>
			<cac:PartyIdentification>
				<cbc:ID schemeID="BRN">NA</cbc:ID>
			</cac:PartyIdentification>
			<cac:PostalAddress>
				<cac:AddressLine>
					<cbc:Line>NA</cbc:Line>
				</cac:AddressLine>
			</cac:PostalAddress>
			<cac:PartyLegalEntity>
				<cbc:RegistrationName>General Public</cbc:RegistrationName>
			</cac:PartyLegalEntity>
			<cac:Contact>
				<cbc:Telephone>NA</cbc:Telephone>
			</cac:Contact>
		</cac:Party>
	</cac:AccountingCustomerParty>
	<cac:TaxTotal>
		<cbc:TaxAmount currencyID="MYR">87.63</cbc:TaxAmount>
		<cac:TaxSubtotal>
			<cbc:TaxableAmount currencyID="MYR">87.63</cbc:TaxableAmount>
			<cbc:TaxAmount currencyID="MYR">87.63</cbc:TaxAmount>
			<cbc:Percent>6</cbc:Percent>
			<cac:TaxCategory>
				<cbc:ID>01</cbc:ID>
				<cac:TaxScheme>
					<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">OTH</cbc:ID>
				</cac:TaxScheme>
			</cac:TaxCategory>
		</cac:TaxSubtotal>
	</cac:TaxTotal>
	<cac:LegalMonetaryTotal>
		<cbc:LineExtensionAmount currencyID="MYR">1436.50</cbc:LineExtensionAmount>
		<cbc:TaxExclusiveAmount currencyID="MYR">1436.50</cbc:TaxExclusiveAmount>
		<cbc:TaxInclusiveAmount currencyID="MYR">1436.50</cbc:TaxInclusiveAmount>
		<cbc:AllowanceTotalAmount currencyID="MYR">1436.50</cbc:AllowanceTotalAmount>
		<cbc:ChargeTotalAmount currencyID="MYR">1436.50</cbc:ChargeTotalAmount>
		<cbc:PayableRoundingAmount currencyID="MYR">0.30</cbc:PayableRoundingAmount>
		<cbc:PayableAmount currencyID="MYR">1436.50</cbc:PayableAmount>
	</cac:LegalMonetaryTotal>
	<cac:InvoiceLine>
		<cbc:ID>1</cbc:ID>
		<cbc:InvoicedQuantity unitCode="C62">1</cbc:InvoicedQuantity>
		<cbc:LineExtensionAmount currencyID="MYR">1436.50</cbc:LineExtensionAmount>
		<cac:TaxTotal>
			<cbc:TaxAmount currencyID="MYR">1460.50</cbc:TaxAmount>
			<cac:TaxSubtotal>
				<cbc:TaxableAmount currencyID="MYR">1460.50</cbc:TaxableAmount>
				<cbc:TaxAmount currencyID="MYR">100</cbc:TaxAmount>
				<cbc:Percent>6.00</cbc:Percent>
				<cac:TaxCategory>
					<cbc:ID>01</cbc:ID>
					<cbc:TaxExemptionReason>Exempt New Means of Transport</cbc:TaxExemptionReason>
					<cac:TaxScheme>
						<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">OTH</cbc:ID>
					</cac:TaxScheme>
				</cac:TaxCategory>
			</cac:TaxSubtotal>
		</cac:TaxTotal>
		<cac:Item>
			<cbc:Description>Laptop Peripherals</cbc:Description>
			<cac:OriginCountry>
				<cbc:IdentificationCode>MYS</cbc:IdentificationCode>
			</cac:OriginCountry>
			<cac:CommodityClassification>
				<cbc:ItemClassificationCode listID="CLASS">004</cbc:ItemClassificationCode>
			</cac:CommodityClassification>
		</cac:Item>
		<cac:Price>
			<cbc:PriceAmount currencyID="MYR">17</cbc:PriceAmount>
		</cac:Price>
		<cac:ItemPriceExtension>
			<cbc:Amount currencyID="MYR">100</cbc:Amount>
		</cac:ItemPriceExtension>
	</cac:InvoiceLine>
	<cac:InvoiceLine>
		<cbc:ID>2</cbc:ID>
		<cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
		<cbc:LineExtensionAmount currencyID="MYR">1436.50</cbc:LineExtensionAmount>
		<cac:TaxTotal>
			<cbc:TaxAmount currencyID="MYR">1460.50</cbc:TaxAmount>
			<cac:TaxSubtotal>
				<cbc:TaxableAmount currencyID="MYR">1460.50</cbc:TaxableAmount>
				<cbc:TaxAmount currencyID="MYR">100</cbc:TaxAmount>
				<cbc:Percent>6.00</cbc:Percent>
				<cac:TaxCategory>
					<cbc:ID>01</cbc:ID>
					<cbc:TaxExemptionReason>Exempt New Means of Transport</cbc:TaxExemptionReason>
					<cac:TaxScheme>
						<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">OTH</cbc:ID>
					</cac:TaxScheme>
				</cac:TaxCategory>
			</cac:TaxSubtotal>
		</cac:TaxTotal>
		<cac:Item>
			<cbc:Description>Laptop Peripheralssssss</cbc:Description>
			<cac:OriginCountry>
				<cbc:IdentificationCode>MYS</cbc:IdentificationCode>
			</cac:OriginCountry>
			<cac:CommodityClassification>
				<cbc:ItemClassificationCode listID="CLASS">004</cbc:ItemClassificationCode>
			</cac:CommodityClassification>
		</cac:Item>
		<cac:Price>
			<cbc:PriceAmount currencyID="MYR">17</cbc:PriceAmount>
		</cac:Price>
		<cac:ItemPriceExtension>
			<cbc:Amount currencyID="MYR">200</cbc:Amount>
		</cac:ItemPriceExtension>
	</cac:InvoiceLine>
</Invoice>
<?xml version="1.0" encoding="UTF-8"?>
<sbd:StandardBusinessDocument xmlns:sbd="http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" xmlns="http://uri.etsi.org/01903/v1.4.1#" xmlns:ad="http://www.sovos.com/namespaces/additionalData" xmlns:sci="http://www.sovos.com/namespaces/sovosCanonicalInvoice" xmlns:svs="http://www.sovos.com/namespaces/sovosDocument" xmlns:sov="http://www.sovos.com/namespaces/sovosExtensions" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" xmlns:n1="urn:oasis:names:specification:ubl:schema:xsd:CommonSignatureComponents-2" xmlns:crn="urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2" xmlns:dbn="urn:oasis:names:specification:ubl:schema:xsd:DebitNote-2" xmlns:fin="urn:oasis:names:specification:ubl:schema:xsd:FreightInvoice-2" xmlns:inv="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDataTypes-2" xmlns:sac="urn:oasis:names:specification:ubl:schema:xsd:SignatureAggregateComponents-2" xmlns:sbc="urn:oasis:names:specification:ubl:schema:xsd:SignatureBasicComponents-2" xmlns:udt="urn:oasis:names:specification:ubl:schema:xsd:UnqualifiedDataTypes-2" xmlns:ccts-cct="urn:un:unece:uncefact:data:specification:CoreComponentTypeSchemaModule:2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.sovos.com/namespaces/base64Document">
	<sbd:StandardBusinessDocumentHeader>
		<sbd:HeaderVersion>1.0</sbd:HeaderVersion>
		<sbd:Sender>
			<sbd:Identifier Authority="MY">SENDER</sbd:Identifier>
			<sbd:ContactInformation>
				<sbd:Contact>Sovos Support</sbd:Contact>
				<sbd:EmailAddress>support@sovos.com</sbd:EmailAddress>
				<sbd:FaxNumber>+1-212-555-1213</sbd:FaxNumber>
				<sbd:TelephoneNumber>+1-212-555-2122</sbd:TelephoneNumber>
				<sbd:ContactTypeIdentifier>Support</sbd:ContactTypeIdentifier>
			</sbd:ContactInformation>
		</sbd:Sender>
		<sbd:Receiver>
			<sbd:Identifier Authority="MY">RECEIVER</sbd:Identifier>
			<sbd:ContactInformation>
				<sbd:Contact>Sovos Customer</sbd:Contact>
				<sbd:EmailAddress>customer@sovos.com</sbd:EmailAddress>
				<sbd:FaxNumber>+1-312-555-1213</sbd:FaxNumber>
				<sbd:TelephoneNumber>+1-213-555-2122</sbd:TelephoneNumber>
				<sbd:ContactTypeIdentifier>Customer</sbd:ContactTypeIdentifier>
			</sbd:ContactInformation>
		</sbd:Receiver>
		<sbd:DocumentIdentification>
			<sbd:Standard>urn:oasis:names:specification:ubl:schema:xsd:Invoice-2</sbd:Standard>
			<sbd:TypeVersion>2.1</sbd:TypeVersion>
			<sbd:InstanceIdentifier/>
			<sbd:Type>Invoice</sbd:Type>
			<sbd:MultipleType>false</sbd:MultipleType>
			<sbd:CreationDateAndTime>2024-06-03T00:00:00Z</sbd:CreationDateAndTime>
		</sbd:DocumentIdentification>
		<sbd:BusinessScope>
			<sbd:Scope>
				<sbd:Type>Country</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>MY</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>Mapping.TransformDocument</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>LEGAL-TO-SCI_INVOICE</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>Mapping.OutputSchema</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>UBLInvoice</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>CompanyCode</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>SENDER</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>SenderDocumentId</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>DOCUMENT_ID</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>SenderSystemId</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>ERP_SYSTEM</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>ProcessType</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>Outbound</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>BusinessProcess</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier/>
				<sbd:BusinessService>
					<sbd:BusinessServiceName>Default</sbd:BusinessServiceName>
				</sbd:BusinessService>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>BusinessCategory</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>B2B</sbd:Identifier>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>MetaSchema</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier/>
			</sbd:Scope>
			<sbd:Scope>
				<sbd:Type>Version</sbd:Type>
				<sbd:InstanceIdentifier/>
				<sbd:Identifier>1.0</sbd:Identifier>
			</sbd:Scope>
		</sbd:BusinessScope>
	</sbd:StandardBusinessDocumentHeader>
	<svs:SovosDocument>
		<svs:SovosLegalDocument>
			<enc:Base64Document>
				<enc:EmbeddedDocument id="1" fileName="invoice.xml" mimeCode="application/xml">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxJbnZvaWNlIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpJbnZvaWNlLTIiIHhtbG5zOnhhZGVzPSJodHRwOi8vdXJpLmV0c2kub3JnLzAxOTAzL3YxLjMuMiMiIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIiB4bWxuczpjYWM9InVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkFnZ3JlZ2F0ZUNvbXBvbmVudHMtMiIgeG1sbnM6Y2JjPSJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpDb21tb25CYXNpY0NvbXBvbmVudHMtMiIgeG1sbnM6ZXh0PSJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpDb21tb25FeHRlbnNpb25Db21wb25lbnRzLTIiIHhtbG5zOm4wPSJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpDb21tb25TaWduYXR1cmVDb21wb25lbnRzLTIiIHhtbG5zOnFkdD0idXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6UXVhbGlmaWVkRGF0YVR5cGVzLTIiIHhtbG5zOnNhYz0idXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6U2lnbmF0dXJlQWdncmVnYXRlQ29tcG9uZW50cy0yIiB4bWxuczpzYmM9InVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOlNpZ25hdHVyZUJhc2ljQ29tcG9uZW50cy0yIiB4bWxuczp1ZHQ9InVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOlVucXVhbGlmaWVkRGF0YVR5cGVzLTIiIHhtbG5zOmNjdHMtY2N0PSJ1cm46dW46dW5lY2U6dW5jZWZhY3Q6ZGF0YTpzcGVjaWZpY2F0aW9uOkNvcmVDb21wb25lbnRUeXBlU2NoZW1hTW9kdWxlOjIiPg0KCTxjYmM6SUQ+SU5WT0lDRV9JRDwvY2JjOklEPg0KCTxjYmM6SXNzdWVEYXRlPjIwMjQtMDYtMDU8L2NiYzpJc3N1ZURhdGU+DQoJPGNiYzpJc3N1ZVRpbWU+MTU6MzA6MDBaPC9jYmM6SXNzdWVUaW1lPg0KCTxjYmM6SW52b2ljZVR5cGVDb2RlIGxpc3RWZXJzaW9uSUQ9IjEuMCI+MDE8L2NiYzpJbnZvaWNlVHlwZUNvZGU+DQoJPGNiYzpEb2N1bWVudEN1cnJlbmN5Q29kZT5NWVI8L2NiYzpEb2N1bWVudEN1cnJlbmN5Q29kZT4NCgk8Y2FjOkludm9pY2VQZXJpb2Q+DQoJCTxjYmM6U3RhcnREYXRlPjIwMTctMTEtMjY8L2NiYzpTdGFydERhdGU+DQoJCTxjYmM6RW5kRGF0ZT4yMDE3LTExLTMwPC9jYmM6RW5kRGF0ZT4NCgk8L2NhYzpJbnZvaWNlUGVyaW9kPg0KCTxjYWM6QmlsbGluZ1JlZmVyZW5jZS8+DQoJPGNhYzpBZGRpdGlvbmFsRG9jdW1lbnRSZWZlcmVuY2U+DQoJCTxjYmM6SUQ+RTEyMzQ1Njc4OTEyPC9jYmM6SUQ+DQoJCTxjYmM6RG9jdW1lbnRUeXBlPkN1c3RvbXNJbXBvcnRGb3JtPC9jYmM6RG9jdW1lbnRUeXBlPg0KCTwvY2FjOkFkZGl0aW9uYWxEb2N1bWVudFJlZmVyZW5jZT4NCgk8Y2FjOkFkZGl0aW9uYWxEb2N1bWVudFJlZmVyZW5jZT4NCgkJPGNiYzpJRD5BU0VBTi1BdXN0cmFsaWEtTmV3IFplYWxhbmQgRlRBIChBQU5aRlRBKTwvY2JjOklEPg0KCQk8Y2JjOkRvY3VtZW50VHlwZT5GcmVlVHJhZGVBZ3JlZW1lbnQ8L2NiYzpEb2N1bWVudFR5cGU+DQoJCTxjYmM6RG9jdW1lbnREZXNjcmlwdGlvbj5TYW1wbGUgRGVzY3JpcHRpb248L2NiYzpEb2N1bWVudERlc2NyaXB0aW9uPg0KCTwvY2FjOkFkZGl0aW9uYWxEb2N1bWVudFJlZmVyZW5jZT4NCgk8Y2FjOkFkZGl0aW9uYWxEb2N1bWVudFJlZmVyZW5jZT4NCgkJPGNiYzpJRD5FMTIzNDU2Nzg5MTI8L2NiYzpJRD4NCgkJPGNiYzpEb2N1bWVudFR5cGU+SzI8L2NiYzpEb2N1bWVudFR5cGU+DQoJPC9jYWM6QWRkaXRpb25hbERvY3VtZW50UmVmZXJlbmNlPg0KCTxjYWM6QWRkaXRpb25hbERvY3VtZW50UmVmZXJlbmNlPg0KCQk8Y2JjOklEPkNJRjwvY2JjOklEPg0KCTwvY2FjOkFkZGl0aW9uYWxEb2N1bWVudFJlZmVyZW5jZT4NCgk8Y2FjOkFjY291bnRpbmdTdXBwbGllclBhcnR5Pg0KCQk8Y2JjOkFkZGl0aW9uYWxBY2NvdW50SUQgc2NoZW1lQWdlbmN5TmFtZT0iQ2VydEVYIj5DUFQtQ0NOLVctMjExMTExLUtMLTAwMDAwMjwvY2JjOkFkZGl0aW9uYWxBY2NvdW50SUQ+DQoJCTxjYWM6UGFydHk+DQoJCQk8Y2JjOkluZHVzdHJ5Q2xhc3NpZmljYXRpb25Db2RlIG5hbWU9Ikdyb3dpbmcgb2YgbWFpemUiPjAxMTExPC9jYmM6SW5kdXN0cnlDbGFzc2lmaWNhdGlvbkNvZGU+DQoJCQk8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+DQoJCQkJPGNiYzpJRCBzY2hlbWVJRD0iVElOIj5TRU5ERVI8L2NiYzpJRD4NCgkJCTwvY2FjOlBhcnR5SWRlbnRpZmljYXRpb24+DQoJCQk8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+DQoJCQkJPGNiYzpJRCBzY2hlbWVJRD0iQlJOIj5TRU5ERVJfQlJOPC9jYmM6SUQ+DQoJCQk8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPg0KCQkJPGNhYzpQb3N0YWxBZGRyZXNzPg0KCQkJCTxjYmM6Q2l0eU5hbWU+S3VhbGEgTHVtcHVyPC9jYmM6Q2l0eU5hbWU+DQoJCQkJPGNiYzpQb3N0YWxab25lPjUwNDgwPC9jYmM6UG9zdGFsWm9uZT4NCgkJCQk8Y2JjOkNvdW50cnlTdWJlbnRpdHlDb2RlPjE0PC9jYmM6Q291bnRyeVN1YmVudGl0eUNvZGU+DQoJCQkJPGNhYzpBZGRyZXNzTGluZT4NCgkJCQkJPGNiYzpMaW5lPkxvdCA2NjwvY2JjOkxpbmU+DQoJCQkJPC9jYWM6QWRkcmVzc0xpbmU+DQoJCQkJPGNhYzpBZGRyZXNzTGluZT4NCgkJCQkJPGNiYzpMaW5lPkJhbmd1bmFuIE1lcmRla2E8L2NiYzpMaW5lPg0KCQkJCTwvY2FjOkFkZHJlc3NMaW5lPg0KCQkJCTxjYWM6QWRkcmVzc0xpbmU+DQoJCQkJCTxjYmM6TGluZT5QZXJzaWFyYW4gSmF5YTwvY2JjOkxpbmU+DQoJCQkJPC9jYWM6QWRkcmVzc0xpbmU+DQoJCQkJPGNhYzpDb3VudHJ5Pg0KCQkJCQk8Y2JjOklkZW50aWZpY2F0aW9uQ29kZSBsaXN0SUQ9IklTTzMxNjYtMSIgbGlzdEFnZW5jeUlEPSI2Ij5NWVM8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+DQoJCQkJPC9jYWM6Q291bnRyeT4NCgkJCTwvY2FjOlBvc3RhbEFkZHJlc3M+DQoJCQk8Y2FjOlBhcnR5TGVnYWxFbnRpdHk+DQoJCQkJPGNiYzpSZWdpc3RyYXRpb25OYW1lPkFNUyBTZXRpYSBKYXlhIFNkbi4gQmhkLjwvY2JjOlJlZ2lzdHJhdGlvbk5hbWU+DQoJCQk8L2NhYzpQYXJ0eUxlZ2FsRW50aXR5Pg0KCQkJPGNhYzpDb250YWN0Pg0KCQkJCTxjYmM6VGVsZXBob25lPis2MC0xMjM0NTY3ODk8L2NiYzpUZWxlcGhvbmU+DQoJCQkJPGNiYzpFbGVjdHJvbmljTWFpbD5nZW5lcmFsLmFtc0BzdXBwbGllci5jb208L2NiYzpFbGVjdHJvbmljTWFpbD4NCgkJCTwvY2FjOkNvbnRhY3Q+DQoJCTwvY2FjOlBhcnR5Pg0KCTwvY2FjOkFjY291bnRpbmdTdXBwbGllclBhcnR5Pg0KCTxjYWM6QWNjb3VudGluZ0N1c3RvbWVyUGFydHk+DQoJCTxjYWM6UGFydHk+DQoJCQk8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+DQoJCQkJPGNiYzpJRCBzY2hlbWVJRD0iVElOIj5SRUNFSVZFUjwvY2JjOklEPg0KCQkJPC9jYWM6UGFydHlJZGVudGlmaWNhdGlvbj4NCgkJCTxjYWM6UGFydHlJZGVudGlmaWNhdGlvbj4NCgkJCQk8Y2JjOklEIHNjaGVtZUlEPSJCUk4iPlJFQ0VJVkVSX0JSTjwvY2JjOklEPg0KCQkJPC9jYWM6UGFydHlJZGVudGlmaWNhdGlvbj4NCgkJCTxjYWM6UG9zdGFsQWRkcmVzcz4NCgkJCQk8Y2JjOkNpdHlOYW1lPkt1YWxhIEx1bXB1cjwvY2JjOkNpdHlOYW1lPg0KCQkJCTxjYmM6UG9zdGFsWm9uZT41MDQ4MDwvY2JjOlBvc3RhbFpvbmU+DQoJCQkJPGNiYzpDb3VudHJ5U3ViZW50aXR5Q29kZT4xNDwvY2JjOkNvdW50cnlTdWJlbnRpdHlDb2RlPg0KCQkJCTxjYWM6QWRkcmVzc0xpbmU+DQoJCQkJCTxjYmM6TGluZT5Mb3QgNjY8L2NiYzpMaW5lPg0KCQkJCTwvY2FjOkFkZHJlc3NMaW5lPg0KCQkJCTxjYWM6QWRkcmVzc0xpbmU+DQoJCQkJCTxjYmM6TGluZT5CYW5ndW5hbiBNZXJkZWthPC9jYmM6TGluZT4NCgkJCQk8L2NhYzpBZGRyZXNzTGluZT4NCgkJCQk8Y2FjOkFkZHJlc3NMaW5lPg0KCQkJCQk8Y2JjOkxpbmU+UGVyc2lhcmFuIEpheWE8L2NiYzpMaW5lPg0KCQkJCTwvY2FjOkFkZHJlc3NMaW5lPg0KCQkJCTxjYWM6Q291bnRyeT4NCgkJCQkJPGNiYzpJZGVudGlmaWNhdGlvbkNvZGUgbGlzdElEPSJJU08zMTY2LTEiIGxpc3RBZ2VuY3lJRD0iNiI+TVlTPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPg0KCQkJCTwvY2FjOkNvdW50cnk+DQoJCQk8L2NhYzpQb3N0YWxBZGRyZXNzPg0KCQkJPGNhYzpQYXJ0eUxlZ2FsRW50aXR5Pg0KCQkJCTxjYmM6UmVnaXN0cmF0aW9uTmFtZT5IZWJhdCBHcm91cDwvY2JjOlJlZ2lzdHJhdGlvbk5hbWU+DQoJCQk8L2NhYzpQYXJ0eUxlZ2FsRW50aXR5Pg0KCQkJPGNhYzpDb250YWN0Pg0KCQkJCTxjYmM6VGVsZXBob25lPis2MC0xMjM0NTY3ODk8L2NiYzpUZWxlcGhvbmU+DQoJCQkJPGNiYzpFbGVjdHJvbmljTWFpbD5uYW1lQGJ1eWVyLmNvbTwvY2JjOkVsZWN0cm9uaWNNYWlsPg0KCQkJPC9jYWM6Q29udGFjdD4NCgkJPC9jYWM6UGFydHk+DQoJPC9jYWM6QWNjb3VudGluZ0N1c3RvbWVyUGFydHk+DQoJPGNhYzpEZWxpdmVyeT4NCgkJPGNhYzpEZWxpdmVyeVBhcnR5Pg0KCQkJPGNhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPg0KCQkJCTxjYmM6SUQgc2NoZW1lSUQ9IlRJTiI+UkVDRUlWRVI8L2NiYzpJRD4NCgkJCTwvY2FjOlBhcnR5SWRlbnRpZmljYXRpb24+DQoJCQk8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+DQoJCQkJPGNiYzpJRCBzY2hlbWVJRD0iQlJOIj5SRUNFSVZFUl9CUk48L2NiYzpJRD4NCgkJCTwvY2FjOlBhcnR5SWRlbnRpZmljYXRpb24+DQoJCQk8Y2FjOlBvc3RhbEFkZHJlc3M+DQoJCQkJPGNiYzpDaXR5TmFtZT5LdWFsYSBMdW1wdXI8L2NiYzpDaXR5TmFtZT4NCgkJCQk8Y2JjOlBvc3RhbFpvbmU+NTA0ODA8L2NiYzpQb3N0YWxab25lPg0KCQkJCTxjYmM6Q291bnRyeVN1YmVudGl0eUNvZGU+MTQ8L2NiYzpDb3VudHJ5U3ViZW50aXR5Q29kZT4NCgkJCQk8Y2FjOkFkZHJlc3NMaW5lPg0KCQkJCQk8Y2JjOkxpbmU+TG90IDY2PC9jYmM6TGluZT4NCgkJCQk8L2NhYzpBZGRyZXNzTGluZT4NCgkJCQk8Y2FjOkFkZHJlc3NMaW5lPg0KCQkJCQk8Y2JjOkxpbmU+QmFuZ3VuYW4gTWVyZGVrYTwvY2JjOkxpbmU+DQoJCQkJPC9jYWM6QWRkcmVzc0xpbmU+DQoJCQkJPGNhYzpBZGRyZXNzTGluZT4NCgkJCQkJPGNiYzpMaW5lPlBlcnNpYXJhbiBKYXlhPC9jYmM6TGluZT4NCgkJCQk8L2NhYzpBZGRyZXNzTGluZT4NCgkJCQk8Y2FjOkNvdW50cnk+DQoJCQkJCTxjYmM6SWRlbnRpZmljYXRpb25Db2RlIGxpc3RJRD0iSVNPMzE2Ni0xIiBsaXN0QWdlbmN5SUQ9IjYiPk1ZUzwvY2JjOklkZW50aWZpY2F0aW9uQ29kZT4NCgkJCQk8L2NhYzpDb3VudHJ5Pg0KCQkJPC9jYWM6UG9zdGFsQWRkcmVzcz4NCgkJCTxjYWM6UGFydHlMZWdhbEVudGl0eT4NCgkJCQk8Y2JjOlJlZ2lzdHJhdGlvbk5hbWU+R3JlZW56IFNkbi4gQmhkLjwvY2JjOlJlZ2lzdHJhdGlvbk5hbWU+DQoJCQk8L2NhYzpQYXJ0eUxlZ2FsRW50aXR5Pg0KCQk8L2NhYzpEZWxpdmVyeVBhcnR5Pg0KCQk8Y2FjOlNoaXBtZW50Pg0KCQkJPGNhYzpGcmVpZ2h0QWxsb3dhbmNlQ2hhcmdlPg0KCQkJCTxjYmM6Q2hhcmdlSW5kaWNhdG9yPnRydWU8L2NiYzpDaGFyZ2VJbmRpY2F0b3I+DQoJCQkJPGNiYzpBbGxvd2FuY2VDaGFyZ2VSZWFzb24+U2VydmljZSBjaGFyZ2U8L2NiYzpBbGxvd2FuY2VDaGFyZ2VSZWFzb24+DQoJCQkJPGNiYzpBbW91bnQgY3VycmVuY3lJRD0iTVlSIj4xMDA8L2NiYzpBbW91bnQ+DQoJCQk8L2NhYzpGcmVpZ2h0QWxsb3dhbmNlQ2hhcmdlPg0KCQk8L2NhYzpTaGlwbWVudD4NCgk8L2NhYzpEZWxpdmVyeT4NCgk8Y2FjOlBheW1lbnRNZWFucz4NCgkJPGNiYzpQYXltZW50TWVhbnNDb2RlPjAxPC9jYmM6UGF5bWVudE1lYW5zQ29kZT4NCgkJPGNhYzpQYXllZUZpbmFuY2lhbEFjY291bnQ+DQoJCQk8Y2JjOklEPjEyMzQ1Njc4OTAxMjM8L2NiYzpJRD4NCgkJPC9jYWM6UGF5ZWVGaW5hbmNpYWxBY2NvdW50Pg0KCTwvY2FjOlBheW1lbnRNZWFucz4NCgk8Y2FjOlByZXBhaWRQYXltZW50Pg0KCQk8Y2JjOklEPkUxMjM0NTY3ODkxMjwvY2JjOklEPg0KCQk8Y2JjOlBhaWRBbW91bnQgY3VycmVuY3lJRD0iTVlSIj4xPC9jYmM6UGFpZEFtb3VudD4NCgkJPGNiYzpQYWlkRGF0ZT4yMDAwLTAxLTAxPC9jYmM6UGFpZERhdGU+DQoJCTxjYmM6UGFpZFRpbWU+MTI6MDA6MDBaPC9jYmM6UGFpZFRpbWU+DQoJPC9jYWM6UHJlcGFpZFBheW1lbnQ+DQoJPGNhYzpBbGxvd2FuY2VDaGFyZ2U+DQoJCTxjYmM6Q2hhcmdlSW5kaWNhdG9yPmZhbHNlPC9jYmM6Q2hhcmdlSW5kaWNhdG9yPg0KCQk8Y2JjOkFtb3VudCBjdXJyZW5jeUlEPSJNWVIiPjEwMDwvY2JjOkFtb3VudD4NCgk8L2NhYzpBbGxvd2FuY2VDaGFyZ2U+DQoJPGNhYzpBbGxvd2FuY2VDaGFyZ2U+DQoJCTxjYmM6Q2hhcmdlSW5kaWNhdG9yPnRydWU8L2NiYzpDaGFyZ2VJbmRpY2F0b3I+DQoJCTxjYmM6QW1vdW50IGN1cnJlbmN5SUQ9Ik1ZUiI+MTAwPC9jYmM6QW1vdW50Pg0KCTwvY2FjOkFsbG93YW5jZUNoYXJnZT4NCgk8Y2FjOlRheFRvdGFsPg0KCQk8Y2JjOlRheEFtb3VudCBjdXJyZW5jeUlEPSJNWVIiPjg3LjYzPC9jYmM6VGF4QW1vdW50Pg0KCQk8Y2FjOlRheFN1YnRvdGFsPg0KCQkJPGNiYzpUYXhhYmxlQW1vdW50IGN1cnJlbmN5SUQ9Ik1ZUiI+ODcuNjM8L2NiYzpUYXhhYmxlQW1vdW50Pg0KCQkJPGNiYzpUYXhBbW91bnQgY3VycmVuY3lJRD0iTVlSIj44Ny42MzwvY2JjOlRheEFtb3VudD4NCgkJCTxjYWM6VGF4Q2F0ZWdvcnk+DQoJCQkJPGNhYzpUYXhTY2hlbWU+DQoJCQkJCTxjYmM6SUQ+T1RIPC9jYmM6SUQ+DQoJCQkJPC9jYWM6VGF4U2NoZW1lPg0KCQkJPC9jYWM6VGF4Q2F0ZWdvcnk+DQoJCTwvY2FjOlRheFN1YnRvdGFsPg0KCTwvY2FjOlRheFRvdGFsPg0KCTxjYWM6TGVnYWxNb25ldGFyeVRvdGFsPg0KCQk8Y2JjOkxpbmVFeHRlbnNpb25BbW91bnQgY3VycmVuY3lJRD0iTVlSIj4xNDM2LjU8L2NiYzpMaW5lRXh0ZW5zaW9uQW1vdW50Pg0KCQk8Y2JjOlRheEV4Y2x1c2l2ZUFtb3VudCBjdXJyZW5jeUlEPSJNWVIiPjE0MzYuNTwvY2JjOlRheEV4Y2x1c2l2ZUFtb3VudD4NCgkJPGNiYzpUYXhJbmNsdXNpdmVBbW91bnQgY3VycmVuY3lJRD0iTVlSIj4xNDM2LjU8L2NiYzpUYXhJbmNsdXNpdmVBbW91bnQ+DQoJCTxjYmM6QWxsb3dhbmNlVG90YWxBbW91bnQgY3VycmVuY3lJRD0iTVlSIj4xNDM2LjU8L2NiYzpBbGxvd2FuY2VUb3RhbEFtb3VudD4NCgkJPGNiYzpDaGFyZ2VUb3RhbEFtb3VudCBjdXJyZW5jeUlEPSJNWVIiPjE0MzYuNTwvY2JjOkNoYXJnZVRvdGFsQW1vdW50Pg0KCQk8Y2JjOlBheWFibGVSb3VuZGluZ0Ftb3VudCBjdXJyZW5jeUlEPSJNWVIiPjAuMzwvY2JjOlBheWFibGVSb3VuZGluZ0Ftb3VudD4NCgkJPGNiYzpQYXlhYmxlQW1vdW50IGN1cnJlbmN5SUQ9Ik1ZUiI+MTQzNi41PC9jYmM6UGF5YWJsZUFtb3VudD4NCgk8L2NhYzpMZWdhbE1vbmV0YXJ5VG90YWw+DQoJPGNhYzpJbnZvaWNlTGluZT4NCgkJPGNiYzpJbnZvaWNlZFF1YW50aXR5IHVuaXRDb2RlPSJDNjIiPjE8L2NiYzpJbnZvaWNlZFF1YW50aXR5Pg0KCQk8Y2JjOkxpbmVFeHRlbnNpb25BbW91bnQgY3VycmVuY3lJRD0iTVlSIj4xNDM2LjU8L2NiYzpMaW5lRXh0ZW5zaW9uQW1vdW50Pg0KCQk8Y2FjOkFsbG93YW5jZUNoYXJnZT4NCgkJCTxjYmM6Q2hhcmdlSW5kaWNhdG9yPmZhbHNlPC9jYmM6Q2hhcmdlSW5kaWNhdG9yPg0KCQkJPGNiYzpNdWx0aXBsaWVyRmFjdG9yTnVtZXJpYz4wLjE1PC9jYmM6TXVsdGlwbGllckZhY3Rvck51bWVyaWM+DQoJCQk8Y2JjOkFtb3VudCBjdXJyZW5jeUlEPSJNWVIiPjEwMDwvY2JjOkFtb3VudD4NCgkJPC9jYWM6QWxsb3dhbmNlQ2hhcmdlPg0KCQk8Y2FjOkFsbG93YW5jZUNoYXJnZT4NCgkJCTxjYmM6Q2hhcmdlSW5kaWNhdG9yPnRydWU8L2NiYzpDaGFyZ2VJbmRpY2F0b3I+DQoJCQk8Y2JjOk11bHRpcGxpZXJGYWN0b3JOdW1lcmljPjAuMTwvY2JjOk11bHRpcGxpZXJGYWN0b3JOdW1lcmljPg0KCQkJPGNiYzpBbW91bnQgY3VycmVuY3lJRD0iTVlSIj4xMDA8L2NiYzpBbW91bnQ+DQoJCTwvY2FjOkFsbG93YW5jZUNoYXJnZT4NCgkJPGNhYzpUYXhUb3RhbD4NCgkJCTxjYmM6VGF4QW1vdW50IGN1cnJlbmN5SUQ9Ik1ZUiI+MTQ2MC41PC9jYmM6VGF4QW1vdW50Pg0KCQkJPGNhYzpUYXhTdWJ0b3RhbD4NCgkJCQk8Y2JjOlRheGFibGVBbW91bnQgY3VycmVuY3lJRD0iTVlSIj4xNDYwLjU8L2NiYzpUYXhhYmxlQW1vdW50Pg0KCQkJCTxjYmM6VGF4QW1vdW50IGN1cnJlbmN5SUQ9Ik1ZUiI+MDwvY2JjOlRheEFtb3VudD4NCgkJCQk8Y2FjOlRheENhdGVnb3J5Pg0KCQkJCQk8Y2JjOlBlcmNlbnQ+NjwvY2JjOlBlcmNlbnQ+DQoJCQkJCTxjYmM6VGF4RXhlbXB0aW9uUmVhc29uPkV4ZW1wdCBOZXcgTWVhbnMgb2YgVHJhbnNwb3J0PC9jYmM6VGF4RXhlbXB0aW9uUmVhc29uPg0KCQkJCQk8Y2FjOlRheFNjaGVtZT4NCgkJCQkJCTxjYmM6SUQ+T1RIPC9jYmM6SUQ+DQoJCQkJCTwvY2FjOlRheFNjaGVtZT4NCgkJCQk8L2NhYzpUYXhDYXRlZ29yeT4NCgkJCTwvY2FjOlRheFN1YnRvdGFsPg0KCQk8L2NhYzpUYXhUb3RhbD4NCgkJPGNhYzpJdGVtPg0KCQkJPGNiYzpEZXNjcmlwdGlvbj5MYXB0b3AgUGVyaXBoZXJhbHM8L2NiYzpEZXNjcmlwdGlvbj4NCgkJCTxjYWM6T3JpZ2luQ291bnRyeT4NCgkJCQk8Y2JjOklkZW50aWZpY2F0aW9uQ29kZT5NWVM8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+DQoJCQk8L2NhYzpPcmlnaW5Db3VudHJ5Pg0KCQkJPGNhYzpDb21tb2RpdHlDbGFzc2lmaWNhdGlvbj4NCgkJCQk8Y2JjOkl0ZW1DbGFzc2lmaWNhdGlvbkNvZGUgbGlzdElEPSJQVEMiPjEyMzQ0MzIxPC9jYmM6SXRlbUNsYXNzaWZpY2F0aW9uQ29kZT4NCgkJCTwvY2FjOkNvbW1vZGl0eUNsYXNzaWZpY2F0aW9uPg0KCQkJPGNhYzpDb21tb2RpdHlDbGFzc2lmaWNhdGlvbj4NCgkJCQk8Y2JjOkl0ZW1DbGFzc2lmaWNhdGlvbkNvZGUgbGlzdElEPSJDTEFTUyI+MTIzNDQzMjE8L2NiYzpJdGVtQ2xhc3NpZmljYXRpb25Db2RlPg0KCQkJPC9jYWM6Q29tbW9kaXR5Q2xhc3NpZmljYXRpb24+DQoJCTwvY2FjOkl0ZW0+DQoJCTxjYWM6UHJpY2U+DQoJCQk8Y2JjOlByaWNlQW1vdW50IGN1cnJlbmN5SUQ9Ik1ZUiI+MTc8L2NiYzpQcmljZUFtb3VudD4NCgkJPC9jYWM6UHJpY2U+DQoJCTxjYWM6SXRlbVByaWNlRXh0ZW5zaW9uPg0KCQkJPGNiYzpBbW91bnQgY3VycmVuY3lJRD0iTVlSIj4xMDA8L2NiYzpBbW91bnQ+DQoJCTwvY2FjOkl0ZW1QcmljZUV4dGVuc2lvbj4NCgk8L2NhYzpJbnZvaWNlTGluZT4NCjwvSW52b2ljZT4=
				</enc:EmbeddedDocument>
			</enc:Base64Document>
		</svs:SovosLegalDocument>
	</svs:SovosDocument>
</sbd:StandardBusinessDocument>