Getting started
Open dci-ledger.opsdci2004.workers.dev in Chrome or Edge on a computer or phone, and sign in with your own login (the same one used for the Roster dashboard). Everyone who signs in sees and edits the same shared ledger, so a change you make is visible to everyone straight away.
The top of the page shows the total outstanding amount and counts of paid, missing-in-Taulia and in-process invoices. Below that is the full invoice table: type in the search box, or use the customer and status filters. Click a column heading to sort by it.
Everyday tasks
Upload an AR aging export (.xlsx / .csv): click Upload document (or Choose file) and pick the file. Invoices are matched by invoice number: existing ones are updated, new ones are added.
Upload a bank remittance / GIRO / Taulia PDF: the PDF is read for invoice numbers. Scroll to Suggestions from uploaded PDF near the bottom and click Mark paid next to each one that is correct. Only the details are saved, not the PDF itself.
Update payment status: tick one or more invoices, then click Update payment status in the bar at the bottom. Set the status, payment date and GIRO/bank reference; the same values apply to every ticked invoice. You can also edit or clear the invoice’s remark in Notes / remarks. Under Staff, period and PO you can type or correct the staff / licence name, pick the service period start and end dates, and enter the PO number (these also appear when adding an invoice). The customer name is a dropdown of existing customers; type a new name to add one, and it appears in the list from then on. You can also attach the payment voucher (PDF or image, up to 4 MB). Double-clicking a row updates just that invoice.
View a voucher: invoices with a voucher show a 📎 link in the Notes column (the last column; scroll sideways on a phone). Click it to open the file in a new tab.
Add an invoice or credit note: click + Add invoice. For a credit note, use its own number (e.g. CRN0099) and a negative amount.
Backup & restore (admins only): Backup & restore next to Help keeps complete copies of the ledger. Copies are saved to the cloud automatically once a week and just before every Infotech import or restore; you can also save one now, or download one to your computer, and press Delete next to an old backup to remove it. To recover, choose Restore next to a backup (or pick a backup file): it shows what will change, asks you to type RESTORE, backs up the current ledger first, then puts every invoice back exactly as it was in the backup.
Manage users (admins only): Manage users next to Help lets admins add a login (email, role, temporary password), reset a forgotten password, and change roles. Logins and roles are shared with Roster.
Delete invoices: tick them and click Delete in the bottom bar. This removes them for everyone and cannot be undone.
Totals by status: open Totals by status under the figures at the top to see the count and SGD total for each status (Missing in Taulia, In Process, Approved, Outstanding and so on), the total outstanding, and optionally paid invoices. Tick Break down by customer for the same totals per customer, largest outstanding first. List invoice numbers (on by default) shows, under every status line, each invoice that makes up that total (invoice no., dates, amount), including Paid and non-SGD invoices. It follows the search, customer and status filters, so pick one customer in the filter for a one-customer statement. Print summary / Save PDF prints just these totals; choose “Save as PDF” as the printer to get a PDF.
Infotech: to bring Infotech up to date in the ledger, export the invoice list from Infotech and load it with Upload document; the ledger recognises it, asks you to confirm, then updates invoice details and Paid status (Taulia statuses in the ledger are kept) and lists anything that disagrees. Export payments for Infotech saves the payments for invoices that are Paid here but not yet Paid in Infotech, in Infotech’s own Invoice payment template, ready for Accounting → Migration → Invoice payment in Infotech. Only invoices Infotech has approved are included; Draft invoices are listed separately.
Monthly Infotech sync: (1) Infotech Sales → Invoice → Export, then Upload document here; (2) record payments here with the real payment date and GIRO reference; (3) Export payments for Infotech; (4) Infotech Accounting → Migration → Invoice payment → Choose File → Next → Complete Import, and look for the green tick. Test with one invoice (type its number in the search box) if unsure. Never upload this dashboard’s own Download as Excel file back in.
Date range: in the row under the buttons, choose which date to use (invoice date, due date or payment date), then set from and to dates, or pick This month, Last month, This quarter, This year or Last year. The table, Totals by status, Download as Excel, printing and the Infotech payment export all follow the range. Invoices without that date (for example unpaid invoices when filtering by payment date) are left out while a range is set. Clear dates shows everything again.
Download / print: Download as Excel exports the table as it is currently filtered; Print / Save PDF opens the print dialog.
What to upload and when
| Monthly | Infotech invoice list (All tab, 01/01/2026 to today) from Infotech → Sales → Invoice → Export. Adds new invoices; updates amounts, dates, customers and Infotech status. |
| As they arrive | Remittance / payment voucher PDFs from the Outlook folder “Remittances – to upload”. Click Mark paid on the suggestions that are correct. |
| When sent | Customer AR aging report or Taulia status export. Updates Taulia status. |
| Monthly (optional) | Invoicing control sheet. Only adds staff name, service period and PO number. |
Never upload this dashboard’s own Excel download or Infotech payment files. OCBC GIRO notices have no PDF — mark those invoices Paid with Update payment status, matching the amount.
Status meanings
| Paid | Confirmed paid, by bank remittance or customer confirmation |
| Missing in Tualia | Not showing in the customer's Taulia system yet; needs follow-up |
| In Process in Tualia | Submitted and waiting for the customer's internal processing |
| Approved | Approved by the customer, payment not yet made |
| Outstanding - reminder sent | A reminder has been sent; still waiting |
| Outstanding - status unknown | No source has reported on this invoice yet |
Days overdue is today's date minus the due date, and is always blank/0 for Paid invoices.
Saving & the database check-up
There is no separate save button for the ledger: every change is saved to the shared database automatically, and only the invoices you changed are sent, so it stays quick. If a save fails, your changes stay on screen and the app retries every 20 seconds. While something is still unsaved, the browser warns you before you close or refresh.
Voucher files are kept in separate private file storage, not inside the ledger, so they never slow saving down. A database check-up runs quietly each time someone signs in and fixes anything that could slow the ledger; you only see a message if it actually fixed something. You can also run it any time with the Database check-up button.
Questions & answers
How do I know my change was saved?
If no "Could not save" message appears, it saved. To double-check, refresh the page (F5) and look at the invoice again. If the browser asks "Leave site?" when you refresh, choose to stay and wait a few seconds: a save is still going through.
I see "Could not save … retrying in 20 seconds". What should I do?
Leave the page open. This is usually a short internet drop; your changes are kept and the app tries again on its own. If the message keeps coming back for several minutes, check your internet connection, then try the app in a private/InPrivate window (some browser extensions, such as Lusha, can block saving). If it still fails, take a screenshot of the message and of the browser Console (press F12).
I uploaded a remittance PDF but nothing changed.
PDF matches are not applied automatically. Scroll down to Suggestions from uploaded PDF and click Mark paid for each correct invoice. If a suggestion says currently "Paid", that invoice was already marked paid, so nothing visible changes.
I can't find an invoice.
Type the invoice number in the search box, and make sure the filters say All customers and All statuses. The table is sorted by due date, so older invoices appear in a different part of the list.
I attached the wrong voucher, or the wrong status.
Tick the invoice, open Update payment status again and set the correct values. Choosing a new voucher file replaces the old one for every ticked invoice; leaving the file box empty keeps the existing voucher.
The 📎 voucher link doesn't open.
Your browser is probably blocking pop-ups. Allow pop-ups for this site (look for the blocked pop-up icon in the address bar) and click the link again.
My voucher file is too big.
The limit is 4 MB per file. Scan at a lower resolution, or save the PDF with a "reduce file size" option, then attach it again.
Can two people use the ledger at the same time?
Yes, but avoid updating the same invoice at the same moment: the last save wins. Changes made by others appear when you switch back to the tab or refresh.
What does the database check-up actually do?
It looks for voucher files stored inside the ledger itself (which slows saving, for example if an old copy of the page was left open somewhere) and moves them to file storage. Nothing is deleted and vouchers stay attached to the same invoices. If everything is fine it does nothing.
Can I use it on my phone?
Yes. Open the same address in your phone's browser and sign in. Scroll the table sideways to see the Status and Notes columns.
I can't sign in, or it says no access has been set up.
Your login needs to be set up by an admin first; the same account works for the Roster dashboard. If you forgot your password, ask an admin to reset it.
How do I add a user or reset someone's password? (admins)
Admins see Manage users next to Help at the top. Under Add a user, enter their email, pick a role and click Create user; the app shows a temporary password to pass on privately. To reset a password, click Reset password next to the person; a new temporary password appears once. Roles are shared with Roster; “admin” can manage users, “pending” is a login waiting for a role. At least one admin must always remain.
Why is an invoice "Outstanding - status unknown"?
No AR report, Taulia status or remittance has mentioned it yet. It doesn't mean something is wrong, only that nothing has reported on it. Check the customer's portal or the latest AR report.
What is the “Ask Ledger” assistant, and is it safe?
It is a chat box (the Ask Ledger button at the bottom right, or next to Help & Q&A at the top) that answers questions about the invoices in the ledger: unpaid invoices for a customer, totals by status, who owes the most, overdue ageing and payments received in a period. It only looks things up. It cannot record a payment, change a status, edit or delete anything, or send reminders; use the normal buttons for those. To answer, the invoice details it needs (invoice no., customer, dates, amounts, status, notes) are sent to Claude, an AI service. Payment voucher files are never sent, and chats are not saved. Do not type bank account numbers into the chat. It reads the invoices on your screen, so if a figure looks wrong, check it in the table or in Totals by status. If it says it is not set up, ask an administrator.
How do I see invoices (or totals) for a period, e.g. last month?
Use the date row under the buttons: pick the date to go by (invoice, due or payment date), then either choose Last month from Quick pick or type the from and to dates. The table and Totals by status update straight away; Print summary / Save PDF and Download as Excel use the same range. For payments received in August, choose Payment date and 01/08 to 31/08.
How do I see the total for Approved, Outstanding and each status?
Tap Totals by status just under the figures at the top. Each status shows the number of invoices and the SGD total, followed by the total outstanding. Untick Include paid invoices to hide the Paid lines.
How do I get the totals for each customer, or for one customer only?
In Totals by status, tick Break down by customer for a table per customer, largest outstanding first. For one customer only, pick them in the All customers filter; the totals follow the filters.
How do I print the totals or save them as a PDF?
In Totals by status, click Print summary / Save PDF. In the print window, choose your printer, or choose “Save as PDF” as the destination to get a PDF file. The top Print / Save PDF button prints the invoice table instead.
Why aren't some invoices in the SGD totals?
Unpaid invoices in other currencies (for example USD) are listed separately under the table in their own currency. They are not converted, so they are not added to the SGD totals.
The customer I need isn't in the dropdown.
Type the full customer name and choose + Add new customer. Once you save, the new name appears in the dropdown for everyone. If you type an existing name slightly differently (capitals, a missing dot), it is saved under the existing spelling.
The Notes column shows an old or wrong remark.
Tick the invoice (or double-click it), open Update payment status, and edit or clear the text in Notes / remarks, then Save. If the remark is only an old status such as “Outstanding - status unknown”, it clears automatically when you change the status.
How do I update the ledger from Infotech?
In Infotech, export the invoice list to Excel (the file is named like INFOTECH_Invoice-…xlsx). In the ledger, click Upload document and choose that file, then confirm. Customer, dates, amount, currency, reference and PO number come from Infotech, and invoices marked Paid in Infotech become Paid here. Taulia statuses (Approved, In Process and so on) are kept, because Infotech doesn’t know them. New invoices are added as “Outstanding - status unknown”.
What does the “Infotech import” list of invoices to check mean?
These are invoices where the ledger and Infotech disagree, for example Paid in the ledger but still due in Infotech, or part-paid in Infotech. Nothing was changed for them automatically; check each one in Infotech and correct whichever side is wrong.
How do I send payments from the ledger to Infotech?
1. Upload the latest Infotech invoice list here first, so the ledger knows which invoices Infotech already has as Paid. 2. Mark the invoices Paid here with a payment date and GIRO reference (Update payment status). 3. Click Export payments for Infotech; it lists what will be exported and what is left out and why, then saves an Excel file in Infotech’s Invoice payment template (bank account OCBC (SGD) or OCBC (USD) by currency, payment mode Netbanking). 4. In Infotech, go to Accounting → Migration → Invoice payment, click Choose File, pick that file, then Next to match fields and complete the import. Exported invoices are marked “Payment exported” so they are not exported twice.
The Infotech import lists many invoices “Paid in the ledger, Draft in Infotech”. Is something wrong?
No. Those are payments recorded here that Infotech hasn’t got yet, usually because the invoice is still Draft in Infotech (DCI keeps many invoices as Draft on purpose). Nothing is changed for them automatically. Infotech will not take a payment on a Draft, so either leave the payment recorded here only, or approve the invoice in Infotech and then export the payment.
Why are Draft invoices never in the payment export?
Infotech’s Invoice payment import refuses any payment on a Draft (“Payment cannot be imported for unapproved or paid invoices”), and one bad row makes Infotech reject the whole file. So the export only includes invoices Infotech has approved (“Awaiting / Waiting For Payment”). To include one, approve it in Infotech, upload the Infotech invoice list here again, then export.
How do I test an Infotech payment export with just one invoice?
Type the invoice number in the search box so only that invoice shows, then click Export payments for Infotech; the file will contain just that payment. Import it in Infotech and check the invoice shows Paid before exporting the rest.
The payment date is today instead of the real date.
Update payment status fills in today’s date by default. Before saving, change it to the date the money actually arrived. If you already exported it, correct the date in Infotech too, or cancel the export window and fix the date here first.
Total outstanding suddenly jumped (for example to millions).
Something that isn’t an invoice was imported, usually by uploading this dashboard’s own Download as Excel file. Set Status to “Outstanding - status unknown”, click Amount (SGD) until the largest are at the top, and delete rows whose invoice number is just a number (like 581) or whose notes say TOTAL. Uploads now skip summary/total lines, so this shouldn’t happen again.
The data looks wrong or corrupted. How do I get it back?
An admin opens Backup & restore, picks the most recent backup from before the problem (each shows when and why it was made, e.g. “Before an Infotech import”), and clicks Restore. Read the summary (invoice counts and outstanding total now vs after), type RESTORE, and wait for “Restore finished”. Anything recorded after that backup is lost, so re-enter recent payments if needed. The ledger from just before the restore is saved too, so a restore can itself be undone the same way.
Which files can I upload to the ledger?
Infotech invoice exports, customer AR aging reports, Taulia status exports, bank / GIRO remittance PDFs, and the internal invoicing control sheet (it is recognised automatically and only adds the staff name, service period and PO number to matching invoices — nothing else changes). Do not upload this dashboard’s own Excel download or other working files: they don’t hold invoice totals, so amounts, dates and notes would be overwritten wrongly. Before any spreadsheet upload the ledger shows how many invoices will change and warns when amounts would change — press Cancel if that looks wrong. A backup is taken first either way.
An invoice has no staff name, period or PO. Can I type them in?
Yes. Tick the invoice (or double-click it), open Update payment status, and fill in Staff / licence name (suggestions appear as you type), the service period start and end dates, and the PO number, then Save. With several invoices ticked, only the boxes you type in are changed. They also appear in + Add invoice. A later control-sheet upload fills in staff and period from the sheet, and an Infotech upload only replaces the PO when Infotech has one.
How do I see which staff an invoice is for?
Upload the monthly invoicing control sheet (Upload document). The staff name, service period and PO number then appear in small grey text under each invoice number, and the search box also finds invoices by staff name or PO number. Upload it again whenever it has new invoices; it only fills in these details.
How often should I back up?
Automatic cloud backups happen weekly and before every Infotech import or restore, so normally nothing is needed. Before a big change (a large upload, deleting many rows) click Save a backup to the cloud now. Once a month, also Download a backup file and keep it outside Supabase (for example OneDrive) in case the whole Supabase project is ever lost.
Does a backup include the payment voucher files?
It includes each invoice’s link to its voucher. The voucher files themselves stay in Supabase Storage and are never deleted by the app, so restored invoices still open their vouchers.
I deleted a real invoice by mistake.
Upload the latest Infotech invoice list; it adds back any invoice Infotech has (as unpaid, so re-enter its payment details with Update payment status). Ticks only stay on invoices visible on screen, and the Delete confirmation lists every invoice number — read it before pressing OK.
Why was a paid invoice left out of the Infotech payment export?
It is left out if it is still Draft (not approved) in Infotech; if Infotech already shows it Paid or it was exported before; if it isn’t in Infotech’s invoice list at all (older invoices or credit notes Infotech doesn’t have), or no Infotech upload has been done yet; if it has no payment date; if it is a credit note; or if its currency has no OCBC account in Infotech’s template. The export window lists each reason, then offers an Excel list of every left-out invoice with its reason — use it to see which Draft invoices to approve in Infotech.
Infotech rejected some payments in the import.
“Payment cannot be imported for unapproved or paid invoices” means the invoice is still Draft (or already paid) in Infotech; the export now leaves Draft invoices out, so approve them in Infotech first. “Foreign currency exchange rate cannot be 1” means a USD payment had no rate; the export now asks for the rate. Infotech rejects the whole file if any row has an error, so nothing from that file was recorded. Fix those invoices in Infotech, then upload the latest Infotech invoice list here; invoices still unpaid in Infotech become available to export again.
I forgot my password.
Ask an admin to open Manage users and click Reset password next to your email. They will give you a temporary password; sign in with it.
Can the app read our Outlook inbox?
No. It only knows what is uploaded or entered into it. For an inbox-based reconciliation, ask Claude in chat (for example "Reconcile my DCI invoice payments"), then upload the results here.