Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,10 @@
"guides/countries/pt-at"
]
},

{
"group": "🇸🇬 Singapore",
"pages": ["guides/countries/sg-invoicenow"]
},
{
"group": "🇪🇸 Spain",
"pages": [
Expand Down
289 changes: 289 additions & 0 deletions guides/countries/sg-invoicenow.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,289 @@
---
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';
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

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 configure workflows for receiving invoices via InvoiceNow.
4. How to configure workflows for sending invoices via InvoiceNow.

## 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

<Steps>
<Step title="Connect the InvoiceNow Singapore app">
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.

</Step>
<Step title="Create a supplier registration workflow">
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:

<Tabs>
<Tab title="Template">
<Card title="InvoiceNow supplier registration workflow" icon="code-branch" iconType="duotone" href="https://console.invopop.com/redirect/workflows/new?template=sg-invoicenow-supplier-registration" cta="Add to my workspace">
This workflow will issue a registration request for a supplier to complete.
</Card>
</Tab>
<Tab title="Code">
Copy and paste into a new [Empty Party workflow](https://console.invopop.com/redirect/workflows/new?template=empty-party) code view.

<SupplierRegistration />
</Tab>
<Tab title="Build from scratch">
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.
</Tab>
</Tabs>
</Step>

<Step title="Configure invoice receiving workflow (optional)">
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.

<Tabs>
<Tab title="Receive only">
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.

<ReceiveInvoice />
</Tab>
<Tab title="Receive and report">
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.

<ReceiveAndReport />
</Tab>
<Tab title="Build from scratch">
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.
</Tab>
</Tabs>

<Info>
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.
</Info>
</Step>

<Step title="Configure invoice sending workflow">
Create a workflow for sending invoices via InvoiceNow. Choose the appropriate workflow based on whether you need to report sent invoices to IRAS.

<Tabs>
<Tab title="Send only">
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.

<SendInvoice />
</Tab>
<Tab title="Send and report">
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.

<SendAndReport />
</Tab>
<Tab title="Build from scratch">
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.
</Tab>
</Tabs>
</Step>
</Steps>

## 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.

<Steps>
<Step title="Register 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.
</Step>

<Step title="Authorize IRAS reporting (optional)">
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.
</Step>
</Steps>

### Receive Invoices

Once you've configured a receiving workflow and connected it to the InvoiceNow app, incoming invoices will be automatically imported and processed.

<Steps>
<Step title="Configure automatic import">
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.
</Step>

<Step title="Monitor incoming invoices">
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.
</Step>
</Steps>

### Send Invoices

To send invoices via InvoiceNow, create GOBL invoice documents and send them to your invoice sending workflow.

<Steps>
<Step title="Create an invoice">
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

</Step>

<Step title="Send to workflow">
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.
</Step>

<Step title="Track delivery status">
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.
</Step>
</Steps>

Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
```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": []
}
```


17 changes: 17 additions & 0 deletions snippets/workflows/templates/sg/sg-invoicenow-receive.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
```json
{
"name": "Import invoices via InvoiceNow",
"description": "",
"steps": [
{
"id": "98ed63d0-9ee1-11f0-9539-cb68a1df1b45",
"name": "Import invoices via InvoiceNow",
"provider": "invoicenow.import",
"next": []
}
],
"rescue": []
}
```


Loading