Luna HR Docs

Data Import

This guide covers the technical details of Luna HR's CSV import — field specifications, mapping rules, and how to handle common issues.

For a general overview, see Importing Data.

Import process

  1. Select data type — employees, leave, expenses, assets, or training
  2. Upload CSV — drag and drop or click to browse
  3. Map columns — match your CSV headers to Luna HR fields
  4. Preview — review each row with validation feedback
  5. Import — create the records

Field specifications

Employee fields

| Field | Required | Format | Notes | |-------|----------|--------|-------| | First name | Yes | Text | | | Last name | Yes | Text | | | Email | Yes | Email | Must be unique | | Job title | No | Text | | | Department | No | Text | Must match an existing org node name | | Role | No | Text | Must match an existing role name | | Line manager | No | Text | Match by email or full name | | Start date | No | Date | YYYY-MM-DD or DD/MM/YYYY | | Employment type | No | Text | full-time, part-time, contractor, intern | | Working pattern | No | Text | Must match an existing pattern name |

Leave fields

| Field | Required | Format | Notes | |-------|----------|--------|-------| | Employee | Yes | Text | Match by email or full name | | Leave type | Yes | Text | Must match an existing leave type | | Start date | Yes | Date | | | End date | Yes | Date | | | Days | No | Number | Calculated automatically if omitted | | Status | Yes | Text | approved, pending, rejected, cancelled, taken | | Notes | No | Text | |

Expense fields

| Field | Required | Format | Notes | |-------|----------|--------|-------| | Employee | Yes | Text | Match by email or full name | | Expense date | Yes | Date | | | Category | Yes | Text | Must match an existing expense category | | Amount | Yes | Number | Currency symbols and commas are stripped automatically | | Status | Yes | Text | draft, submitted, approved, rejected, paid | | Report title | No | Text | Items with same employee + title are grouped into one report | | Description | No | Text | | | Currency | No | Text | Defaults to GBP | | Tax rate | No | Number | Percentage (e.g. 20 for 20%) | | Payment reference | No | Text | | | Payment method | No | Text | bank_transfer, payroll, petty_cash |

Asset fields

| Field | Required | Format | Notes | |-------|----------|--------|-------| | Name | Yes | Text | | | Asset tag | Yes | Text | Must be unique | | Category | Yes | Text | Must match an existing asset category | | Status | Yes | Text | available, assigned, maintenance, retired, disposed | | Condition | Yes | Text | new, good, fair, poor | | Serial number | No | Text | | | Manufacturer | No | Text | | | Model | No | Text | | | Assigned to | No | Text | Match by email or full name | | Purchase date | No | Date | | | Purchase cost | No | Number | | | Warranty expiry | No | Date | |

Column matching

Luna HR automatically matches common column header names. For example:

  • "Staff Name", "Employee Name", "Name" → Employee
  • "Date", "Receipt Date", "Transaction Date" → Expense Date
  • "Cost", "Total", "Value", "Price" → Amount

If auto-matching doesn't find the right column, you can manually set the mapping in the preview step.

Validation

Before importing, every row is validated:

  • Errors (red) — must be fixed before import. Example: required field missing, employee not found
  • Warnings (amber) — can proceed but may need attention. Example: category not found (will use default)

You can edit rows inline in the preview to fix issues without going back to your CSV.

Tips

  • Create categories first — expense categories, asset categories, and leave types must exist before you import data that references them
  • Match employee names — the import resolves employees by email first, then full name. Ensure your CSV uses the same names as Luna HR
  • Test small — import 10-20 rows first to verify your column mapping
  • Dates — YYYY-MM-DD is preferred. DD/MM/YYYY also works
  • Amounts — currency symbols (GBP, $, EUR) and thousand separators (commas) are handled automatically