Project status · Module 1 · original scope

Invoicing accuracy

On 20 August Shelly listed five things wrong with the invoices arriving in QuickBooks. She was right about most of them. This page answers each point, separates what is fixed from what is not, and sets out what we will not decide without her. This is repair of the wholesale ordering system we already built, so none of it is charged.

The answer to your email

Shelly’s five points, one at a time

She closed with “in my opinion, nothing is coming into QuickBooks correctly”. Taken point by point, she was right about four of the five, and three of those were on us. Tap any row.

Fixed In progress Needs a decision
1. “All invoices are not coming into QuickBooks” Right · in progress

Right. Not all of them, but enough to matter, and there was no way to tell which.

1–21 August, every delivery day traced individually: 141 order days. 127 produced an invoice. 14 did not, because a product on the order had no match in QuickBooks and the whole invoice was refused.
Of those 14, Shelly has already keyed 7 by hand. 7 have never been invoiced by anyone — listed lower down under the decisions.
The cause is closed: every product a customer can order now has a match, so no new order is refused for this reason.
2. “Prices for some customers are still incorrect” Right · fixed

Right, and we take responsibility for it. Until 4 August the ordering app fell back to the standard catalogue price when it could not find a customer’s own agreed price. Those wrong prices then travelled all the way to the invoice.

A second, quieter version of the same thing: where a customer had no price at all for a product, the line went through at zero.

Catalogue fallback fixed 4 August. Nothing since.
Zero-priced lines in the last 60 days: 5, all in July — three Mezzaluna cheesecakes and two on Brian’s own account. None in August.
An order containing a zero-priced line is now flagged the moment it is placed rather than being discovered on an invoice. It is not blocked, because refusing a customer’s order over our own missing price would be worse.
3. “Multiple invoices for the same customer” Right · fixed

Right, and we take responsibility for it. Every time a customer edited an order before the cut-off, the system raised a fresh invoice instead of updating the one it had already made. Nothing removed the earlier one.

4 delivery days in August carried more than one invoice, all Wellbecks. The worst was 7 August: one order, seven invoices. The last was 18 August.
Fixed overnight on 20–21 August. An edited order now finds and updates its own invoice, and will not resurrect one that has been cancelled.
Honest caveat: one night of orders has run since the fix and produced exactly one invoice each. That is real, but it is one night.
4. “Some product items incorrect on invoices” Partly · needs a decision

Two different things sit underneath this, and only one of them is a fault.

Quantities: six August invoices carry a quantity that does not match what was ordered — The Sea Shed 2 Aug, Derriere 13, 15 and 16 Aug, Haymans Social 13 Aug, Royal Westmoreland 16 Aug. We do not know whether these are our error or Shelly correcting a short delivery. We need her to look at one of them and tell us which.

VAT: 16 products are treated differently in QuickBooks than in the ordering app. That is a real disagreement and it is set out under the decisions below.
5. “Customer email address still missing” Right · fixed

Right, and we take responsibility for it. The email was never written onto the invoice, so QuickBooks could not send it without someone typing the address in first. Three customers had no email held anywhere in the app either.

All 31 active wholesale customers now have an email on file, filled in from QuickBooks’ own records where the app had none.
The address is written onto the invoice on creation and on every amendment. Checked on all twelve invoices raised since the fix, including every Italia Coffee location.

Read this morning, not from our logs

Where it actually stands

An order placed before the 11pm cut-off is baked overnight and delivered the next day, and its invoice is created within seconds of the order. So the invoices for today’s bread were made last night, and today’s orders, for tomorrow, have not been placed yet. Everything below is counted by delivery day for that reason.

17/18

Invoiced for today’s deliveries

Eighteen orders were due for delivery today. Seventeen have an invoice in QuickBooks. One does not.

The one is Wellbecks. It came in at 4:51pm yesterday and was refused because of an unrecognised product. We added that product at 7:55pm. Every order placed after that has landed, including all nine Italia Coffee locations.

1
15 Aug
2
16
0
17
3
18
2
19
1
20
1
21

Orders refused by QuickBooks, by delivery day. We are not claiming a clean day yet. The fixes landed part-way through last night’s ordering, so the first day where every order was placed after every fix is tomorrow, 22 August. We will report that number whether it is zero or not.


Underneath the five points

Six separate faults, not one

Five symptoms, six causes. They overlap, which is why the whole thing looked like one broken system rather than a list of fixable things. Tap any row for the detail.

Fixed In progress Needs a decision
Editing an order created a second invoice instead of updating the first Fixed

When a customer changed their order, the system raised a brand new invoice rather than amending the one already there. Every edit made another one.

This is the single biggest cause of the mess in the books, and it is why so much time was going into deleting duplicates by hand.

Worst case: Wellbecks, 6 August. One order, edited six times over five hours, produced seven invoices climbing from $705.20 to $808.80.
Across August: 27 surplus invoices over 16 delivery days, affecting 10 customers.
Now: an amended order updates the invoice that already exists. Tested on a live order: two submissions, one invoice, total updated from $26.60 to $50.60.
Some products had no match in QuickBooks, which rejected the whole invoice Fixed

A product created in the ordering app was not created in QuickBooks. When anyone ordered it, QuickBooks refused the entire invoice, not just that line. One unmatched item lost the whole order.

Eighteen products had built up this way, and the app had no way of telling anyone.

Then: 18 products with no QuickBooks equivalent.
Now: 0. Every product in the catalogue has a match, and a new product now creates its QuickBooks item automatically at the moment it is added.
Invoices were going out without the customer's email address Fixed

The email address was never being written onto the invoice, so QuickBooks could not send it without someone typing the address in first.

Three customers also had no email held anywhere in the ordering app, so there was nothing to write. Those have been filled in from QuickBooks' own records.

Now: every one of the 31 active wholesale customers has an email on file, and it is written onto the invoice on creation and on every amendment.
Verified on the twelve invoices raised since the fix, including all nine Italia Coffee locations.
Some orders were rejected and never tried again Fixed

If an order contained a product QuickBooks did not recognise, the whole invoice was refused. The refusal was recorded, but nothing ever went back and tried again once that product was added. The system could see the problem. It could not recover from it.

It can now. Every half hour the system checks for orders that were refused, confirms the cause has actually been fixed, and puts them through. Before it creates anything it looks in QuickBooks to see whether Shelly has already raised that invoice by hand, and if she has, it leaves it alone.

Tested both ways on the live system. An order was deliberately refused, the product was added, and the invoice appeared correctly dated. Then a second order was refused and an invoice was raised by hand in QuickBooks for the same customer and day — the system found it and created nothing.

This only reaches orders from the last twelve hours, so it can never sweep up old ones on its own. The seven unbilled days from earlier in August stay listed below for Shelly, untouched.
Invoices were dated the day the order was placed, not the day of delivery Fixed · proving tomorrow

An order placed on Wednesday evening for Thursday's bread carried Wednesday's date. Not always — it depended on whether a date label made it through the handover, and often it did not, in which case the system quietly used the order date instead.

We were going to ask Shelly which she preferred. We did not need to: the books already answered it. Invoices carrying the delivery date were mostly kept. Invoices carrying the order date were almost all deleted.

August, counting only days with a single invoice so duplicates cannot distort it:
Dated the delivery date — 47 invoices, 9 deleted (19%).
Dated the order date — 20 invoices, 17 deleted (85%).
An invoice dated the order date was 4.5 times more likely to be deleted.

The fix went live at 6:45 this morning, which is after last night’s orders were processed. So today’s invoices still carry yesterday’s date. It is proven on a test order put through the full live pipeline at 12:05 today: order for delivery 29 August, invoice 32495 created carrying 29 August, then deleted again. The first real customer invoices to carry the delivery date will be tonight’s, and we will check every one of them tomorrow morning before saying it is done.
A late order could slip through if the system could not read its own cut-off time Fixed

The ordering deadline is enforced on our server against Barbados time. If that check could not read the configured cut-off, it let the order through rather than stopping it.

That is the wrong way round. An order accepted after the deadline lands in the bakery's morning production run without warning. The check now refuses the order and tells the customer to ring the bakery, on both the wholesale and the Italia ordering paths.


Where we take responsibility

We were making work for Shelly

When we measured the books properly rather than our own records, this is what came back. It is uncomfortable and it is the real reason for the frustration.

Invoices in QuickBooks during August that our system did not create, across 16 customers

101

Invoices our system created during August that were later deleted from the books

60

Roughly five invoices a day, typed in by hand, because ours were wrong or duplicated. That is not an integration, that is extra work wearing an integration's clothes. The duplicates that caused most of it stopped on the 20th.


Measured this morning

Where the numbers are now

Products that could reject an invoice

180

Customers with no email on their invoices

30

Customer records pointing at the same account

20

Invoices failing per day, at 21 Aug

30

New, running from today

A check every morning at 7am

The reason these faults ran for weeks is that nothing was comparing the orders against the books. Something now does, at 7am Barbados time, before Shelly starts. It reads QuickBooks directly rather than trusting our own records, and it reports even when everything is clean.

  • Orders with no invoice, and why
  • Invoices we raised that have since been deleted
  • More than one invoice for the same delivery
  • Invoice contents that disagree with the order
  • Products with no QuickBooks match
  • Missing customer emails, filled in automatically
  • VAT treatment that disagrees between systems
  • Invoices raised outside the system
What this gives Shelly: anything wrong is on a list before she finds it, with the reason attached. And the count of invoices she has had to raise by hand is now measured every day, so the workload we created can be watched going down rather than argued about.

One more thing we found today, and it is worth saying plainly. Our own alarm system had a fault in it. When something went partly wrong — an order that reached us but not Shopify, for instance — the warning was being written and then thrown away before anyone could see it. That had been true for months, and it is a large part of why these problems ran so long without anyone catching them. It is fixed, and we tested that the warnings now actually arrive.

It ran on its own for the first time this morning at 7am and the report arrived. Six invoices across August came back where the quantity billed does not match the quantity ordered. They are listed by customer and date and need a human eye rather than a code change — a short delivery and an edited invoice look identical from the outside.


Please check these, Shelly

Five things we have assumed about how you work

Every number on this page rests on these. We did not ask before making them, so any one of them could be wrong, and if it is, the figures move. They take about two minutes to read.

That an invoice should carry the delivery date, not the order date Check

We were going to ask and then decided we could work it out. We read it from your own behaviour: invoices dated the delivery date were mostly kept, invoices dated the order date were almost all deleted. So we changed the system to use the delivery date.

If that reading is wrong, tell us and we will change it back the same day. It is one setting, not a rebuild.

That your hand-written invoice covers the same delivery ours missed Check

Where our invoice is missing and one of yours sits within a day of it for the same customer, we count that delivery as covered and stop worrying about it.

34 August delivery days are counted as covered on that basis alone. We match on customer and date, not on what is on the invoice.
If any of those pairings is actually two different deliveries, the number of unbilled days on this page goes up, not down.
That the six quantity differences are you, not us Check

Six August invoices carry a quantity that does not match what the customer ordered. That could be us sending the wrong number, or you correcting a short delivery. The two look identical from where we sit.

The six: The Sea Shed 2 Aug, Derriere 13, 15 and 16 Aug, Haymans Social 13 Aug, Royal Westmoreland 16 Aug.
Look at one of them. If you changed it, we will stop reporting these. If you did not, we have a bug we have not found yet and we want to know today.
That deleted invoices with no replacement are still on your list Check

Seventeen August delivery days had an invoice raised and then removed, with nothing put back yet. We are treating those as work in progress on your side rather than deliberate write-offs, and the morning check will tell us when a replacement appears.

If any of them were written off on purpose, say which and we will stop counting them.

That QuickBooks, not the ordering app, is right about VAT Check

Where the two systems disagree on whether a product carries VAT, the invoice follows QuickBooks. Nobody told us to do that. It was the safer default, and it means your ledger has not been contradicted, but it is a decision we made rather than one you gave us.

The 16 products where they disagree are listed in the next section.


Over to you

Three things only Shelly can decide

We are not putting anything into the QuickBooks ledger. Two of these are lists rather than requests: work we can see is outstanding, flagged so nothing is lost. The third is an accounting judgement that is not ours to make. Nothing here happens unless Shelly asks for it.

Seven delivery days have never been invoiced Needs a decision

These are orders the system refused because of an unrecognised product, and never tried again. The goods went out. No invoice was ever raised for them, by us or by hand.

We can put all seven through in a few minutes, correctly dated and correctly priced. We have not, because Shelly may already be part-way through keying some of them, and the last thing she needs from us is a second copy of an invoice she has just written.

Mezzaluna — 18 August, 1,494.85 · 19 August, 1,261.71
Wellbecks — 19 August, 456.82 · 20 August, 487.89 · 21 August, 663.91
Blue Monkey — 18 August, 188.59
The Mews — 18 August, 119.00
Total BBD 4,672.77, before VAT.

We will not create these. They are here so nothing is lost. If Shelly would rather we raised them than key them herself, she only has to say so, and we would send the list back for her approval first.
Seventeen more days were invoiced, then removed, and not yet replaced Needs a decision

Separate from the above, and not a fault in the system: an invoice was raised for these deliveries and later deleted from QuickBooks, and no replacement has appeared. Most are recent, so this may simply be work in progress. We are listing them so that none is lost by accident.

4 Aug — The Bearded Rose 100.00, Haymans Social 105.00
11 Aug — Derriere 240.00, Rubis Wildey 141.00, Blue Monkey 107.82, The Sea Shed 98.00, Wyndhams 37.53
12 Aug — La Cabane 219.00
14 Aug — Royal Westmoreland 97.50
18 Aug — Wellbecks 515.73, Le Shack 425.00, Derriere 236.50, Rubis Wildey 141.00, The Sea Shed 122.00, La Cabane 75.00, Wyndhams 37.53
19 Aug — Sand Street Bistro 30.00
Total BBD 2,728.61, before VAT. The morning check now watches this list and will tell us the moment a replacement appears.
VAT treatment disagrees on 16 products Needs a decision

For 16 products, the ordering app and QuickBooks hold different views on whether VAT applies. Where the two disagree, the invoice follows QuickBooks.

We need a ruling on which is correct for each, and then we will make both systems agree and keep them that way. Until then the morning check reports the disagreement every day so it cannot drift further.

8 products are charged 17.5% in QuickBooks that the app treats as zero-rated — including Sourdough Plain 500g and Sourdough French Baguette 350g.
3 products are zero-rated in QuickBooks that the app charges VAT on — including the Rye, Raisin and Walnut sourdough.
5 more have no tax code recorded at all.

Still on our list

What we are doing next

  • Tomorrow morning: check that every one of tonight’s real invoices carries the delivery date and that each order produced exactly one. Tonight is the first batch to run with every fix in place. Until we have looked at it with our own eyes we are not calling the dating done.
  • The six quantity differences. We need one of them looked at to know whether they are Shelly’s corrections or our error. Until she tells us, the morning check keeps listing them and we keep counting them as unknown rather than as a fault on either side.
  • Keep watching the count of invoices raised by hand. That is the number that says whether any of this is actually better for Shelly. It was 101 in August. We will report it next, whichever way it moves.

Two things have come off this list. The recovery step is built and tested, so it has moved up into the fixed section. And we had planned to backfill an order reference onto past months to make them reconcilable; that is no longer needed, because the morning check now traces every August day correctly without it.