public long ProvideNewReference(long prevValue, bool failIfMissing = false)
        {
            if (_references.TryGetValue(prevValue, out long newValue))
            {
                return(newValue);
            }

            if (failIfMissing)
            {
                throw new ApplicationException($"Failed to find existing new learner reference for {prevValue}");
            }

            // Find next valid ULN
            newValue = -1;
            while (newValue < 0)
            {
                newValue = ULN(++_ulnGeneratorCount);
            }

            _references.Add(prevValue, newValue);

            var logEntry = new AnonymiseLogEntry {
                FieldName = "ULN", OldValue = prevValue.ToString(), NewValue = newValue.ToString()
            };

            _anonymiseLog.Add(logEntry);

            return(newValue);
        }
        public string ProvideNewReference(string prevValue, bool failIfMissing = false)
        {
            if (_references.TryGetValue(prevValue, out string newValue))
            {
                return(newValue);
            }

            if (failIfMissing)
            {
                throw new ApplicationException($"Failed to find existing new learner reference for {prevValue}");
            }

            newValue = $"{++_lrnGeneratorCount}";

            _references.Add(prevValue, newValue);

            var logEntry = new AnonymiseLogEntry {
                FieldName = "LearnRefNumber", OldValue = prevValue, NewValue = newValue
            };

            _anonymiseLog.Add(logEntry);

            return(newValue);
        }