Using Coil
Sales and Sales Tax
Import vendor sales reports, record sales by hand, track sales tax owed, and match sales to stock.
Import a Vendor Sales Report
Large reports are sent in batches of up to 500 lines. Each line keeps the vendor transaction ID when the report has one, so overlapping date ranges and repeated imports are skipped as duplicates. Without a transaction ID, Coil compares machine, product, time, amount, and quantity.
Report timestamps without a time zone are read in the workspace time zone from Settings (US Eastern by default). A completed refund with the original transaction ID reverses that sale and returns its units to stock; a refund Coil cannot match is held for review instead of being guessed.
Previews also appear under Sales > Imports, where you can review, apply, or discard them yourself.
- Export the transaction-level sales report (CSV or Excel) from Haha Vending, BuzzBot, VTM, Nayax, or another vending platform.
- Give the file to your agent and ask it to update Coil with what sold. It needs a key with the Sales importer preset (sales:read and sales:write).
- The agent reads the report, drops declined or failed vends, matches each product and machine to your Coil records, and calls preview_sales_import. Nothing is recorded yet.
- Review the preview: units, revenue before tax, sales tax to remit, units needing stock, duplicates, and any blocked lines. Unknown machines or products block the preview; create the machine in Coil or tell the agent which existing record it is. Coil never creates machines or products from a report.
- Approve, and the agent calls apply_sales_import. Matching units are marked sold and the vendor names it matched are saved as mappings, so the next report from that vendor matches automatically.
Record a Few Sales by Hand
- Open Sales > Record sales and choose the location. Optionally choose the machine.
- Enter the date (and optionally the time), then add each product, the quantity, and the total charged.
- If tax was charged on top of the price, enter it in Separate tax. Otherwise leave it blank and Coil backs the tax out of the total.
- Choose Review sales, check the preview, then record the sales.
Which Inventory Units Are Sold
For each sale, Coil sells stock assigned to that machine first, then other stock at the same location, then warehouse stock. Within each group it sells the earliest-expiring lot when all lots have best-by dates, otherwise the oldest purchase first. Stock at other locations is never used.
You do not have to keep machine counts exact. If there is no matching stock at all, the sale is still recorded with its revenue and tax, and it is flagged under Sales > Needs stock with no cost yet. After you receive the missing purchase, choose Match stock to attach units and fill in the cost. The dashboard shows how many sold units are still waiting for stock.
Sales Tax
Dashboard and Reports show Sales Tax to Remit for the period and per location. The summary CSV breaks it into tax charged separately and tax backed out of tax-included prices. Sales tax is never counted as revenue or profit.
- Each location uses its own sales tax rate if one is set in Locations, otherwise the workspace default in Settings (6% by default). Set a location rate for machines in another state.
- If the report lists tax separately, that amount is recorded as tax collected and the price is revenue. A $10.00 item with $0.60 tax records $10.00 revenue and $0.60 to remit.
- If no separate tax is shown, the price is treated as tax-included and the tax is backed out. A $2.00 sale at 6% records $1.89 revenue and $0.11 to remit.
- If separately collected tax does not match the location rate, Coil records what was collected and flags the line. It never adjusts collected tax automatically.
- Products marked non-taxable owe no sales tax. Each sale stores the rate it used, so later rate changes do not rewrite past sales.
Card Fees
When a report includes the actual processing fee, Coil uses it. Otherwise it applies the machine's configured card fee. Cash sales have no card fee.
Undo and Mappings
Undo an entire import from Sales > Imports, or a single sale from Recorded sales. Undone units return to stock and the sale leaves reports, and the same transaction can be imported again. Imports that applied refunds must be undone sale by sale.
Sales > Mappings lists saved vendor names and the Coil product or machine each one maps to. Delete a wrong mapping and correct the import; recorded sales are not changed by deleting a mapping.