Actuals Uploading

Upload paired AR and W&D files, validate them, and commit matched actuals into ProFeT.

The actuals uploader brings sales-side AR data and W&D cost data into ProFeT as one managed import. Both files are required, both are validated together, and the upload records what happened without rewriting already-posted invoice rows.

For the broader Actuals feature, see Actuals.

Courier parcel profiles are not part of this import. Uploaded W&D is treated as the actual landed cost for the order, regardless of how courier forecasting is configured elsewhere.

Before you upload

Make sure these prerequisites are in place first:

  • your Customers are created with the correct external customer IDs
  • your SKUs exist and their item identifiers match the upload data
  • any stock you want actuals to consume has been added as received production batches, not just planned ones
  • your AR and W&D source files both use the expected columns and matching order references

Upload Flow

Navigate to Data → Actuals and click Upload paired actuals.

The uploader is split into two sides:

  • Left: Actuals / AR
  • Right: W&D

You can drag files in or click either side to choose a file. The upload stays blocked until:

  • both files are present
  • both files parse successfully
  • validation passes

Supported file types:

  • CSV
  • XLSX

Expected Templates

The uploader provides downloadable template CSVs, and example upload pairs live in docs/Example CSVs for uploads/.

Actuals / AR columns

ColumnPurpose
ExternalIdCustomer external identifier
InvoiceNumberInvoice reference
ReferenceOrder number used to match W&D
InvoiceDateSale date in YYYY-MM-DD
InventoryItemCodeSKU identifier
DescriptionLine description
QuantityUnits/cases sold
UnitAmountPrice per unit/case
LineAmountTotal line value
TypeDocument type, e.g. ACCREC

W&D columns

ColumnPurpose
ClientCustomer external identifier
OrderOrder number used to match AR
Invoice DateW&D date in YYYY-MM-DD
Total CostTotal W&D cost for the row
CommentsOptional note

Matching Rules

During validation, ProFeT checks:

  • ExternalId / Client must match a customer identifier stored in ProFeT
  • InventoryItemCode must match a configured SKU identifier
  • Reference and Order are used as the AR↔W&D join key
  • AR rows without W&D are allowed to post with £0 W&D and are sent to Review
  • W&D rows without AR are kept visible in Review until resolved
  • all AR rows for a single order must agree on invoice and customer identity

Customer matching uses the stored external identifier, not the display name. In practice, that means the customer record ID is accepted, and the Xero contact ID is also accepted if it is populated on the customer.

Validation Checks

Before commit, the uploader validates the pair end to end:

  • File completeness — both files and required columns are present
  • Date formatting — dates must be valid and use YYYY-MM-DD
  • Customer and SKU resolution — unknown identifiers block the upload
  • Order reconciliation — unmatched AR and W&D rows are surfaced clearly so they can flow into Review instead of disappearing
  • Stock availability — uploaded sales cannot consume stock from planned batches
  • Duplicate detection — already-posted invoice lines are treated as no-ops and are not double counted

If an invoice already exists, ProFeT treats the invoice as immutable:

  • existing committed rows are left untouched
  • genuinely new rows can still be appended to that invoice
  • exact duplicates are skipped
  • late operational costs stay in Review until a human decides what to do with them

If a SKU has stock planned but not yet received, that stock does not count as available for actuals.

How W&D Is Distributed

W&D is pooled at the order level, then split across the order’s AR lines by line value:

Line W&D = Total Order W&D × (Line Amount ÷ Total Order Amount)

Example:

  • Product A line amount: £300
  • Product B line amount: £100
  • Total order W&D: £40

Result:

  • Product A gets £30
  • Product B gets £10

That is a 3:1 split, regardless of case volume.

This means parcel-profile setup in W&D Setup does not alter historical actuals allocation. Parcel profiles only change forecast-side courier W&D assumptions.

Fallback order:

  1. line value
  2. quantity
  3. even split

What Happens on Commit

When the upload commits successfully, ProFeT:

  1. stores both original source files
  2. creates one paired upload record
  3. reuses existing invoice headers where needed without rewriting them
  4. creates sale records only for genuinely new AR lines
  5. calculates FIFO COGS per sale line
  6. records batch allocations for consumed stock
  7. increments consumed units on the received production batches used by the sale
  8. creates Review items for unmatched AR or W&D exceptions

Upload History

The upload drawer also shows import history so you can:

  • see who uploaded the pair
  • review invoice and sale counts
  • re-download the original AR and W&D source files
  • archive upload records from the history view without rewriting committed actuals

Troubleshooting

Unknown customer

Check that ExternalId / Client matches the customer identifier stored in ProFeT. If you are using Xero contact IDs, make sure that field is populated on the customer record first.

Unknown SKU

Check that InventoryItemCode matches a configured SKU code or accepted SKU external identifier.

Missing W&D match

If an AR order is missing W&D, the sale can still post with £0 W&D and the exception will stay visible in the Review queue.

If a W&D row has no matching AR, the cost is not dropped. It stays visible in Review until it is classified.

Insufficient stock

Actuals can only consume received stock. If the required inventory is still in planned batches, receive the stock first, then retry the upload.