#!/usr/bin/env bash set -euo pipefail # Default demo backend URL. Override with: # BASE_URL=http://localhost:8080 ./scripts/demo-registration/registration-tool-flow.sh BASE_URL="${BASE_URL:-http://localhost:8080}" PROJECT_ID="${PROJECT_ID:-demo-registration}" TRACE_ID="${TRACE_ID:-trace-demo-registration-$(date +%Y%m%d%H%M%S)}" PATIENT_ID="${PATIENT_ID:-patient_demo_001}" PATIENT_PHONE="${PATIENT_PHONE:-13800000001}" PATIENT_ID_CARD="${PATIENT_ID_CARD:-110101199001010011}" PATIENT_NAME="${PATIENT_NAME:-张三}" DEPARTMENT_ID="${DEPARTMENT_ID:-dept_neurology}" DOCTOR_ID="${DOCTOR_ID:-doctor_neuro_001}" SCHEDULE_ID="${SCHEDULE_ID:-schedule_neuro_001_d1_am}" SCHEDULE_DATE="${SCHEDULE_DATE:-}" LOCK_ID="${LOCK_ID:-}" ORDER_ID="${ORDER_ID:-}" has_jq=false if command -v jq >/dev/null 2>&1; then has_jq=true fi json_quote() { if [ "$has_jq" = true ]; then jq -Rn --arg value "$1" '$value' return fi printf '"%s"' "$(printf '%s' "$1" | sed 's/\\/\\\\/g; s/"/\\"/g')" } extract_json_string() { local json="$1" local filter="$2" if [ "$has_jq" = false ]; then return 1 fi printf '%s' "$json" | jq -er "$filter // empty" } request_body() { local tool_call_id="$1" local risk_level="$2" local input_json="$3" cat <&2 echo "POST ${BASE_URL}/tools/${tool_name}/invoke" >&2 if [ -n "$idempotency_key" ]; then echo "X-Emoon-Idempotency-Key: ${idempotency_key}" >&2 fi echo "Expected markers: mock=true, status=success" >&2 case "$tool_name" in payment.*) echo "Expected payment marker: mockPayment=true" >&2 ;; esac if [ -n "$idempotency_key" ]; then curl -sS \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "X-Emoon-Idempotency-Key: ${idempotency_key}" \ -d "$body" \ "${BASE_URL}/tools/${tool_name}/invoke" else curl -sS \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d "$body" \ "${BASE_URL}/tools/${tool_name}/invoke" fi echo >&2 } require_dynamic_id() { local name="$1" local value="$2" local hint="$3" if [ -n "$value" ]; then return fi cat >&2 <