@model UserResponsesViewModel @{ ViewData["Title"] = "User Response Details"; var totalResponses = Model.Responses.Count(); var totalQuestions = Model.Responses.Sum(r => r.ResponseDetails.Count); var totalAnswered = Model.Responses.Sum(r => r.ResponseDetails.Count(d => d.Status == ResponseStatus.Answered)); var totalSkipped = Model.Responses.Sum(r => r.ResponseDetails.Count(d => d.Status == ResponseStatus.Skipped)); var totalShown = Model.Responses.Sum(r => r.ResponseDetails.Count(d => d.Status == ResponseStatus.Shown)); var completionRate = totalQuestions > 0 ? Math.Round((double)totalAnswered / totalQuestions * 100, 1) : 0; var uniqueSurveys = Model.Responses.Select(r => r.Questionnaire?.Title).Distinct().Count(); var latestDate = Model.Responses.Any() ? Model.Responses.Max(r => r.SubmissionDate).ToString("MMM dd, yyyy") : "—"; } @section Styles { }
@(Model.UserName?.Substring(0, 1).ToUpper() ?? "U")

@Model.UserName

@Model.UserEmail
@totalResponses Response@(totalResponses != 1 ? "s" : "") · Last: @latestDate
@totalResponsesSurveys
@totalQuestionsQuestions
@completionRate%Completion
@totalSkippedSkipped
@totalShownUnanswered
ANALYZING WELLNESS TRAJECTORY
Claude AI is processing survey responses, detecting emotional patterns, and generating clinical insights...
1
Collecting
2
AI Analysis
3
Risk Score
4
Report
@if (Model.Responses.Any()) {
Response History @totalResponses ENTRIES
@foreach (var response in Model.Responses.Select((r, i) => new { Response = r, Index = i })) { var rAnswered = response.Response.ResponseDetails.Count(d => d.Status == ResponseStatus.Answered); var rTotal = response.Response.ResponseDetails.Count; var rPct = rTotal > 0 ? Math.Round((double)rAnswered / rTotal * 100) : 0;
@(response.Index + 1) @response.Response.Questionnaire.Title @response.Response.SubmissionDate.ToString("MMM dd, yyyy HH:mm") @rTotal questions
@(rPct)%
PDF Excel
@foreach (var question in response.Response.Questionnaire.Questions.OrderBy(q => q.Id)) { var rd = response.Response.ResponseDetails.FirstOrDefault(d => d.QuestionId == question.Id); }
QuestionStatusResponse
@question.Text
@question.Type
@if (rd != null) { switch (rd.Status) { case ResponseStatus.Answered:
Answered
break; case ResponseStatus.Shown:
Shown
Not answered
break; case ResponseStatus.Skipped:
Skipped
if (!string.IsNullOrEmpty(rd.SkipReason)) {
@rd.SkipReason
} break; } } else {
No data
}
@if (rd != null && rd.Status == ResponseStatus.Answered) { if (rd.QuestionType == QuestionType.Text || rd.QuestionType == QuestionType.Open_ended || rd.QuestionType == QuestionType.Slider) {
@rd.TextResponse
} else if (rd.ResponseAnswers.Any()) {
@foreach (var ra in rd.ResponseAnswers) { var ans = question.Answers.FirstOrDefault(a => a.Id == ra.AnswerId); @ans?.Text @if (ans?.IsOtherOption == true) { Other } }
} if (!string.IsNullOrEmpty(rd.OtherText)) {
Custom Response:
@rd.OtherText
} } else {
No response
}
} } else {

No Responses Yet

This user hasn't submitted any survey responses.

}
@section Scripts { }