public void Synchronize()

in converter/dicom-cast/src/Microsoft.Health.DicomCast.Core/Features/Worker/FhirTransaction/Patient/PatientNameSynchronizer.cs [20:85]


        public void Synchronize(DicomDataset dataset, Patient patient, bool isNewPatient)
        {
            EnsureArg.IsNotNull(dataset, nameof(dataset));
            EnsureArg.IsNotNull(patient, nameof(patient));

            // Refer to PS3.5 6.2 and 6.2.1 for parsing logic.
            if (dataset.TryGetString(DicomTag.PatientName, out string patientName) && patientName != null)
            {
                // Find the existing name.
                HumanName name = patient.Name.FirstOrDefault(name => name.Use == HumanName.NameUse.Usual);

                if (name == null)
                {
                    name = new HumanName()
                    {
                        Use = HumanName.NameUse.Usual,
                    };

                    patient.Name.Add(name);
                }

                string[] parts = patientName.Trim(' ').Split('^');

                name.Family = parts[0];

                var combinedGivenNames = new List<string>();

                if (TryGetNamePart(1, out string[] givenNames))
                {
                    // Given name.
                    combinedGivenNames.AddRange(givenNames);
                }

                if (TryGetNamePart(2, out string[] middleNames))
                {
                    // Middle name.
                    combinedGivenNames.AddRange(middleNames);
                }

                if (TryGetNamePart(3, out string[] prefixes))
                {
                    // Prefix.
                    name.Prefix = prefixes;
                }

                if (TryGetNamePart(4, out string[] suffixes))
                {
                    // Suffix.
                    name.Suffix = suffixes;
                }

                name.Given = combinedGivenNames;

                bool TryGetNamePart(int index, out string[] nameParts)
                {
                    if (parts.Length > index && !string.IsNullOrWhiteSpace(parts[index]))
                    {
                        nameParts = parts[index].Split(' ');
                        return true;
                    }

                    nameParts = null;
                    return false;
                }
            }
        }