Add interactive CCS case practice
This commit is contained in:
@@ -0,0 +1,258 @@
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
|
||||
namespace QuestionsApi.Models;
|
||||
|
||||
public static class CcsAttemptStates
|
||||
{
|
||||
public const string Active = "active";
|
||||
public const string FinalOrders = "final_orders";
|
||||
public const string Completed = "completed";
|
||||
public const string Abandoned = "abandoned";
|
||||
}
|
||||
|
||||
public static class CcsAttemptModes
|
||||
{
|
||||
public const string Practice = "practice";
|
||||
public const string Timed = "timed";
|
||||
}
|
||||
|
||||
public class CcsOrderDefinition
|
||||
{
|
||||
[BsonId] public string Code { get; set; } = "";
|
||||
public string CanonicalName { get; set; } = "";
|
||||
public string Category { get; set; } = "";
|
||||
public List<string> Aliases { get; set; } = [];
|
||||
public int DefaultTurnaroundMinutes { get; set; }
|
||||
public List<string> AvailableLocations { get; set; } = [];
|
||||
public DateTime UpdatedUtc { get; set; } = DateTime.UtcNow;
|
||||
}
|
||||
|
||||
public class CcsCaseRevision
|
||||
{
|
||||
[BsonId, BsonRepresentation(BsonType.ObjectId)] public string? Id { get; set; }
|
||||
public string ExternalId { get; set; } = "";
|
||||
public int Version { get; set; } = 1;
|
||||
public bool IsCurrent { get; set; } = true;
|
||||
public bool IsPublished { get; set; }
|
||||
public string Title { get; set; } = "";
|
||||
public string System { get; set; } = "";
|
||||
public string PresentingLocation { get; set; } = "";
|
||||
public int RealTimeMinutes { get; set; } = 20;
|
||||
public int Difficulty { get; set; } = 2;
|
||||
public List<string> Tags { get; set; } = [];
|
||||
public CcsInitialChart InitialChart { get; set; } = new();
|
||||
public List<string> AllowedLocations { get; set; } = [];
|
||||
public List<CcsExamDefinition> Exams { get; set; } = [];
|
||||
public List<CcsCaseOrderDefinition> OrderResponses { get; set; } = [];
|
||||
public List<CcsCaseEvent> Events { get; set; } = [];
|
||||
public List<CcsScoringCriterion> ScoringCriteria { get; set; } = [];
|
||||
public List<QuestionReference> References { get; set; } = [];
|
||||
public DateTime CreatedUtc { get; set; } = DateTime.UtcNow;
|
||||
}
|
||||
|
||||
public class CcsInitialChart
|
||||
{
|
||||
public string PatientSummary { get; set; } = "";
|
||||
public string ReasonForEncounter { get; set; } = "";
|
||||
public string Appearance { get; set; } = "";
|
||||
public string History { get; set; } = "";
|
||||
public Dictionary<string, string> Vitals { get; set; } = [];
|
||||
public DateTime SimulatedStartUtc { get; set; } = DateTime.UtcNow;
|
||||
public List<string> InitialOrderCodes { get; set; } = [];
|
||||
}
|
||||
|
||||
public class CcsExamDefinition
|
||||
{
|
||||
public string Code { get; set; } = "";
|
||||
public string Name { get; set; } = "";
|
||||
public int DurationMinutes { get; set; } = 1;
|
||||
public string Finding { get; set; } = "";
|
||||
}
|
||||
|
||||
public class CcsCaseOrderDefinition
|
||||
{
|
||||
public string OrderCode { get; set; } = "";
|
||||
public int? TurnaroundMinutes { get; set; }
|
||||
public string Result { get; set; } = "";
|
||||
public Dictionary<string, string> VitalPatches { get; set; } = [];
|
||||
}
|
||||
|
||||
public class CcsCaseEvent
|
||||
{
|
||||
public string Id { get; set; } = "";
|
||||
public int TriggerMinute { get; set; }
|
||||
public List<string> RequiresOrderCodes { get; set; } = [];
|
||||
public List<string> RequiresAnyOrderCodes { get; set; } = [];
|
||||
public string Message { get; set; } = "";
|
||||
public Dictionary<string, string> VitalPatches { get; set; } = [];
|
||||
public bool EndCase { get; set; }
|
||||
}
|
||||
|
||||
public class CcsScoringCriterion
|
||||
{
|
||||
public string Id { get; set; } = "";
|
||||
public string ActionType { get; set; } = "order";
|
||||
public string TargetCode { get; set; } = "";
|
||||
public List<string> TargetCodes { get; set; } = [];
|
||||
public int Points { get; set; }
|
||||
public int? EarliestMinute { get; set; }
|
||||
public int? LatestMinute { get; set; }
|
||||
public string AfterTargetCode { get; set; } = "";
|
||||
public string Rationale { get; set; } = "";
|
||||
}
|
||||
|
||||
public class CcsAttempt
|
||||
{
|
||||
[BsonId, BsonRepresentation(BsonType.ObjectId)] public string? Id { get; set; }
|
||||
public string UserId { get; set; } = "";
|
||||
public string CaseExternalId { get; set; } = "";
|
||||
[BsonRepresentation(BsonType.ObjectId)] public string CaseRevisionId { get; set; } = "";
|
||||
public int CaseVersion { get; set; }
|
||||
public string Mode { get; set; } = CcsAttemptModes.Practice;
|
||||
public string State { get; set; } = CcsAttemptStates.Active;
|
||||
public int Revision { get; set; }
|
||||
public int SimulatedMinute { get; set; }
|
||||
public string Location { get; set; } = "";
|
||||
public Dictionary<string, string> CurrentVitals { get; set; } = [];
|
||||
public List<CcsAttemptAction> Actions { get; set; } = [];
|
||||
public List<CcsPendingResult> PendingResults { get; set; } = [];
|
||||
public List<CcsChartEntry> Chart { get; set; } = [];
|
||||
public List<string> ActiveOrderCodes { get; set; } = [];
|
||||
public List<string> ProcessedEventIds { get; set; } = [];
|
||||
public List<string> ProcessedCommandIds { get; set; } = [];
|
||||
public DateTime? DeadlineUtc { get; set; }
|
||||
public DateTime? FinalOrdersDeadlineUtc { get; set; }
|
||||
public DateTime CreatedUtc { get; set; } = DateTime.UtcNow;
|
||||
public DateTime UpdatedUtc { get; set; } = DateTime.UtcNow;
|
||||
public DateTime? CompletedUtc { get; set; }
|
||||
public CcsCaseScore? Score { get; set; }
|
||||
}
|
||||
|
||||
public class CcsAttemptAction
|
||||
{
|
||||
public string Type { get; set; } = "";
|
||||
public string Code { get; set; } = "";
|
||||
public int SimulatedMinute { get; set; }
|
||||
public DateTime RealUtc { get; set; } = DateTime.UtcNow;
|
||||
}
|
||||
|
||||
public class CcsPendingResult
|
||||
{
|
||||
public string OrderCode { get; set; } = "";
|
||||
public int DueMinute { get; set; }
|
||||
public string Result { get; set; } = "";
|
||||
public Dictionary<string, string> VitalPatches { get; set; } = [];
|
||||
}
|
||||
|
||||
public class CcsChartEntry
|
||||
{
|
||||
public string Category { get; set; } = "progress";
|
||||
public int SimulatedMinute { get; set; }
|
||||
public string Text { get; set; } = "";
|
||||
}
|
||||
|
||||
public class CcsCaseScore
|
||||
{
|
||||
public double Percent { get; set; }
|
||||
public int EarnedPoints { get; set; }
|
||||
public int PossiblePoints { get; set; }
|
||||
public List<CcsCriterionResult> Criteria { get; set; } = [];
|
||||
}
|
||||
|
||||
public class CcsCriterionResult
|
||||
{
|
||||
public string CriterionId { get; set; } = "";
|
||||
public string Status { get; set; } = "missed";
|
||||
public int Points { get; set; }
|
||||
public string Rationale { get; set; } = "";
|
||||
}
|
||||
|
||||
public class CcsImportRequest
|
||||
{
|
||||
public List<CcsOrderDefinition> Orders { get; set; } = [];
|
||||
public List<CcsCaseRevision> Cases { get; set; } = [];
|
||||
public bool ValidateOnly { get; set; }
|
||||
}
|
||||
|
||||
public class CcsImportResponse
|
||||
{
|
||||
public int OrdersUpserted { get; set; }
|
||||
public int CasesCreated { get; set; }
|
||||
public List<string> Errors { get; set; } = [];
|
||||
}
|
||||
|
||||
public class CreateCcsAttemptRequest
|
||||
{
|
||||
public string CaseExternalId { get; set; } = "";
|
||||
public string Mode { get; set; } = CcsAttemptModes.Practice;
|
||||
}
|
||||
|
||||
public class CcsCommandRequest
|
||||
{
|
||||
public string CommandId { get; set; } = "";
|
||||
public int ExpectedRevision { get; set; }
|
||||
public string Type { get; set; } = "";
|
||||
public string Code { get; set; } = "";
|
||||
public int Minutes { get; set; }
|
||||
}
|
||||
|
||||
public class CcsCaseSummary
|
||||
{
|
||||
public string ExternalId { get; set; } = "";
|
||||
public string Title { get; set; } = "";
|
||||
public string System { get; set; } = "";
|
||||
public string PresentingLocation { get; set; } = "";
|
||||
public int RealTimeMinutes { get; set; }
|
||||
public int Difficulty { get; set; }
|
||||
public List<string> Tags { get; set; } = [];
|
||||
}
|
||||
|
||||
public class CcsAttemptResponse
|
||||
{
|
||||
public string Id { get; set; } = "";
|
||||
public string CaseExternalId { get; set; } = "";
|
||||
public string CaseTitle { get; set; } = "";
|
||||
public string Mode { get; set; } = "";
|
||||
public string State { get; set; } = "";
|
||||
public int Revision { get; set; }
|
||||
public int SimulatedMinute { get; set; }
|
||||
public string Location { get; set; } = "";
|
||||
public DateTime? DeadlineUtc { get; set; }
|
||||
public DateTime? FinalOrdersDeadlineUtc { get; set; }
|
||||
public string PatientSummary { get; set; } = "";
|
||||
public string ReasonForEncounter { get; set; } = "";
|
||||
public string Appearance { get; set; } = "";
|
||||
public string History { get; set; } = "";
|
||||
public Dictionary<string, string> Vitals { get; set; } = [];
|
||||
public List<CcsChartEntry> Chart { get; set; } = [];
|
||||
public List<string> ActiveOrderCodes { get; set; } = [];
|
||||
public List<CcsPendingResult> PendingResults { get; set; } = [];
|
||||
public List<CcsExamDefinition> AvailableExams { get; set; } = [];
|
||||
public List<string> AllowedLocations { get; set; } = [];
|
||||
public CcsCaseScore? Score { get; set; }
|
||||
public List<QuestionReference> References { get; set; } = [];
|
||||
}
|
||||
|
||||
public class CcsHistoryItem
|
||||
{
|
||||
public string Id { get; set; } = "";
|
||||
public string CaseExternalId { get; set; } = "";
|
||||
public string CaseTitle { get; set; } = "";
|
||||
public string Mode { get; set; } = "";
|
||||
public string State { get; set; } = "";
|
||||
public double? Score { get; set; }
|
||||
public DateTime CreatedUtc { get; set; }
|
||||
}
|
||||
|
||||
public class CcsPredictionResponse
|
||||
{
|
||||
public double? CcsScore { get; set; }
|
||||
public int ContributingCases { get; set; }
|
||||
public int? McqPredictedScore { get; set; }
|
||||
public int? CombinedPredictedScore { get; set; }
|
||||
public int? RangeLow { get; set; }
|
||||
public int? RangeHigh { get; set; }
|
||||
public string ModelVersion { get; set; } = "combined-ccs-1";
|
||||
public bool IsProvisional { get; set; } = true;
|
||||
}
|
||||
Reference in New Issue
Block a user