feature: Simulator Scenarios + Clinical Validation: SOFA/GCS

This commit is contained in:
voltsrage
2026-06-21 04:55:39 +08:00
parent bf46e6554a
commit 3638dd0669
39 changed files with 1619 additions and 213 deletions
@@ -11,13 +11,11 @@ public class GcsController : ControllerBase
[HttpGet]
[ProducesResponseType(typeof(ApiResponse<GcsScoreResponse>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ApiResponse<object>), StatusCodes.Status404NotFound)]
public async Task<IActionResult> Current(Guid encounterId)
{
var score = await _gcs.GetCurrentAsync(encounterId);
if (score is null)
return NotFound(ApiResponse<object>.Fail(
404, "No GCS score computed for this encounter.", "NO_GCS_SCORE"));
return Ok(ApiResponse<GcsScoreResponse?>.Ok(null));
return Ok(ApiResponse<GcsScoreResponse>.Ok(new GcsScoreResponse(
score.EyeScore, score.VerbalScore, score.MotorScore,
@@ -18,12 +18,11 @@ public class News2Controller : ControllerBase
/// </summary>
[HttpGet("current")]
[ProducesResponseType(typeof(ApiResponse<News2Score>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ApiResponse<object>), StatusCodes.Status404NotFound)]
public async Task<IActionResult> Current(Guid encounterId)
{
var score = await _news2.GetCurrentAsync(encounterId);
if (score is null)
return NotFound(ApiResponse<object>.Fail(404, "No NEWS2 score computed for this encounter.", "NO_NEWS2_SCORE"));
return Ok(ApiResponse<News2Score?>.Ok(null));
return Ok(ApiResponse<News2Score>.Ok(score));
}
@@ -17,12 +17,11 @@ public class SepsisBundlesController : ControllerBase
/// <param name="encounterId">Encounter id.</param>
[HttpGet("api/v1/encounters/{encounterId:guid}/sepsis-bundle/current")]
[ProducesResponseType(typeof(ApiResponse<SepsisBundle>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ApiResponse<object>), StatusCodes.Status404NotFound)]
public async Task<IActionResult> GetCurrentByEncounter(Guid encounterId)
{
var bundle = await _bundles.GetCurrentByEncounterAsync(encounterId);
if (bundle is null)
return NotFound(ApiResponse<object>.Fail(404, "No sepsis bundle exists for this encounter.", "BUNDLE_NOT_FOUND"));
return Ok(ApiResponse<SepsisBundle?>.Ok(null));
return Ok(ApiResponse<SepsisBundle>.Ok(bundle));
}
@@ -12,13 +12,11 @@ public class SofaController : ControllerBase
[HttpGet]
[ProducesResponseType(typeof(ApiResponse<SofaScoreResponse>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ApiResponse<object>), StatusCodes.Status404NotFound)]
public async Task<IActionResult> Current(Guid encounterId)
{
var score = await _sofa.GetCurrentAsync(encounterId);
if (score is null)
return NotFound(ApiResponse<object>.Fail(
404, "No SOFA score computed for this encounter.", "NO_SOFA_SCORE"));
return Ok(ApiResponse<SofaScoreResponse?>.Ok(null));
return Ok(ApiResponse<SofaScoreResponse>.Ok(MapResponse(score)));
}