# `PhoenixKit.Modules.Shop.Import.CSVValidator`
[🔗](https://github.com/BeamLabEU/phoenix_kit/blob/v1.7.63/lib/modules/shop/import/csv_validator.ex#L1)

Validates CSV files before import processing.

Performs early validation to fail fast with meaningful errors
rather than discovering issues mid-import.

## Validation Checks

1. **File exists and readable** - Basic filesystem check
2. **CSV parseable** - File is valid CSV format
3. **Required columns present** - Checks for Handle, Title, Variant Price by default
4. **Warning detection** - Non-blocking issues like empty rows

## Examples

    # Basic validation with default required columns
    case CSVValidator.validate_file("/path/to/products.csv") do
      :ok -> IO.puts("File is valid")
      {:error, reason} -> IO.puts("Validation failed: #{reason}")
    end

    # Validation with custom required columns
    CSVValidator.validate_headers("/path/to/products.csv", ["Handle", "Title", "Price"])

    # Full validation report
    report = CSVValidator.get_validation_report("/path/to/products.csv")
    # => %{
    #   valid: true,
    #   file_path: "/path/to/products.csv",
    #   headers: ["Handle", "Title", ...],
    #   row_count: 1234,
    #   warnings: ["Some rows have empty Handle values"]
    # }

# `extract_headers`
[🔗](https://github.com/BeamLabEU/phoenix_kit/blob/v1.7.63/lib/modules/shop/import/csv_validator.ex#L142)

Extracts headers from a CSV file.

Returns `{:ok, headers}` or `{:error, reason}`.

# `get_validation_report`
[🔗](https://github.com/BeamLabEU/phoenix_kit/blob/v1.7.63/lib/modules/shop/import/csv_validator.ex#L100)

Returns a comprehensive validation report.

## Report Structure

    %{
      valid: boolean,
      file_path: string,
      file_size: integer,
      headers: list | nil,
      row_count: integer | nil,
      missing_columns: list,
      warnings: list,
      error: string | nil
    }

# `validate_file`
[🔗](https://github.com/BeamLabEU/phoenix_kit/blob/v1.7.63/lib/modules/shop/import/csv_validator.ex#L48)

Validates that a file exists, is readable, and has valid CSV format.

Returns `:ok` or `{:error, reason}`.

# `validate_headers`
[🔗](https://github.com/BeamLabEU/phoenix_kit/blob/v1.7.63/lib/modules/shop/import/csv_validator.ex#L62)

Extracts and validates CSV headers against required columns.

Uses default required columns: ["Handle", "Title", "Variant Price"]

Returns `{:ok, headers}` or `{:error, reason}`.

# `validate_headers`
[🔗](https://github.com/BeamLabEU/phoenix_kit/blob/v1.7.63/lib/modules/shop/import/csv_validator.ex#L71)

Extracts and validates CSV headers against custom required columns.

Returns `{:ok, headers}` or `{:error, {:missing_columns, missing}}`.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
