Duplicate SKUs: decide before your import callback
A CSV parser can correctly read two identical SKU strings without deciding which catalogue row should reach your app. That is a business policy, not a parsing error.
Use an original failure fixture
Code,Label,Retail,Units 00123,Mug,12.50,4 00123,Spare,12.50,2 00999,Bag,18,3 00456,Notebook,9.999,1
1. Preserve identities as strings
Keep 00123 distinct from 123. If a spreadsheet already removed zeros, this importer cannot infer them. Map explicit columns and choose whether to retain or trim whitespace.
2. Pick a duplicate policy
Reject-all rejects both 00123 rows. Keep-first selects Mug; keep-last selects Spare. First/last selection happens before field validation, so an invalid chosen row is not silently replaced.
3. Review validation separately
9.999 is rejected by this two-decimal catalogue policy. Correct it to 9.99 only if that is the intended price, then review again. Do not silently round money.
4. Acknowledge partial results
Under reject-all, one row is accepted and three are rejected. The UI requires explicit acknowledgement before handing off only the accepted row. The host callback owns persistence.
5. Validate on your server
A browser receipt is not authorization. Revalidate fields, verify permissions and use your own transactional/idempotent write flow. This kit performs no database operation.