Provkeep← Back to the overview

When a dispute lands

A dispute response for one order

One PDF answering a quality chargeback. It carries the lot recorded for each line and how it was determined, the laboratory result for that lot, and the consent record from the checkout session.

Two dispute conditions turn on product evidence. The cardholder says that what arrived was not as described or was defective, or that they never agreed to the terms. One response answers both. The cardholder is not denying the purchase. The answer is a documented chain: this order, this lot, the laboratory result published for it, and the terms accepted before payment.

The response is assembled from records the store already holds, rather than gathered from separate systems while a deadline is running. The link between the order and the laboratory result is in the data, not asserted in the document.

Starting from the order, not from a folder

It is generated from the order itself. Open the order and select the reason code from the processor’s notice; the document is then built from what the store recorded at the time.

The reason code is supplied by the merchant and printed as such. It is on the processor's notice. Provkeep has no way of knowing it, and a document implying otherwise would invent a fact in front of the one reader who can check it.

The same screen is where a gap is closed. A line that was never tied to a lot is flagged on the row itself. The reason is stated: the SKU is not in the catalog, so there is no product to look up a batch for.

Product screen
The orders list with one status per row. Order 10422 is flagged '1 line not tied to a batch' and is expanded, showing a GLOW 50mg line marked 'Not matched, unresolved', an amber panel explaining the SKU is not in the catalog with an inline form to add it, a batch override selector, below that a section headed 'Facing a Chargeback on this order?' with a reason code picker, and at the foot of the row a link reading 'Share these records with a reviewer'.
The order screen. The unresolved line and the packet generator sit in the same place, because the gap is what you want to close before you generate anything. Demonstration data: the store and the laboratory are invented and the purity figures measure nothing.

It always generates, and it says what it cannot show

A gap that cannot be closed does not block generation. The document is produced either way, and a section headed What this packet does not show names the line it could not account for.

That is the decision the document turns on. A response that quietly omits a weak line is worth less than one that names it, because the processor holds the order data as well. A declared limit reads as one gap in an otherwise complete submission.

Generated document
A full page of a generated dispute response, headed 'Dispute response · Northlake Research'. Section one, 'Items on this order', lists one product with its SKU and quantity, followed by the line 'No lot could be tied to this line.' Section two, 'Consent record', gives the acceptance time, the terms version and the minimum age shown, states that the wording displayed at checkout is fixed by a fingerprint stored with the record so the terms accepted cannot be altered after the fact, and notes that this order's record does not say how consent was enforced, so the document states nothing about it. Section three, 'Opening the records behind these claims', says each record can be opened directly through a link the store issues, and that the consent records have been fingerprinted and timestamped by an outside timestamp authority, so the date can be checked against that authority rather than against the store or Provkeep.
One page of the response, whole. The line that could not be tied to a lot is declared in the first section rather than buried. The last section tells a reader how to open the records behind the claims. Demonstration data: the store and the laboratory are invented and the purity figures measure nothing.

Consent is held to the same standard. Where a consent record exists, the response states what it fixes: the terms version, the minimum age shown, the acceptance timestamp. Where one does not, it makes no claim of acceptance at all. Where a lot was bound by a person rather than matched automatically, the response says so, with the date and the original answer.

Two documents, not one with a switch

A reason code this document does not answer is refused rather than answered under a different heading. A fraud dispute rests on identity linkage across the cardholder's earlier orders, not on laboratory results, and a submission padded with certificates reads as noise. That is a separate document with a separate argument.

Every response is also kept as it was generated. Regenerating builds from today's data, which may differ once a lot has been corrected or a certificate published. Both are available, and they are labelled as the different things they are.