Project status · Module 1 · original scope
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
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.
Right. Not all of them, but enough to matter, and there was no way to tell which.
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.
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.
Two different things sit underneath this, and only one of them is a fault.
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.
Read this morning, not from our logs
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.
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.
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
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.
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.
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.
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.
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.
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.
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
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
Invoices our system created during August that were later deleted from the books
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
Products that could reject an invoice
Customers with no email on their invoices
Customer records pointing at the same account
Invoices failing per day, at 21 Aug
New, running from today
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.
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
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
Still on our list
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.