From 70c009cb4ac1539f6485a8adedb81b1ea4635a56 Mon Sep 17 00:00:00 2001 From: Menendez6 Date: Mon, 29 Sep 2025 14:29:34 +0000 Subject: [PATCH 1/3] Add Singapore supplier registration process --- docs.json | 5 +- guides/countries/sg-invoicenow.mdx | 137 ++++++++++++++++++ .../templates/sg/sg-invoicenow-register.mdx | 61 ++++++++ 3 files changed, 202 insertions(+), 1 deletion(-) create mode 100644 guides/countries/sg-invoicenow.mdx create mode 100644 snippets/workflows/templates/sg/sg-invoicenow-register.mdx diff --git a/docs.json b/docs.json index 1e9274c4..3f723bd4 100644 --- a/docs.json +++ b/docs.json @@ -101,7 +101,10 @@ "guides/countries/pt-at" ] }, - + { + "group": "🇸🇬 Singapore", + "pages": ["guides/countries/sg-invoicenow"] + }, { "group": "🇪🇸 Spain", "pages": [ diff --git a/guides/countries/sg-invoicenow.mdx b/guides/countries/sg-invoicenow.mdx new file mode 100644 index 00000000..e39f4130 --- /dev/null +++ b/guides/countries/sg-invoicenow.mdx @@ -0,0 +1,137 @@ +--- +title: "Singapore - InvoiceNow" +sidebarTitle: "InvoiceNow" +description: Send and receive invoices in Singapore through InvoiceNow +--- + +import SupplierRegistration from '/snippets/workflows/templates/sg/sg-invoicenow-register.mdx'; + +## Introduction + +InvoiceNow is Singapore’s nationwide e‑invoicing platform. It is the local implementation of the international Peppol e‑invoicing network. Through InvoiceNow you can: +- Send and receive Peppol invoices in Singapore +- Report invoices to IRAS + +This guide covers: + +1. How to register a supplier in InvoiceNow. +2. How to authorize our local partner (Storecove) to report invoices to IRAS on your behalf. +3. How to send and receive invoices via InvoiceNow in Invopop. + +## Prerequisites + +In order to register a supplier and issue invoices, you will need: + +- Supplier details, including: + - Legal Business name + - Tax ID (UEN) + - Business address + - Peppol ID: `SGUEN` + your UEN (example: `SGUEN1234567890`). +- Corppass account: A [Corppass account](https://www.corppass.gov.sg/portal) is required for InvoiceNow registration. + +## Setup + + + + 1. Go to **Configuration** → **Apps** in the [Console](https://console.invopop.com). + 2. Find **InvoiceNow Singapore** in the app list. + 3. Click **Connect** to activate the app. + + After connecting, you'll see InvoiceNow Singapore listed in the Enabled Apps section. + + + + Create a new workflow in your workspace for registering suppliers for invoice sending, receiving and reporting to IRAS. You should start with the template below: + + + + + This workflow will issue a registration request for a supplier to complete. + + + + Copy and paste into a new [Empty Party workflow](https://console.invopop.com/redirect/workflows/new?template=empty-party) code view. + + + + + Before starting, review the [workflows guide](/guides/features/workflows) to understand the general setup process. + + In [Console](https://console.invopop.com), create a new workflow and choose [Empty Party workflow](https://console.invopop.com/redirect/workflows/new?template=empty-party) as the base. Then name the workflow with a descriptive label such as "InvoiceNow Supplier Registration". + + The new workflow will need to perform the following steps: + + 1. **Set State** — select "Processing". + 2. **Register in InvoiceNow** - Register the supplier in InvoiceNow. + 3. **Authorize IRAS Reporting** - Authorize Storecove to report invoices to IRAS on your behalf. + 4. **Set State** — select "Registered". + + Finally, in the Error Handling area, add the **Set State** action and select `Error`. + + Add any additional steps you may need, and save the new workflow. + + + + + +## InvoiceNow registration + +There are two registration paths depending on your needs: + +1. Send/receive invoices only → Register your company in InvoiceNow. +2. Send/receive + IRAS reporting → Register in InvoiceNow and authorize Storecove for reporting. + +### 1. Registering in InvoiceNow +First, create a supplier in Invopop with: + +- Legal Business name +- Tax ID (UEN) +- Business address +- Peppol ID (key: `peppol`, scheme: `0195`, code: `SGUEN` + your UEN). + +Here is a JSON example of a supplier: +```json +{ + "$schema": "https://gobl.org/draft-0/org/party", + "uuid": "0199625b-5e4b-7000-8f52-d34327b98f92", + "name": "Singapore Company", + "tax_id": { + "country": "SG", + "code": "199912345A" + }, + "inboxes": [ + { + "key": "peppol", + "scheme": "0195", + "code": "SGUEN199912345A" + } + ], + "addresses": [ + { + "street": "123 Main St", + "locality": "Singapore", + "code": "123456", + "country": "SG" + } + ] +} +``` + +Next, run the `Register in InvoiceNow` step. +- This validates the supplier details and generates a Corppass URL. +- You have **25 minutes** to complete the Corppass flow. +- If the time expires, the step ends in `KO`, and you'll need to re-run it. + +Once completed successfully (`OK`), the supplier is registered and can send/receive invoices via Peppol in Singapore. + +### 2. Authorizing Invoice Reporting to IRAS +If you also need to report invoices to IRAS: +1. Run the `Authorize IRAS reporting` step. + - This requires completing the `Register in InvoiceNow` step first. + - Without InvoiceNow registration, you cannot report invoices to IRAS. +2. The process is similar to registration: + - A Corppass URL is generated. + - You have **25 minutes** to complete authorization. + - If the time expires, the step ends in `KO`, and you'll need to re-run it. + +Once successful (`OK`), Storecove will be authorized to report invoices to IRAS on your behalf. \ No newline at end of file diff --git a/snippets/workflows/templates/sg/sg-invoicenow-register.mdx b/snippets/workflows/templates/sg/sg-invoicenow-register.mdx new file mode 100644 index 00000000..3a489d9c --- /dev/null +++ b/snippets/workflows/templates/sg/sg-invoicenow-register.mdx @@ -0,0 +1,61 @@ +--- +title: "InvoiceNow supplier registration" +description: "Register a supplier in InvoiceNow" +countryCode: "sg" +appId: "invoicenow" +schema: "org/party" +--- + + +```json Example InvoiceNow supplier registration workflow with states +{ + "name": "InvoiceNow Registration Workflow", + "schema": "org/party", + "description": "", + "steps": [ + { + "id": "2c5f3bd0-9d3d-11f0-b90d-db9398d2aaf8", + "name": "Set Silo Entry State", + "provider": "silo.state", + "next": [], + "summary": "Set state to `processing`{.state .processing}", + "config": { + "state": "processing" + } + }, + { + "id": "9931bc00-956e-11f0-8804-b12626466c0b", + "name": "Register in InvoiceNow", + "provider": "invoicenow.register", + "next": [] + }, + { + "id": "2c316bf0-9564-11f0-8d20-9388ce180b95", + "name": "Authorize IRAS Reporting", + "provider": "invoicenow.authorize", + "next": [] + }, + { + "id": "3c1e4cf0-9d3d-11f0-b90d-db9398d2aaf8", + "name": "Set Silo Entry State", + "provider": "silo.state", + "next": [], + "summary": "Set state to `registered`{.state .registered}", + "config": { + "state": "registered" + } + } + ], + "rescue": [ + { + "id": "7a8bcd20-a32b-11ef-9707-79bbd71238cd", + "name": "Set Silo Entry State", + "config": { + "state": "error" + }, + "summary": "Set state to `error`{.state .error}", + "provider": "silo.state" + } + ] +} +``` \ No newline at end of file From eeeed6ed3c1d783c8fc47db16b95cce08827e1fb Mon Sep 17 00:00:00 2001 From: Menendez6 Date: Thu, 9 Oct 2025 17:53:58 +0000 Subject: [PATCH 2/3] Add invoice sending and receiving --- guides/countries/sg-invoicenow.mdx | 162 +++++++++++++++++- .../sg/sg-invoicenow-receive-and-report.mdx | 22 +++ .../templates/sg/sg-invoicenow-receive.mdx | 16 ++ .../sg/sg-invoicenow-send-and-report.mdx | 16 ++ .../templates/sg/sg-invoicenow-send.mdx | 16 ++ 5 files changed, 227 insertions(+), 5 deletions(-) create mode 100644 snippets/workflows/templates/sg/sg-invoicenow-receive-and-report.mdx create mode 100644 snippets/workflows/templates/sg/sg-invoicenow-receive.mdx create mode 100644 snippets/workflows/templates/sg/sg-invoicenow-send-and-report.mdx create mode 100644 snippets/workflows/templates/sg/sg-invoicenow-send.mdx diff --git a/guides/countries/sg-invoicenow.mdx b/guides/countries/sg-invoicenow.mdx index e39f4130..5ad819c8 100644 --- a/guides/countries/sg-invoicenow.mdx +++ b/guides/countries/sg-invoicenow.mdx @@ -5,6 +5,10 @@ description: Send and receive invoices in Singapore through InvoiceNow --- import SupplierRegistration from '/snippets/workflows/templates/sg/sg-invoicenow-register.mdx'; +import ReceiveInvoice from '/snippets/workflows/templates/sg/sg-invoicenow-receive.mdx'; +import ReceiveAndReport from '/snippets/workflows/templates/sg/sg-invoicenow-receive-and-report.mdx'; +import SendInvoice from '/snippets/workflows/templates/sg/sg-invoicenow-send.mdx'; +import SendAndReport from '/snippets/workflows/templates/sg/sg-invoicenow-send-and-report.mdx'; ## Introduction @@ -16,7 +20,8 @@ This guide covers: 1. How to register a supplier in InvoiceNow. 2. How to authorize our local partner (Storecove) to report invoices to IRAS on your behalf. -3. How to send and receive invoices via InvoiceNow in Invopop. +3. How to configure workflows for receiving invoices via InvoiceNow. +4. How to configure workflows for sending invoices via InvoiceNow. ## Prerequisites @@ -72,16 +77,92 @@ In order to register a supplier and issue invoices, you will need: + + + If you need to receive invoices via InvoiceNow, create a workflow for processing incoming invoices. Choose the appropriate workflow based on whether you need to report received invoices to IRAS. + + + + Use this workflow if you only need to import invoices without reporting them to IRAS. + + Copy and paste into a new [Empty Invoice workflow](https://console.invopop.com/redirect/workflows/new?template=empty-invoice) code view. + + + + + Use this workflow if you need to import invoices and report them to IRAS as purchase invoices. + + Copy and paste into a new [Empty Invoice workflow](https://console.invopop.com/redirect/workflows/new?template=empty-invoice) code view. + + + + + Before starting, review the [workflows guide](/guides/features/workflows) to understand the general setup process. + + In [Console](https://console.invopop.com), create a new workflow and choose [Empty Invoice workflow](https://console.invopop.com/redirect/workflows/new?template=empty-invoice) as the base. Then name the workflow with a descriptive label such as "InvoiceNow Receive Invoices". + + The workflow should include: + + 1. **Import invoices via InvoiceNow** — imports incoming invoices from the InvoiceNow network. + 2. **Report purchase invoice** (optional) — if you need to report received invoices to IRAS, add this step after the import step. + + Add any additional steps you may need, and save the new workflow. + + + + + After creating this workflow, you must configure it in the InvoiceNow app settings to automatically process all incoming invoices. Navigate to **Configuration** → **Apps**, find **InvoiceNow Singapore**, click **Configure**, and select this workflow in the app configuration. + + + + + Create a workflow for sending invoices via InvoiceNow. Choose the appropriate workflow based on whether you need to report sent invoices to IRAS. + + + + Use this workflow if you only need to send invoices without reporting them to IRAS. + + Copy and paste into a new [Empty Invoice workflow](https://console.invopop.com/redirect/workflows/new?template=empty-invoice) code view. + + + + + Use this workflow if you need to send invoices and report them to IRAS in a single step. + + Copy and paste into a new [Empty Invoice workflow](https://console.invopop.com/redirect/workflows/new?template=empty-invoice) code view. + + + + + Before starting, review the [workflows guide](/guides/features/workflows) to understand the general setup process. + + In [Console](https://console.invopop.com), create a new workflow and choose [Empty Invoice workflow](https://console.invopop.com/redirect/workflows/new?template=empty-invoice) as the base. Then name the workflow with a descriptive label such as "InvoiceNow Send Invoices". + + The workflow should include one of the following: + + **Option 1: Send only** + 1. **Send invoice via InvoiceNow** — sends the invoice through the InvoiceNow network. + + **Option 2: Send and report** + 1. **Send invoice via InvoiceNow and report to IRAS** — sends the invoice and reports it to IRAS in a single step. + + Add any additional steps you may need (such as PDF generation or email delivery), and save the new workflow. + + + -## InvoiceNow registration +## Running + +### Register a Supplier There are two registration paths depending on your needs: 1. Send/receive invoices only → Register your company in InvoiceNow. 2. Send/receive + IRAS reporting → Register in InvoiceNow and authorize Storecove for reporting. -### 1. Registering in InvoiceNow + + First, create a supplier in Invopop with: - Legal Business name @@ -123,8 +204,9 @@ Next, run the `Register in InvoiceNow` step. - If the time expires, the step ends in `KO`, and you'll need to re-run it. Once completed successfully (`OK`), the supplier is registered and can send/receive invoices via Peppol in Singapore. + -### 2. Authorizing Invoice Reporting to IRAS + If you also need to report invoices to IRAS: 1. Run the `Authorize IRAS reporting` step. - This requires completing the `Register in InvoiceNow` step first. @@ -134,4 +216,74 @@ If you also need to report invoices to IRAS: - You have **25 minutes** to complete authorization. - If the time expires, the step ends in `KO`, and you'll need to re-run it. -Once successful (`OK`), Storecove will be authorized to report invoices to IRAS on your behalf. \ No newline at end of file +Once successful (`OK`), Storecove will be authorized to report invoices to IRAS on your behalf. + + + +### Receive Invoices + +Once you've configured a receiving workflow and connected it to the InvoiceNow app, incoming invoices will be automatically imported and processed. + + + + To enable automatic invoice import: + + 1. Navigate to **Configuration** → **Apps** in the [Console](https://console.invopop.com). + 2. Find **InvoiceNow Singapore** in the Enabled Apps section. + 3. Click **Configure**. + 4. Select your receiving workflow (created in the Setup section) from the dropdown. + 5. Click **Save**. + + All invoices received via InvoiceNow will now be automatically sent to this workflow for processing. + + + + Received invoices will appear in your workspace's **Invoices** section with the status reflecting the workflow's processing: + + - If using the **Import only** workflow, invoices will be imported and stored in your workspace. + - If using the **Import and Report** workflow, invoices will be imported and then reported to IRAS as purchase invoices. + + You can track the status of each invoice in the Console or via the API. + + + +### Send Invoices + +To send invoices via InvoiceNow, create GOBL invoice documents and send them to your invoice sending workflow. + + + + Create a GOBL invoice with the necessary details: + + - Supplier information (must match a registered supplier) + - Customer information including their Peppol ID + - Line items with descriptions, quantities, and prices + - Applicable tax rates + + Ensure the customer has a Peppol ID configured in their `inboxes` field with: + - `key`: `peppol` + - `scheme`: `0195` (for Singapore) + - `code`: `SGUEN` + customer's UEN + + + + + Send the invoice to your configured sending workflow: + + - If using the **Send only** workflow, the invoice will be transmitted via InvoiceNow. + - If using the **Send and report** workflow, the invoice will be sent and simultaneously reported to IRAS. + + The invoice will be delivered to the customer's Peppol access point based on their Peppol ID. + + + + Monitor the invoice status in the Console in the Silo Entry Meta: + + - **Sent**: Successfully delivered via InvoiceNow + - **Reported**: Successfully reported to IRAS (if using send-and-report workflow) + - **Error**: Check the workflow logs for detailed error information + + You can view delivery confirmations and any error messages in the invoice details. + + + diff --git a/snippets/workflows/templates/sg/sg-invoicenow-receive-and-report.mdx b/snippets/workflows/templates/sg/sg-invoicenow-receive-and-report.mdx new file mode 100644 index 00000000..4555de63 --- /dev/null +++ b/snippets/workflows/templates/sg/sg-invoicenow-receive-and-report.mdx @@ -0,0 +1,22 @@ +```json +{ + "name": "InvoiceNow Receive and Report", + "description": "", + "steps": [ + { + "id": "98ed63d0-9ee1-11f0-9539-cb68a1df1b45", + "name": "Import invoices via InvoiceNow", + "provider": "invoicenow.import", + "next": [] + }, + { + "id": "d5c655d0-a294-11f0-bc0c-75c861838db7", + "name": "Report purchase invoice", + "provider": "invoicenow.report-purchase", + "next": [] + } + ], + "rescue": [] +} +``` + diff --git a/snippets/workflows/templates/sg/sg-invoicenow-receive.mdx b/snippets/workflows/templates/sg/sg-invoicenow-receive.mdx new file mode 100644 index 00000000..827699cb --- /dev/null +++ b/snippets/workflows/templates/sg/sg-invoicenow-receive.mdx @@ -0,0 +1,16 @@ +```json +{ + "name": "Import invoices via InvoiceNow", + "description": "", + "steps": [ + { + "id": "98ed63d0-9ee1-11f0-9539-cb68a1df1b45", + "name": "Import invoices via InvoiceNow", + "provider": "invoicenow.import", + "next": [] + } + ], + "rescue": [] +} +``` + diff --git a/snippets/workflows/templates/sg/sg-invoicenow-send-and-report.mdx b/snippets/workflows/templates/sg/sg-invoicenow-send-and-report.mdx new file mode 100644 index 00000000..95de26bb --- /dev/null +++ b/snippets/workflows/templates/sg/sg-invoicenow-send-and-report.mdx @@ -0,0 +1,16 @@ +```json +{ + "name": "Send and report invoice SG", + "description": "", + "steps": [ + { + "id": "e1570e40-a4ff-11f0-b53a-bd80aefb58db", + "name": "Send invoice via InvoiceNow and report to IRAS", + "provider": "invoicenow.send-and-report", + "next": [] + } + ], + "rescue": [] +} +``` + diff --git a/snippets/workflows/templates/sg/sg-invoicenow-send.mdx b/snippets/workflows/templates/sg/sg-invoicenow-send.mdx new file mode 100644 index 00000000..d169a720 --- /dev/null +++ b/snippets/workflows/templates/sg/sg-invoicenow-send.mdx @@ -0,0 +1,16 @@ +```json +{ + "name": "Send invoice via InvoiceNow", + "description": "", + "steps": [ + { + "id": "3c8f5220-a42b-11f0-95f3-ad0019fe7531", + "name": "Send invoice via InvoiceNow", + "provider": "invoicenow.send", + "next": [] + } + ], + "rescue": [] +} +``` + From ad63c7e5013bc65550ea030521aecdc540c6606a Mon Sep 17 00:00:00 2001 From: Menendez6 Date: Mon, 13 Oct 2025 16:37:45 +0000 Subject: [PATCH 3/3] Clean workflows --- .../workflows/templates/sg/sg-invoicenow-receive-and-report.mdx | 1 + snippets/workflows/templates/sg/sg-invoicenow-receive.mdx | 1 + .../workflows/templates/sg/sg-invoicenow-send-and-report.mdx | 1 + snippets/workflows/templates/sg/sg-invoicenow-send.mdx | 1 + 4 files changed, 4 insertions(+) diff --git a/snippets/workflows/templates/sg/sg-invoicenow-receive-and-report.mdx b/snippets/workflows/templates/sg/sg-invoicenow-receive-and-report.mdx index 4555de63..2012232e 100644 --- a/snippets/workflows/templates/sg/sg-invoicenow-receive-and-report.mdx +++ b/snippets/workflows/templates/sg/sg-invoicenow-receive-and-report.mdx @@ -20,3 +20,4 @@ } ``` + diff --git a/snippets/workflows/templates/sg/sg-invoicenow-receive.mdx b/snippets/workflows/templates/sg/sg-invoicenow-receive.mdx index 827699cb..f9491c9c 100644 --- a/snippets/workflows/templates/sg/sg-invoicenow-receive.mdx +++ b/snippets/workflows/templates/sg/sg-invoicenow-receive.mdx @@ -14,3 +14,4 @@ } ``` + diff --git a/snippets/workflows/templates/sg/sg-invoicenow-send-and-report.mdx b/snippets/workflows/templates/sg/sg-invoicenow-send-and-report.mdx index 95de26bb..098d9594 100644 --- a/snippets/workflows/templates/sg/sg-invoicenow-send-and-report.mdx +++ b/snippets/workflows/templates/sg/sg-invoicenow-send-and-report.mdx @@ -14,3 +14,4 @@ } ``` + diff --git a/snippets/workflows/templates/sg/sg-invoicenow-send.mdx b/snippets/workflows/templates/sg/sg-invoicenow-send.mdx index d169a720..37e9869a 100644 --- a/snippets/workflows/templates/sg/sg-invoicenow-send.mdx +++ b/snippets/workflows/templates/sg/sg-invoicenow-send.mdx @@ -14,3 +14,4 @@ } ``` +