====================================
CSV Upload Validation Rules
====================================

The following table describes the validation rules applied when uploading a CSV file.

.. list-table::
   :header-rows: 1
   :widths: 20 20 40 20

   * - **Type**
     - **Field**
     - **Logic**
     - **Comments**

   * - Structural
     - *(All Fields)*
     - Ensure that all required field names are present.
     - -
   * - Update
     - `...NominalAccountNumber` (*n)
     - If value starts with `xx-`, map `NominalCostCentre` using `dbo.meoCostCentres` and retrieve `NominalAccountNumber` from `dbo.vw_xx-data`.
     - Ensure the correct nominal code is assigned.

   * - Checks
     - AccountNumber
     - Validate against `dbo.meoValidSuppliers`.
     - Ensure the account exists in the valid suppliers list.

   * - Checks
     - Source
     - Should always be `80`.
     - Reject rows where `Source != 80`.

   * - Checks
     - SYSTraderTranType
     - Should always be `4`.
     - Reject rows where `SYSTraderTranType != 4`.

   * - Update
     - TransactionDate
     - Set to today’s date (`dd/mm/yyyy`).
     - Ensure all rows have a consistent transaction date.

   * - Checks
     - `...NominalAccountNumber` (*n)
     - Validate against `[Nom]` in `dbo.meoNominal`.
     - Ensure all nominal account numbers exist.

   * - Checks
     - `...NominalCostCentre` (*n)
     - Validate against `dbo.meoCostCentres`.
     - Ensure cost centres exist.

   * - Checks
     - Combination of `...NominalAccountNumber`, `...NominalCostCentre`, and `...NominalDepartment`
     - Validate against `dbo.meoValidSageAccounts`.
     - The combination of the three fields must be valid.

   * - Checks
     - `...TaxRate`
     - Validate against `[Tax code]` in `dbo.meoValidVAT`.
     - Ensure valid tax rates.