> For the complete documentation index, see [llms.txt](https://help.solink.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.solink.com/docs/install-connect-and-integrate/integrations/csv-formatting-guides/validate-files-standard-csv-validator.md).

# Validate Files (Standard CSV Validator)

This guide explains how to use Solink’s **Standard CSV Validator**, what each results section means, how errors differ from warnings, and how to fix each issue.

[You can access the validator here.](https://integrations.solinkcloud.com/csv-validator)

The Standard CSV Validator checks Retail, Restaurant, and Banking CSV files before you upload them for processing. It checks:

* File naming and structure
* Required columns and field values
* For Retail and Restaurant: relationships across the header, item, and payment files

Use it to catch formatting and data issues early so files process cleanly through [Standard CSV](/docs/install-connect-and-integrate/integrations/csv-formatting-guides/csv-format-for-sftp-data-integrations.md).

***

### How to Use the Validator

To validate your files:

1. Open the validator: <https://integrations.solinkcloud.com/csv-validator>
2. Select the **data type**: Retail, Restaurant, or Banking.
3. Add your CSV files. Drag them onto the page, or use the file picker.
4. Select **Validate**.
5. Review the results for each file. For Retail and Restaurant, also review the Cross-file validation section.
6. (Optional) Export the results to get the full row-level detail.

#### Upload Limits

The validator has the following upload limits:

* Only accepts CSV files (.csv)
* Up to **3 files** per validation
* Up to **50 MB** total

***

### Retail and Restaurant File Requirements

**Important:** Partial uploads are not accepted. If a file type has no data rows for a given batch, include that file anyway, with only the column-names row and no data rows.

Each file name must use the naming pattern in the format guidelines for your data type:

* [Retail](/docs/install-connect-and-integrate/integrations/csv-formatting-guides/retail-format-guidelines.md)
* [Restaurant](/docs/install-connect-and-integrate/integrations/csv-formatting-guides/restaurant-format-guidelines.md)

### Banking File Requirements

Banking uses a **single-file** structure (no header/item/payment split). Validate one Banking CSV at a time. For the required fields, see the [Banking format guidelines](/docs/install-connect-and-integrate/integrations/csv-formatting-guides/banking-format-guidelines.md).

***

### Understand Results

After validation, results are grouped into sections. Each section can show Successes, Errors, Warnings, and Info.

#### Per-file Sections (Header / Item / Payment, or Banking File)

These sections show the checks that apply to one file only:

| **Section**        | **What it checks**                                                                                     |
| ------------------ | ------------------------------------------------------------------------------------------------------ |
| File naming & size | Extension, naming pattern, size limits, suspicious names                                               |
| Schema / columns   | Required columns present; unexpected or empty required fields                                          |
| Field values       | Allowed values for status, itemStatus, and dataType                                                    |
| Date formats       | ISO-8601 timestamps with a timezone where required (and YYYY-MM-DD where allowed for some date fields) |

#### Cross-file Validation Section

This section shows only for Retail and Restaurant. It shows the checks that compare the header, item, and payment files:

| **Check**               | **What it means**                                                                                                          |
| ----------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| Complete file set       | Must have exactly one header, one item, and one payment file. Incomplete sets or duplicate types fail here.                |
| Amount mismatch         | For each transaction with items and payments, line totals − discounts + tax should match the payment total (within $0.05). |
| Other cross-file checks | Invalid transactionId characters; item/payment times outside the header window; orphaned IDs for the item/payment files    |

When the same issue occurs many times, the validator shows a summary with the count and some examples. To see every row, export the results.

### Errors vs Warnings

The validator sorts each issue into one of two types:

|                    | **Errors**                                                                                                                                                          | **Warnings**                                                                                                             |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| **Meaning**        | Issues that cause validation to **fail**                                                                                                                            | Issues you should review; validation can still **pass**                                                                  |
| **Typical impact** | Fix these before you send the files for processing                                                                                                                  | Data may process, but results can be incomplete, unbalanced, or unexpected                                               |
| **Examples**       | Missing required columns; invalid status; incomplete 3-file set; invalid characters in transactionId; duplicate header IDs; item/payment time outside header window | Orphaned transaction IDs across files; amount mismatch (out of balance beyond $0.05); dataType mismatch vs selected type |

***

### Errors: Causes and Fixes

Errors cause validation to fail. Fix every error before you send your files for processing.

#### Upload and File-set Errors

These errors are about the files you upload, not the data inside them.

**Incomplete or Duplicate File Set (Retail / Restaurant)**

This error shows when your upload does not have exactly one file of each type:

* **Where:** Cross-file validation
* **When flagged:** Not exactly one header + one item + one payment file
* **Details:** The validator uses the end of each file name (-header, -item, or -payment) to identify the file type. If a file type is missing, or if you upload two files of the same type, validation fails.
* **Fix:** Upload all three types. If a file type has no data rows, upload a column-names-only file for it.

**Invalid File Name or Type**

This error shows when a file is not a CSV or its name does not match the required pattern:

* **Where:** Per-file section
* **When flagged:** Not a .csv; Retail/Restaurant name does not end with -header, -item, or -payment; naming format does not match expected pattern
* **Fix:** Rename the file to match the naming pattern in the format guidelines. Then validate again.

**File Too Large**

This error shows when your upload is over the size limit:

* **When flagged:** The total size of the files is more than 50 MB.
* **Fix:** Reduce the total size. For example, validate a smaller batch of transactions, with one header, item, and payment file for that batch.

#### Schema and Field Errors

These errors are about the columns and values inside each file.

**Missing Required Columns / Empty Required Fields**

Each file must include all required columns. On data rows, required fields cannot be empty.

For the required fields for each schema, see the [CSV format guide](/docs/install-connect-and-integrate/integrations/csv-formatting-guides/csv-format-for-sftp-data-integrations.md).

**Invalid Values**

This error shows when a field has a value that is not in its allowed list:

* **Header status:** must be sale, refund, or void (case-insensitive)
* **Item itemStatus:** must be sale, return, void, override, or gratuity (case-insensitive)
* **dataType field:** Retail/Restaurant files: retail or restaurant; Banking: atm or teller. A value that is not in this list is an Error. A valid value that does not match the selected data type is a Warning (see [Other Common Warnings](#other-common-warnings)).

**Invalid Date / Time Format**

This error shows when a timestamp is not in a format the validator can read:

* **Details:** The validator flags a timestamp that is not valid [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601), or that has no timezone. For the format and examples, see the [CSV format guide](/docs/install-connect-and-integrate/integrations/csv-formatting-guides/csv-format-for-sftp-data-integrations.md).
* **Tip:** Use the same timezone format on header startTime/endTime and item/payment times so the validator can compare the times correctly.

#### Cross-file Errors (Retail / Restaurant)

These errors are about how the header, item, and payment files relate to each other.

**Invalid Characters in transactionId**

This error shows when a transaction ID contains a character that is not allowed:

* **Where:** Header, item, or payment file section
* **When flagged:** A transactionId contains a forbidden character. For the list of forbidden characters, see the [CSV format guide](/docs/install-connect-and-integrate/integrations/csv-formatting-guides/csv-format-for-sftp-data-integrations.md).
* **Details:** The message shows only the first forbidden character in each ID. An ID can contain more than one, so check the full ID.
* **Fix:** Remove or replace forbidden characters in IDs across all three files.

**Duplicate Header Records**

This error shows when one transaction ID is on more than one header row:

* **Where:** Header file section
* **When flagged:** The same transactionId appears on more than one header row
* **Details:** Each transactionId can appear on only one row in the header file. The validator checks only the files that you upload. It cannot find duplicate IDs across days or stores.
* **Fix:** Keep one header row per transaction ID.

**Time Outside Transaction Window**

This error shows when an item or payment time is outside the start and end times of its transaction:

* **Where:** Item file (itemTime) or Payment file (paymentTime)
* **When flagged:**
  * Time is **before** the matching header startTime, or
  * Header has endTime and the time is **after** that endTime
* **Details:** The validator compares each item and payment time to the start and end times of the same transaction, and includes the timezone. If a time is not in a valid format, the validator cannot do this check for that row. Fix the date format first.
* **Fix:** Change the item or payment times so they are between the header start and end times. Or correct the header start and end times.

***

### Warnings: Causes and Fixes

Warnings do not fail validation, but they can cause incomplete or unbalanced results. Review each warning before you send your files.

#### Orphaned Records

This warning shows when a transaction ID in one file has no match in the other files:

* **Severity:** Warning (does not fail validation by itself)
* **Where:** In the section for the file that has the unmatched ID:
  * Item IDs with no matching header → Item section
  * Payment IDs with no matching header → Payment section
  * Header IDs with no matching items or payments → Header section
* **Details:** The validator compares the transactionId values in the three files. The message shows how many IDs have no match, with some example IDs.
* **Exception:** A header with status void can have no matching items or payments (you do not get an orphan Warning for them).
* **Fix:** Make sure that each transaction that is not a void has a header row, and the item and payment rows that belong to it. Remove extra rows, or add the missing rows.

#### Amount Mismatch

This warning shows when a transaction's items and payments do not balance:

* **Severity:** Warning
* **Where:** Cross-file validation
* **When flagged:** For a transactionId that has at least one item and at least one payment, the absolute difference between the **expected total** and the **payment total** is greater than **$0.05**.
* **High-level formula:**
  * expected total = line totals − discounts + tax
  * payment total = sum of (amount tendered − change due)
  * Flag when the absolute difference is greater than $0.05
* **Direction rules:** The validator uses the Balance Rule in the [CSV format guide](/docs/install-connect-and-integrate/integrations/csv-formatting-guides/csv-format-for-sftp-data-integrations.md). It also uses these rules:
  * An override line uses the unit price as sent. A positive price adds, and a negative price subtracts. A positive item discount on an override is added to that line. A negative item discount is subtracted.
  * On a refund or void, positive transaction tax is refunded in full when every item with a price is a return or void. If only some priced items are returns or voids, the tax is split by item value: the returned share is refunded and the kept share is charged. If half the item value is returned, those two shares cancel. If no item is a return or void, the tax is charged in full.
  * A positive amount tendered is subtracted, as a refund, only when the header is a refund or void and every item with a price is a return or void. An amount that is already negative is used as sent.
  * Change due is subtracted from the amount tendered. On a void, change due is added instead.
* **Fix:** For each transaction ID in the message, check the item prices, discounts, tax, amounts tendered, and change due. Correct them until the difference is $0.05 or less.

#### Other Common Warnings

The validator can also show these warnings:

* **dataType mismatch:** The row has a valid dataType value, but it does not match the type selected in the UI (for example, you selected Retail, but the row says restaurant).
* **Column names but no data rows:** The file has only the column-names row and no data rows (allowed when that file type has no data in a complete set). No action is necessary.

***

### Read and Export the Results

Use these tips to read the results:

* Expand each file section to see Successes, Errors, Warnings, and Info.
* The counters count each instance of an issue, also when the messages are summarized. If one message says 12 rows have this issue, the Errors counter goes up by 12, not 1.
* To see every instance of an issue, export the results.
* Fix all Errors first. Then fix the Warnings for amount mismatches and orphaned records.

***

### Checklist Before You Send Files for Processing

Before you send your files, make sure that:

1. The correct data type is selected (Retail, Restaurant, or Banking).
2. Retail/Restaurant: exactly one header, item, and payment file (a column-names-only file is OK when that type has no data rows).
3. Names end with -header.csv, -item.csv, or -payment.csv. Use the specific [guide](/docs/install-connect-and-integrate/integrations/csv-formatting-guides/csv-format-for-sftp-data-integrations.md) to find the full filename pattern.
4. Your files follow the [CSV format guide](/docs/install-connect-and-integrate/integrations/csv-formatting-guides/csv-format-for-sftp-data-integrations.md).
5. The validator shows no errors.
6. You reviewed the Warnings for orphans and amount mismatches.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://help.solink.com/docs/install-connect-and-integrate/integrations/csv-formatting-guides/validate-files-standard-csv-validator.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
