## Context

`EmployeeController::import` preloads all positions grouped by trimmed name and filters the group of a row by the company scope and the "Phòng ban" name. Previously, any result with more than one position failed as `position_ambiguous`, and a company name matching several companies failed as `company_ambiguous`. Department and company names are not unique.

## Goals / Non-Goals

**Goals:**
- Never reject a row that the file cannot describe more precisely.
- Tell the admin which column to fill when filling it would resolve the ambiguity.

**Non-Goals:**
- Making department or company names unique.
- Case-insensitive or accent-insensitive name matching.

## Decisions

### D1. Decide by distinct names, not by the count of matches
After filtering, count the distinct trimmed department names and company names of the remaining positions:
1. 0 positions remain → `position_not_found`.
2. "Phòng ban" is blank and more than one distinct department name remains → `position_ambiguous` ("vui lòng điền Phòng ban").
3. No company scope (`all` mode, blank "Công ty") and more than one distinct company name remains → `position_ambiguous` ("vui lòng điền Công ty").
4. Otherwise, take the first position.

This applies the order "position → department → company → first". Filling a column only helps when the names in that column differ, so the error is raised only in that case.

*Alternative considered:* rejecting whenever more than one position remains. This was the previous behaviour. It blocked rows that no file content could resolve.

### D2. Stable "first"
Positions are loaded with `orderBy('id')`, so "first" is the lowest id. The result does not depend on DB row order.

### D3. Companies with the same name are all kept
In `all` mode, "Công ty" maps to every company with that name. `company_ambiguous` is removed, because identical company names are already handled by D1 step 4.

## Risks / Trade-offs

- [The admin may expect a specific one of two identical positions] → It is not possible to tell them apart from the file. The lowest id is predictable, and the admin can change the position after import.
- [Removing the `company_ambiguous` code] → The frontend must not depend on it. It only displays `message`.
