Clinical Sync Batch Engine: first commit

This commit is contained in:
voltsrage
2026-06-23 03:02:30 +08:00
parent 90b8baa2a1
commit c9994b1ba2
60 changed files with 3547 additions and 31 deletions
+59
View File
@@ -0,0 +1,59 @@
**`scripts/run-phase22-verification.sh`:**
```bash
#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
cd "$ROOT"
CENTRAL="${CENTRAL_URL:-http://localhost:5080}"
GATEWAY="${GATEWAY_URL:-http://localhost:5081}"
KEY="${GATEWAY_API_KEY:-dev-gateway-key-change-in-production}"
GW_ID="${GATEWAY_ID:-22222222-2222-2222-2222-222222222222}"
JWT="${ADMIN_JWT:?Set ADMIN_JWT}"
echo "==> Run sync batch tests"
dotnet test VigilCareClinicalAPI.Tests --filter "FullyQualifiedName~ClinicalSyncBatch"
echo "==> Start full stack"
docker compose --profile full --profile ward-gateway up -d
sleep 30
echo "==> Stop central API to buffer events on gateway"
# Stop only central API process/container — gateway stack stays up
ENCOUNTER_ID=$(curl -sf "$GATEWAY/api/v1/encounters?status=ACTIVE&department=ICU" \
-H "Authorization: Bearer ${GATEWAY_JWT:?Set GATEWAY_JWT}" | jq -r '.data.items[0].id')
echo "==> Post observations to gateway while central down"
for i in $(seq 1 10); do
curl -sf -X POST "$GATEWAY/api/v1/encounters/$ENCOUNTER_ID/observations" \
-H "Authorization: Bearer $GATEWAY_JWT" \
-H "Content-Type: application/json" \
-d "{\"observationCode\":\"HEART_RATE\",\"value\":$((100+i)),\"unit\":\"bpm\",\"source\":\"DEVICE\",\"recordedAt\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\",\"idempotencyKey\":\"verify-$i\"}" \
> /dev/null
done
echo "==> Restart central and wait for sync"
# Start central API; poll gateway buffer depth → 0
echo "==> Poll batch status"
BATCH_ID=$(curl -sf "$CENTRAL/api/v1/sites/11111111-1111-1111-1111-111111111111/gateways/$GW_ID/sync-history" \
-H "Authorization: Bearer $JWT" | jq -r '.data[0].batchId')
curl -sf "$CENTRAL/api/v1/sync/batches/$BATCH_ID" \
-H "Authorization: Bearer $JWT" | jq -e '.data.status == "APPLIED"'
echo "==> Verify observations on central"
curl -sf "$CENTRAL/api/v1/encounters/$ENCOUNTER_ID/observations" \
-H "Authorization: Bearer $JWT" | jq -e '.data.items | length >= 10'
echo "==> Verify client_alert_id populated"
docker exec -i $(docker ps -qf name=postgres) psql -U postgres -d vigilcare \
-c "SELECT COUNT(*) FROM clinical_alerts WHERE client_alert_id IS NOT NULL;" | grep -v "^-" | grep -v row | awk '{print $1}' | grep -v '^0$'
echo "==> Check no duplicate paging (grep application logs for [PAGE] count)"
echo "Phase 22 verification passed."
```
Make executable: `chmod +x scripts/run-phase22-verification.sh`