public async Task <JourneyViewModel> Build(JourneyViewModel model, QuestionWithAnswers nextNode)
        {
            model.ProgressState();

            model.Journey.Steps.Add(model.ToStep());

            if (!string.IsNullOrEmpty(nextNode.NonQuestionKeywords))
            {
                model.Journey.Steps.Last().Answer.Keywords += "|" + nextNode.NonQuestionKeywords;
            }
            if (!string.IsNullOrEmpty(nextNode.NonQuestionExcludeKeywords))
            {
                model.Journey.Steps.Last().Answer.ExcludeKeywords += "|" + nextNode.NonQuestionExcludeKeywords;
            }
            model.JourneyJson = JsonConvert.SerializeObject(model.Journey);

            var answer = JsonConvert.DeserializeObject <Answer>(model.SelectedAnswer);

            _symptomDiscriminatorCollector.Collect(nextNode, model);
            model = _keywordCollector.Collect(answer, model);

            model = _mappingEngine.Mapper.Map(nextNode, model);

            switch (model.NodeType)
            {
            case NodeType.Outcome:
                var outcome = _mappingEngine.Mapper.Map <OutcomeViewModel>(model);
                return(await _outcomeViewModelBuilder.DispositionBuilder(outcome));

            case NodeType.Pathway:
                var jtbs = _mappingEngine.Mapper.Map <JustToBeSafeViewModel>(model);
                return((await _justToBeSafeFirstViewModelBuilder.JustToBeSafeFirstBuilder(jtbs)).Item2);    //todo refactor tuple away

            case NodeType.DeadEndJump:
                var deadEndJump = _mappingEngine.Mapper.Map <OutcomeViewModel>(model);
                return(await _outcomeViewModelBuilder.DeadEndJumpBuilder(deadEndJump));

            case NodeType.PathwaySelectionJump:
                var pathwaySelectionJump = _mappingEngine.Mapper.Map <OutcomeViewModel>(model);
                return(await _outcomeViewModelBuilder.PathwaySelectionJumpBuilder(pathwaySelectionJump));
            }

            return(model);
        }