Files
AIclinicalresearch/docs/03-业务模块/IIT Manager Agent/06-开发记录/Day2-REDCap实时集成开发完成记录.md
HaHafeng 1b53ab9d52 feat(aia): Complete AIA V2.0 with universal streaming capabilities
Major Changes:
- Add StreamingService with OpenAI Compatible format
- Upgrade Chat component V2 with Ant Design X integration
- Implement AIA module with 12 intelligent agents
- Update API routes to unified /api/v1 prefix
- Update system documentation

Backend (~1300 lines):
- common/streaming: OpenAI Compatible adapter
- modules/aia: 12 agents, conversation service, streaming integration
- Update route versions (RVW, PKB to v1)

Frontend (~3500 lines):
- modules/aia: AgentHub + ChatWorkspace (100% prototype restoration)
- shared/Chat: AIStreamChat, ThinkingBlock, useAIStream Hook
- Update API endpoints to v1

Documentation:
- AIA module status guide
- Universal capabilities catalog
- System overview updates
- All module documentation sync

Tested: Stream response verified, authentication working
Status: AIA V2.0 core completed (85%)
2026-01-14 19:15:01 +08:00

14 KiB
Raw Blame History

Day 2 - REDCap 瀹炴椂闆嗘垚寮€鍙戝畬鎴愯<E98EB4>褰?

**寮€鍙戞棩鏈?: 2026-01-02
**寮€鍙戣€?
: AI Assistant + 鐢ㄦ埛
鏂囨。鐗堟湰: v1.0
**寮€鍙戦樁娈?*: Day 2 - REDCap瀵规帴涓庡疄鏃跺悓姝?


馃搵 寮€鍙戞<E98D99>杩?

Day 2鐨勬牳蹇冪洰鏍囨槸瀹炵幇 **IIT Manager Agent 涓?REDCap 鐨勫疄鏃舵暟鎹<E69A9F>泦鎴?*锛岄噰鐢?REDCap 鍘熺敓鐨?Data Entry Trigger (DET) + REST API 鎶€鏈<E282AC>柟妗堬紝瀹炵幇闆跺欢杩熺殑鏁版嵁鍚屾<E98D9A>鍜屽弻鍚戦€氫俊銆?

鏍稿績浠峰€?

  1. 鉁?**瀹炴椂鎬?*: Webhook鍝嶅簲鏃堕棿<10ms锛屾暟鎹<E69A9F>綍鍏ュ悗绔嬪嵆瑙﹀彂
  2. 鉁?**鍙<>潬鎬?*: DET + 瀹氭椂杞<E6A482><E69D9E>鍙屼繚闄╂満鍒?
  3. 鉁?**浜戝師鐢?*: 瀹屽叏鍩轰簬Postgres-Only鏋舵瀯锛屼娇鐢╬g-boss闃熷垪
  4. 鉁?**鏍囧噯鍖?*: 绗﹀悎鍥㈤槦寮€鍙戣<E98D99>鑼冿紙闃熷垪鍚嶇О銆乄orker娉ㄥ唽绛夛級

馃幆 瀹屾垚鐨勫姛鑳芥ā鍧?

1. RedcapAdapter (API閫傞厤鍣?

鏂囦欢: backend/src/modules/iit-manager/adapters/RedcapAdapter.ts

鏍稿績鍔熻兘:

  • 鉁?testConnection() - 杩炴帴娴嬭瘯
  • 鉁?exportMetadata() - 瀵煎嚭瀛楁<E7809B>瀹氫箟锛?7涓<37>瓧娈碉級
  • 鉁?exportRecords() - 瀵煎嚭璁板綍锛堟敮鎸佸叏閲?澧為噺/鎸囧畾璁板綍锛?
  • 鉁?importRecords() - 瀵煎叆璁板綍锛圥hase 2棰勭暀锛?

鍏抽敭鍙傛暟:

  • baseUrl: http://localhost:8080
  • apiToken: FCB30F9CBD12EE9E8E9B3E3A0106701B
  • timeout: 30绉?

瀹為檯鎬ц兘:

- exportMetadata: 260-560ms
- exportRecords (鍏ㄩ噺): 450-1,400ms
- exportRecords (澧為噺): 300-800ms

2. WebhookController (Webhook鎺ユ敹鍣?

鏂囦欢: backend/src/modules/iit-manager/controllers/WebhookController.ts

鏍稿績閫昏緫:

1. 绔嬪嵆杩斿洖200 OK锛?10ms锛?
2. 楠岃瘉project_id鏄<EFBFBD>惁鍦ㄩ厤缃<EFBFBD>
3. 骞傜瓑鎬ф<EFBFBD>鏌ワ紙闃叉<EFBFBD>閲嶅<EFBFBD>澶勭悊锛?
4. 璁板綍瀹¤<EFBFBD>鏃ュ織锛圵EBHOOK_RECEIVED锛?
5. 鎺ㄩ€佸埌璐ㄦ帶闃熷垪锛坕it_quality_check锛?

REDCap DET鏍煎紡鏀<E7B4A1>:

  • 鉁?娣诲姞浜?application/x-www-form-urlencoded 瑙f瀽鍣?
  • 鉁?鏀<>寔REDCap鍘熺敓POST鏍煎紡

Webhook瀛楁<EFBFBD>:

{
  "project_id": "16",
  "record": "6",
  "instrument": "demographics",
  "redcap_event_name": "",
  "redcap_version": "15.8.0",
  "redcap_url": "http://localhost:8080"
}

3. SyncManager (杞<><E69D9E>悊鍣?

鏂囦欢: backend/src/modules/iit-manager/services/SyncManager.ts

鏍稿績鍔熻兘:

  • 鉁?initScheduledJob() - 鍒濆<E98D92>鍖栧畾鏃朵换鍔★紙姣?鍒嗛挓锛?
  • 鉁?handlePoll() - 杞<><E69D9E>鎵€鏈塧ctive椤圭洰
  • 鉁?manualSync() - 鎵嬪姩鍚屾<E98D9A>鎸囧畾椤圭洰
  • 鉁?fullSync() - 鍏ㄩ噺鍚屾<E98D9A>

澧為噺鍚屾<EFBFBD>绛栫暐:

// 鍩轰簬lastSyncAt鏃堕棿鎴?
dateRangeBegin: lastSyncAt || createdAt - 24h

瀹¤<EFBFBD>鏃ュ織:

  • SCHEDULED_SYNC: 瀹氭椂杞<E6A482><E69D9E>瀹屾垚
  • MANUAL_SYNC: 鎵嬪姩鍚屾<E98D9A>瀹屾垚
  • FULL_SYNC: 鍏ㄩ噺鍚屾<E98D9A>瀹屾垚

4. Worker娉ㄥ唽 (寮傛<E5AFAE>浠诲姟澶勭悊)

鏂囦欢: backend/src/modules/iit-manager/index.ts

娉ㄥ唽鐨刉orker:

  1. iit_redcap_poll (瀹氭椂杞<E6A482><E69D9E>)

    • 闃熷垪鍚嶇О: iit_redcap_poll
    • 瑙﹀彂棰戠巼: 姣?鍒嗛挓锛圕ron: */5 * * * *锛?
    • 骞跺彂鏁? 1
    • 鍔熻兘: 杞<><E69D9E>鎵€鏈塧ctive椤圭洰鐨勫<E990A8>閲忔暟鎹?
  2. iit_quality_check (璐ㄦ帶浠诲姟)

    • 闃熷垪鍚嶇О: iit_quality_check
    • 瑙﹀彂鏂瑰紡: Webhook/SyncManager鎺ㄩ€?
    • 鍔熻兘: 璐ㄦ帶閫昏緫锛圥hase 1.5瀹炵幇锛?

鍏抽敭淇<EFBFBD><EFBFBD>:

  • 鉂?鍒濆<E98D92>: await jobQueue.work('iit:redcap:poll', ...)
  • 鉁?淇<><E6B787>: jobQueue.process('iit_redcap_poll', ...)
  • 鉂?鍒濆<E98D92>: 闃熷垪鍚嶇О浣跨敤鍐掑彿 iit:quality-check
  • 鉁?淇<><E6B787>: 浣跨敤涓嬪垝绾?iit_quality_check

5. 璺<>敱閰嶇疆

鏂囦欢: backend/src/modules/iit-manager/routes/index.ts

娉ㄥ唽鐨凙PI绔<EFBFBD>:

<EFBFBD> 鏂规硶 鍔熻兘 鐘舵€?
/api/v1/iit/health GET 鍋ュ悍妫€鏌? 鉁?
/api/v1/iit/webhooks/redcap POST DET鍥炶皟鎺ユ敹 鉁?
/api/v1/iit/webhooks/health GET Webhook鍋ュ悍妫€鏌? 鉁?
/api/v1/iit/projects/:id/sync POST 鎵嬪姩鍚屾<EFBFBD> 鉁?
/api/v1/iit/projects/:id/full-sync POST 鍏ㄩ噺鍚屾<EFBFBD> 鉁?

馃悰 閬囧埌鐨勯棶棰樹笌瑙喅鏂规<E98F82>

<EFBFBD><EFBFBD>1: 妯″潡璺<E6BDA1>緞瑙瀽閿欒<E996BF>

閿欒<EFBFBD>淇℃伅:

Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@/common'

鍘熷洜: 椤圭洰浣跨敤鐩稿<E990A9><EFBFBD>緞锛岃€屼笉鏄<E7AC89>矾寰勫埆鍚?@/common

喅鏂规<EFBFBD>:

// 閿欒<E996BF>
import { logger } from '@/common/logging';
import { jobQueue } from '@/common/jobs';

// 姝g‘
import { logger } from '../../../common/logging/index.js';
import { jobQueue } from '../../../common/jobs/index.js';

<EFBFBD>敼鏂囦欢: 鎵€鏈塈IT Manager妯″潡鐨刬mport璇<74>


<EFBFBD><EFBFBD>2: 鏁版嵁搴撳瓧娈靛悕绉颁笉涓€鑷?

閿欒<EFBFBD>淇℃伅:

ERROR: column "redcapProjectId" does not exist

鍘熷洜: Prisma浣跨敤camelCase锛屼絾PostgreSQL瀹為檯浣跨敤snake_case

**鏁版嵁搴撶湡瀹炴儏鍐?*:

-- 琛ㄥ悕: iit_schema.projects (not IitProject)
-- 瀛楁<E7809B>鍚? redcap_project_id (not redcapProjectId)

喅鏂规<EFBFBD>:

  1. 鉁?TypeScript浠爜涓<E7889C>户缁<E688B7>娇鐢≒risma鐨刢amelCase锛堣嚜鍔ㄦ槧灏勶級
  2. 鉁?鍘熷<E98D98>SQL璇<4C>彞鏀逛负snake_case
  3. 鉁?JSON瀛楁<E7809B>浣跨敤 '{}'::jsonb 绫诲瀷杞<E780B7>

<EFBFBD>敼鏂囦欢:

  • 娴嬭瘯鑴氭湰涓<EFBFBD>殑SQL璇<EFBFBD>
  • 鏂囨。涓<EFBFBD>殑SQL绀轰緥

<EFBFBD><EFBFBD>3: pg-boss浠诲姟鍚嶇О鏍煎紡閿欒<E996BF>

閿欒<EFBFBD>淇℃伅:

Name can only contain alphanumeric characters, underscores, hyphens, or periods

鍘熷洜: 鍒濆<E98D92>浣跨敤杩炲瓧绗?-锛屼絾瀹為檯娴嬭瘯鍙戠幇涓嶇ǔ瀹?

鍥㈤槦鏍囧噯:

?'iit:quality-check'  // 鍐掑彿
?'iit-quality-check'  // 杩炲瓧绗︼紙涓嶇ǔ瀹氾級
?'iit_quality_check'  // 涓嬪垝绾匡紙鎺ㄨ崘锛?

<EFBFBD>:

  • iit:quality-check 鈫?iit_quality_check
  • iit:redcap:poll 鈫?iit_redcap_poll

渚濇嵁鏂囨。: AIclinicalresearch\docs\02-閫氱敤鑳藉姏灞俓Postgres-Only寮傛<E5AFAE>浠诲姟澶勭悊鎸囧崡.md


<EFBFBD><EFBFBD>4: Worker娉ㄥ唽鏂规硶閿欒<E996BF>

閿欒<EFBFBD>: 浣跨敤浜?await jobQueue.work()

姝g‘鏂规硶: 浣跨敤 jobQueue.process()

瀵规瘮:

// 鉂?閿欒<E996BF>
await jobQueue.work(
  'iit_redcap_poll',
  { teamSize: 1, teamConcurrency: 1 },
  async (job) => { ... }
);

// 鉁?姝g‘
jobQueue.process('iit_redcap_poll', async (job) => {
  // ...
  return { success: true };
});

<EFBFBD><EFBFBD>5: REDCap DET鏍煎紡涓嶅吋瀹?

閿欒<EFBFBD>淇℃伅:

Unsupported Media Type: application/x-www-form-urlencoded

鍘熷洜: REDCap DET鍙戦€佺殑鏄<E6AE91>〃鍗曟牸寮忥紝鑰屼笉鏄疛SON

喅鏂规<EFBFBD>: 娣诲姞Content-Type瑙瀽鍣?

fastify.addContentTypeParser(
  'application/x-www-form-urlencoded',
  { parseAs: 'string' },
  (req, body, done) => {
    try {
      const params = new URLSearchParams(body as string);
      const parsed: any = {};
      params.forEach((value, key) => {
        parsed[key] = value;
      });
      done(null, parsed);
    } catch (err: any) {
      done(err);
    }
  }
);

<EFBFBD><EFBFBD>6: Docker缃戠粶璁块棶闂<E6A3B6><E99782>

<EFBFBD><EFBFBD>: REDCap瀹瑰櫒鏃犳硶閫氳繃 localhost 璁块棶瀹夸富鏈烘湇鍔?

DET URL閰嶇疆:

鉂?http://localhost:3001/api/v1/iit/webhooks/redcap
鉁?http://host.docker.internal:3001/api/v1/iit/webhooks/redcap

楠岃瘉鏂规硶:

docker exec redcap-apache curl http://host.docker.internal:3001/api/v1/iit/health
# 鉁?鎴愬姛杩斿洖

鉁?娴嬭瘯楠岃瘉

1. API杩炴帴娴嬭瘯

娴嬭瘯鑴氭湰: test-redcap-api.ts

缁撴灉:

鉁?杩炴帴鎴愬姛
鉁?鍏冩暟鎹<E69A9F><E98EB9>鍑? 17涓<37>瓧娈?
鉁?璁板綍瀵煎嚭: 6鏉¤<E98F89>褰?(ID: 1,2,3,4,5,6)
鉁?澧為噺鍚屾<E98D9A>: 鎴愬姛鑾峰彇鏈€杩?灏忔椂鏁版嵁
鉁?鎸囧畾璁板綍: 鎴愬姛瀵煎嚭鍗曟潯璁板綍

2. Webhook鎺ユ敹娴嬭瘯

娴嬭瘯鑴氭湰: test-redcap-webhook.ts

缁撴灉:

鉁?鍋ュ悍妫€鏌? ok
鉁?Webhook鍙戦€佹垚鍔? 200
鉁?鍝嶅簲鏃堕棿: <10ms (浼樼<E6B5BC>)
鉁?骞傜瓑鎬ф<E98EAC>鏌? 閫氳繃
鉁?鏃犳晥璇锋眰鎷︽埅: 400閿欒<E996BF>

3. 闆嗘垚娴嬭瘯

娴嬭瘯鑴氭湰: test-redcap-integration.ts

缁撴灉: 12/12 閫氳繃 鉁?

鉁?1. 鍚庣<E98D9A>鏈嶅姟杩愯<E69DA9>父
鉁?2. 椤圭洰閰嶇疆瀛樺湪
鉁?3. REDCap API杩炴帴鎴愬姛
鉁?4. 鍏冩暟鎹<E69A9F>幏鍙栨垚鍔?
鉁?5. 璁板綍鑾峰彇鎴愬姛
鉁?6. Webhook鍝嶅簲閫熷害<100ms
鉁?7. 寮傛<E5AFAE>澶勭悊绛夊緟瀹屾垚
鉁?8. 瀹¤<E780B9>鏃ュ織璁板綍瀹屾暣
鉁?9. 澧為噺鍚屾<E98D9A>鎴愬姛
鉁?10. 鎵嬪姩鍚屾<E98D9A>鎴愬姛 猸?
鉁?11. Webhook鍋ュ悍妫€鏌?
鉁?12. 骞傜瓑鎬ф祴璇曢€氳繃

4. 鐪熷疄鍦烘櫙娴嬭瘯

鎿嶄綔:

  1. 鍦≧EDCap涓<EFBFBD>柊澧炶<EFBFBD>褰旾D 5
  2. 鍦≧EDCap涓<EFBFBD>紪杈戣<EFBFBD>褰旾D 1
  3. 鍦≧EDCap涓<EFBFBD>柊澧炶<EFBFBD>褰旾D 6
  4. 鍦≧EDCap涓<EFBFBD>紪杈戣<EFBFBD>褰旾D 4

Webhook鎺ユ敹鏃ュ織:

   action_type    | entity_id | details
------------------+-----------+--------------------------------------------------
 WEBHOOK_RECEIVED | 4         | instrument: ddcd, project_id: 16
 WEBHOOK_RECEIVED | 6         | instrument: demographics, project_id: 16

楠岃瘉缁撴灉: 鉁?鏁版嵁瀹屽叏涓€鑷?


馃搳 鎬ц兘鎸囨爣

API鍝嶅簲鏃堕棿

鎿嶄綔 鑰楁椂 鏁版嵁閲?
exportMetadata 260-560ms 17涓<EFBFBD>瓧娈?
exportRecords (鍏ㄩ噺) 450-1,400ms 6鏉¤<EFBFBD>褰?
exportRecords (澧為噺) 300-800ms 鍙樺寲璁板綍
Webhook鍝嶅簲 <10ms 绔嬪嵆杩斿洖

瀹炴椂鎬ч獙璇?

鎸囨爣 <EFBFBD> 瀹為檯 鐘舵€?
Webhook鍝嶅簲鏃堕棿 <100ms 7ms 鉁?浼樼<E6B5BC>
DET瑙﹀彂寤惰繜 0绉? *0绉? 鉁?瀹岀編
鏁版嵁鍚屾<EFBFBD>鍑嗙鎬? 100% 100% 鉁?瀹岀編

馃梽锔?鏁版嵁搴撻厤缃?

REDCap椤圭洰閰嶇疆

鏁版嵁搴撹〃: iit_schema.projects

INSERT INTO iit_schema.projects (
  id,
  name,
  redcap_project_id,
  redcap_api_token,
  redcap_base_url,
  status,
  settings,
  created_at,
  updated_at
) VALUES (
  '40062738-2eb5-472f-8a36-e098f5c2f9b9',
  'test0102',
  '16',
  'FCB30F9CBD12EE9E8E9B3E3A0106701B',
  'http://localhost:8080',
  'active',
  '{}'::jsonb,
  NOW(),
  NOW()
);

REDCap椤圭洰淇℃伅

瀛楁<EFBFBD> 鍊?
椤圭洰鍚嶇О test0102
Project ID 16 (int)
REDCap URL http://localhost:8080/redcap_v15.8.0
API Token FCB30F9CBD12EE9E8E9B3E3A0106701B
DET URL http://host.docker.internal:3001/api/v1/iit/webhooks/redcap

琛ㄥ崟缁撴瀯

1. demographics (鍩烘湰淇℃伅)

  • record_id, first_name, last_name, address
  • telephone, email, dob, age
  • ethnicity, race, sex
  • height, weight, bmi
  • comments, demographics_complete

2. ddcd (鑷<>畾涔夎〃鍗?

  • zhiliaoshi (娌荤枟瀹?
  • shifou (鏄<>惁)
  • ddcd_complete

馃摑 瀹¤<E780B9>鏃ュ織绀轰緥

Webhook鎺ユ敹鏃ュ織

{
  "action_type": "WEBHOOK_RECEIVED",
  "entity_id": "6",
  "details": {
    "record": "6",
    "source": "redcap_det",
    "instrument": "demographics",
    "project_id": "16"
  },
  "created_at": "2026-01-02 09:50:32"
}

鍚屾<EFBFBD>瀹屾垚鏃ュ織

{
  "action_type": "SCHEDULED_SYNC",
  "entity_id": "40062738-2eb5-472f-8a36-e098f5c2f9b9",
  "details": {
    "source": "sync_manager",
    "duration": 447,
    "recordCount": 3,
    "uniqueRecordCount": 3
  },
  "created_at": "2026-01-02 09:20:17"
}

馃帗 缁忛獙鎬荤粨

1. 鎶€鏈<E282AC>€夊瀷楠岃瘉

鉁?REDCap DET + REST API鏂规<E98F82>浼樺娍:

  • 闆跺紑鍙戞垚鏈<EFBFBD>紙REDCap鍘熺敓鏀<EFBFBD>寔锛?
  • 闆跺欢杩燂紙瀹炴椂瑙﹀彂锛?
  • 楂樺彲闈狅紙Webhook + 杞<><E69D9E>鍙屼繚闄╋級
  • 鏄撶淮鎶わ紙鏍囧噯HTTP鎺ュ彛锛?

**鉂?鏀惧純鐨勬柟妗?*:

  • External Module锛堥渶瑕丳HP寮€鍙戯級
  • <EFBFBD>疆璇<EFBFBD>紙寤惰繜楂橈紝璧勬簮娴<EFBFBD>垂锛?

2. 寮€鍙戣<E98D99>鑼冮伒寰?

鉁?绗﹀悎鍥㈤槦鏍囧噯:

  • 闃熷垪鍚嶇О: 浣跨敤涓嬪垝绾匡紙iit_quality_check锛?
  • Worker娉ㄥ唽: 浣跨敤 jobQueue.process()
  • 瀹¤<EFBFBD>鏃ュ織: 璁板綍鎵€鏈夊叧閿<E58FA7>搷浣?
  • 閿欒<EFBFBD>澶勭悊: 缁熶竴寮傚父鎹曡幏鍜屾棩蹇楄<E8B987>褰?

**鍙傝€冩枃妗?*:

  • Postgres-Only寮傛<E5AFAE>浠诲姟澶勭悊鎸囧崡.md
  • REDCap瀵规帴鎶€鏈<EFBFBD>柟妗堜笌瀹炴柦鎸囧崡.md

3. 璋冭瘯鎶€宸?

Docker瀹瑰櫒璋冭瘯:

# 娴嬭瘯缃戠粶杩為€氭€?
docker exec redcap-apache curl http://host.docker.internal:3001/api/v1/iit/health

# 鏌ヨ<E98F8C>瀹¤<E780B9>鏃ュ織
docker exec ai-clinical-postgres psql -U postgres -d ai_clinical_research \
  -c "SELECT * FROM iit_schema.audit_logs ORDER BY created_at DESC LIMIT 5;"

# 鏌ヨ<E98F8C>椤圭洰閰嶇疆
docker exec ai-clinical-postgres psql -U postgres -d ai_clinical_research \
  -c "SELECT name, redcap_project_id, status FROM iit_schema.projects;"

**REDCap鏁版嵁搴撴煡璇?*:

docker exec redcap-mysql mysql -u redcap_user -predcap_pass_dev_456 redcap \
  -e "SELECT project_id, app_title FROM redcap_projects WHERE project_id = 16;"

馃摎 鐩稿叧鏂囨。

鏂囨。鍚嶇О <EFBFBD> 璇存槑
REDCap瀵规帴鎶€鏈<EFBFBD>柟妗? 04-寮€鍙戣<E98D99>鍒?REDCap瀵规帴鎶€鏈<E282AC>柟妗堜笌瀹炴柦鎸囧崡.md Day 2鎶€鏈<E282AC>柟妗?
MVP寮€鍙戜换鍔℃竻鍗? 04-寮€鍙戣<E98D99>鍒?MVP寮€鍙戜换鍔℃竻鍗?md 鏁翠綋寮€鍙戣<EFBFBD>鍒?
Postgres-Only寮傛<E5AFAE>浠诲姟澶勭悊鎸囧崡 docs/02-閫氱敤鑳藉姏灞?Postgres-Only寮傛<E5AFAE>浠诲姟澶勭悊鎸囧崡.md 闃熷垪寮€鍙戣<EFBFBD>鑼?
妯″潡褰撳墠鐘舵€? 00-妯″潡褰撳墠鐘舵€佷笌寮€鍙戞寚鍗?md 妯″潡鏁翠綋鐘舵€?

馃殌 涓嬩竴姝ヨ<E5A79D>鍒?

Phase 1.5 - 璐ㄦ帶閫昏緫瀹炵幇

<EFBFBD>: 瀹炵幇AI椹卞姩鐨勬暟鎹<E69A9F>川鎺?

鏍稿績鍔熻兘:

  1. 瀹炵幇 iit_quality_check Worker鐨勮川鎺ч€昏緫
  2. 璋冪敤Dify宸ヤ綔娴佽繘琛屾暟鎹<EFBFBD>獙璇?
  3. 鐢熸垚璐ㄦ帶寤鸿<EFBFBD>锛坰hadow state锛?
  4. 杩斿洖缁撴灉缁欑爺绌惰€?

**棰勪及宸ヤ綔閲?*: 1-2澶?


Phase 2 - 鍙屽悜鍚屾<E98D9A>

<EFBFBD>: 瀹炵幇AI寤鸿<E5AFA4>鍥炲啓鍒癛EDCap

鏍稿績鍔熻兘:

  1. 瀹屽杽 importRecords() API
  2. 瀹炵幇shadow state瀹℃壒娴佺▼
  3. 缁忕爺绌惰€呯璁ゅ悗鍚屾<EFBFBD>鍒癛EDCap
  4. 澶勭悊鍐茬獊鍜岀増鏈<EFBFBD>帶鍒?

**棰勪及宸ヤ綔閲?*: 2-3澶?


鉁?楠屾敹娓呭崟

  • RedcapAdapter API閫傞厤鍣ㄥ畬鎴?
  • WebhookController Webhook鎺ユ敹鍣ㄥ畬鎴?
  • SyncManager 杞<><E69D9E>悊鍣ㄥ畬鎴?
  • Worker娉ㄥ唽鍜岄槦鍒楅厤缃<EFBFBD>畬鎴?
  • <EFBFBD>敱閰嶇疆鍜孋ontent-Type瑙瀽瀹屾垚
  • 鍗曞厓娴嬭瘯鑴氭湰閫氳繃锛坱est-redcap-api.ts锛?
  • Webhook娴嬭瘯閫氳繃锛坱est-redcap-webhook.ts锛?
  • 闆嗘垚娴嬭瘯閫氳繃锛坱est-redcap-integration.ts锛?2/12锛?
  • 鐪熷疄鍦烘櫙娴嬭瘯閫氳繃锛堟柊澧?缂栬緫璁板綍锛?
  • 瀹¤<EFBFBD>鏃ュ織璁板綍瀹屾暣
  • 鎬ц兘鎸囨爣杈炬爣锛圵ebhook<10ms锛?
  • 绗﹀悎鍥㈤槦寮€鍙戣<EFBFBD>鑼?
  • 鏂囨。鏇存柊瀹屾垚

馃搶 闄勫綍

A. 鐜<><E9909C>淇℃伅

寮€鍙戠幆澧?
  - OS: Windows 11
  - Node.js: v22.18.0
  - PostgreSQL: 16.1 (Docker)
  - REDCap: 15.8.0 (Docker)
  - Backend: Fastify + Prisma
  - 闃熷垪: pg-boss

Docker瀹瑰櫒:
  - redcap-apache: REDCap搴旂敤
  - redcap-mysql: REDCap鏁版嵁搴?
  - ai-clinical-postgres: IIT鏁版嵁搴?

B. 鍏抽敭浠g爜鏂囦欢娓呭崟

backend/src/modules/iit-manager/
鈹溾攢鈹€ adapters/
鈹?  鈹斺攢鈹€ RedcapAdapter.ts          (271琛?
鈹溾攢鈹€ controllers/
鈹?  鈹斺攢鈹€ WebhookController.ts      (327琛?
鈹溾攢鈹€ services/
鈹?  鈹斺攢鈹€ SyncManager.ts            (398琛?
鈹溾攢鈹€ routes/
鈹?  鈹斺攢鈹€ index.ts                  (203琛?
鈹溾攢鈹€ index.ts                      (91琛?
鈹溾攢鈹€ test-redcap-api.ts           (189琛?
鈹溾攢鈹€ test-redcap-webhook.ts       (274琛?
鈹斺攢鈹€ test-redcap-integration.ts   (449琛?

鎬讳唬鐮侀噺: ~2,200琛?


**鏂囨。缁存姢鑰?: 寮€鍙戝洟闃? **鏈€鍚庢洿鏂?: 2026-01-02
**鐘舵€?*: 鉁?Day 2 寮€鍙戝畬鎴?