Adds CustomerRepository::findDuplicate() which checks for an existing
record with the same customer_type_id and attribute_values before any
write. The update path excludes the current record so saving without
changes does not trigger a false positive. Both the create and edit
forms now display a linked error banner identifying the conflicting
customer by ID and type name.