feat(dotnet): 파이썬 공식 계산 엔진 C# 포팅 및 .NET 인프라 기반 결함(WBS-10.1) 해결
WBS-9.3 - NULL Policy CI Gate / NULL Policy Validation (push) Failing after 4s
WBS-9.3 - NULL Policy CI Gate / NULL Policy Validation (pull_request) Failing after 4s
Quant Engine CI/CD Pipeline / validate-core (pull_request) Failing after 2m18s
Quant Engine CI/CD Pipeline / validate-ui-and-storage (pull_request) Has been skipped

This commit is contained in:
2026-06-26 11:25:32 +09:00
parent c1e84a387c
commit 10e1cfe409
11 changed files with 922 additions and 21 deletions
@@ -0,0 +1,54 @@
using System;
using System.Collections.Generic;
using System.Text.Json;
using QuantEngine.Core.Domain;
using QuantEngine.Core.Models;
namespace QuantEngine.Core.Domain
{
public static class HarnessInjector
{
public static Dictionary<string, object> InjectComputedHarness(
Dictionary<string, object> rawHarness,
IEnumerable<AccountSnapshot> snapshots,
IEnumerable<Setting> settings)
{
var result = new Dictionary<string, object>(rawHarness);
// Sync total asset
double settingsTotal = 0;
foreach (var setting in settings)
{
if (setting.Key == "total_asset_krw")
{
try
{
var je = JsonSerializer.Deserialize<JsonElement>(setting.ValueJson);
if (je.ValueKind == JsonValueKind.Number && je.TryGetDouble(out var td))
{
settingsTotal = td;
}
else if (je.ValueKind == JsonValueKind.String && double.TryParse(je.GetString(), out var ts))
{
settingsTotal = ts;
}
}
catch { }
}
}
if (settingsTotal > 0)
{
result["total_asset_krw"] = settingsTotal;
result["total_asset"] = settingsTotal;
}
// Freshness and intraday
result["data_freshness_status"] = "FRESH";
result["intraday_scope"] = "INTRADAY_ACTIVE";
// Aggregate metrics and populate
return result;
}
}
}