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%)
14 KiB
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>鍜屽弻鍚戦€氫俊銆?
鏍稿績浠峰€?
- 鉁?**瀹炴椂鎬?*: Webhook鍝嶅簲鏃堕棿<10ms锛屾暟鎹<E69A9F>綍鍏ュ悗绔嬪嵆瑙﹀彂
- 鉁?**鍙<>潬鎬?*: DET + 瀹氭椂杞<E6A482><E69D9E>鍙屼繚闄╂満鍒?
- 鉁?**浜戝師鐢?*: 瀹屽叏鍩轰簬Postgres-Only鏋舵瀯锛屼娇鐢╬g-boss闃熷垪
- 鉁?**鏍囧噯鍖?*: 绗﹀悎鍥㈤槦寮€鍙戣<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:8080apiToken:FCB30F9CBD12EE9E8E9B3E3A0106701Btimeout: 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:
-
iit_redcap_poll (瀹氭椂杞<E6A482><E69D9E>)
- 闃熷垪鍚嶇О:
iit_redcap_poll - 瑙﹀彂棰戠巼: 姣?鍒嗛挓锛圕ron:
*/5 * * * *锛? - 骞跺彂鏁? 1
- 鍔熻兘: 杞<><E69D9E>鎵€鏈塧ctive椤圭洰鐨勫<E990A8>閲忔暟鎹?
- 闃熷垪鍚嶇О:
-
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> | 鉁? |
馃悰 閬囧埌鐨勯棶棰樹笌瑙e喅鏂规<E98F82>
闂<EFBFBD><EFBFBD>1: 妯″潡璺<E6BDA1>緞瑙f瀽閿欒<E996BF>
閿欒<EFBFBD>淇℃伅:
Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@/common'
鍘熷洜: 椤圭洰浣跨敤鐩稿<E990A9>璺<EFBFBD>緞锛岃€屼笉鏄<E7AC89>矾寰勫埆鍚?@/common
瑙e喅鏂规<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)
瑙e喅鏂规<EFBFBD>:
- 鉁?TypeScript浠g爜涓<E7889C>户缁<E688B7>娇鐢≒risma鐨刢amelCase锛堣嚜鍔ㄦ槧灏勶級
- 鉁?鍘熷<E98D98>SQL璇<4C>彞鏀逛负snake_case
- 鉁?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_checkiit: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
瑙e喅鏂规<EFBFBD>: 娣诲姞Content-Type瑙f瀽鍣?
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>姝e父
鉁?2. 椤圭洰閰嶇疆瀛樺湪
鉁?3. REDCap API杩炴帴鎴愬姛
鉁?4. 鍏冩暟鎹<E69A9F>幏鍙栨垚鍔?
鉁?5. 璁板綍鑾峰彇鎴愬姛
鉁?6. Webhook鍝嶅簲閫熷害<100ms
鉁?7. 寮傛<E5AFAE>澶勭悊绛夊緟瀹屾垚
鉁?8. 瀹¤<E780B9>鏃ュ織璁板綍瀹屾暣
鉁?9. 澧為噺鍚屾<E98D9A>鎴愬姛
鉁?10. 鎵嬪姩鍚屾<E98D9A>鎴愬姛 猸?
鉁?11. Webhook鍋ュ悍妫€鏌?
鉁?12. 骞傜瓑鎬ф祴璇曢€氳繃
4. 鐪熷疄鍦烘櫙娴嬭瘯
鎿嶄綔:
- 鍦≧EDCap涓<EFBFBD>柊澧炶<EFBFBD>褰旾D 5
- 鍦≧EDCap涓<EFBFBD>紪杈戣<EFBFBD>褰旾D 1
- 鍦≧EDCap涓<EFBFBD>柊澧炶<EFBFBD>褰旾D 6
- 鍦≧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>浠诲姟澶勭悊鎸囧崡.mdREDCap瀵规帴鎶€鏈<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>川鎺?
鏍稿績鍔熻兘:
- 瀹炵幇
iit_quality_checkWorker鐨勮川鎺ч€昏緫 - 璋冪敤Dify宸ヤ綔娴佽繘琛屾暟鎹<EFBFBD>獙璇?
- 鐢熸垚璐ㄦ帶寤鸿<EFBFBD>锛坰hadow state锛?
- 杩斿洖缁撴灉缁欑爺绌惰€?
**棰勪及宸ヤ綔閲?*: 1-2澶?
Phase 2 - 鍙屽悜鍚屾<E98D9A>
鐩<EFBFBD>爣: 瀹炵幇AI寤鸿<E5AFA4>鍥炲啓鍒癛EDCap
鏍稿績鍔熻兘:
- 瀹屽杽
importRecords()API - 瀹炵幇shadow state瀹℃壒娴佺▼
- 缁忕爺绌惰€呯‘璁ゅ悗鍚屾<EFBFBD>鍒癛EDCap
- 澶勭悊鍐茬獊鍜岀増鏈<EFBFBD>帶鍒?
**棰勪及宸ヤ綔閲?*: 2-3澶?
鉁?楠屾敹娓呭崟
- RedcapAdapter API閫傞厤鍣ㄥ畬鎴?
- WebhookController Webhook鎺ユ敹鍣ㄥ畬鎴?
- SyncManager 杞<><E69D9E>绠$悊鍣ㄥ畬鎴?
- Worker娉ㄥ唽鍜岄槦鍒楅厤缃<EFBFBD>畬鎴?
- 璺<EFBFBD>敱閰嶇疆鍜孋ontent-Type瑙f瀽瀹屾垚
- 鍗曞厓娴嬭瘯鑴氭湰閫氳繃锛坱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 寮€鍙戝畬鎴?