target => label */ public function allowedTargets(): array; /** * @return array */ public function requiredTargets(): array; /** * @return array> target => aliases */ public function autoMapAliases(): array; public function supportsAssignments(): bool; public function requiresAssignmentPermission(): bool; /** * @param array $mapped * @param array $context * @return array{ok:bool, normalized:array, errors:array} */ public function validateMappedRow(array $mapped, array $context): array; /** * @param array $normalized * @param array $context * @return array{status:string, code?:string, message?:string} */ public function dryRunRow(array $normalized, array $context): array; /** * @param array $normalized * @param array $context * @return array{status:string, code?:string, message?:string, uuid?:string} */ public function commitRow(array $normalized, array $context): array; /** * Returns a deterministic key for in-file duplicate detection. * Return null when duplicate detection is not required for this row. * * @param array $normalized */ public function inFileDuplicateKey(array $normalized): ?string; /** * @param array $normalized */ public function rowIdentifier(array $normalized): string; }