Summary: - Add 4 new database tables: iit_field_metadata, iit_qc_logs, iit_record_summary, iit_qc_project_stats - Implement pg-boss debounce mechanism in WebhookController - Refactor QC Worker for dual output: QC logs + record summary - Enhance HardRuleEngine to support form-based rule filtering - Create QcService for QC data queries - Optimize ChatService with new intents: query_enrollment, query_qc_status - Add admin batch operations: one-click full QC + one-click full summary - Create IIT Admin management module: project config, QC rules, user mapping Status: Code complete, pending end-to-end testing Co-authored-by: Cursor <cursoragent@cursor.com>
80 lines
2.0 KiB
JSON
80 lines
2.0 KiB
JSON
{
|
|
"name": "ai-clinical-backend",
|
|
"version": "1.0.0",
|
|
"description": "AI Clinical Research Platform - Backend API",
|
|
"main": "dist/index.js",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "tsx watch src/index.ts",
|
|
"build": "tsc",
|
|
"start": "node dist/index.js",
|
|
"prisma:generate": "prisma generate",
|
|
"prisma:migrate": "prisma migrate dev",
|
|
"prisma:studio": "prisma studio",
|
|
"prisma:seed": "tsx prisma/seed.ts",
|
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
},
|
|
"prisma": {
|
|
"seed": "tsx prisma/seed.ts"
|
|
},
|
|
"keywords": [
|
|
"ai",
|
|
"clinical",
|
|
"research",
|
|
"medical"
|
|
],
|
|
"author": "AI Clinical Dev Team",
|
|
"license": "ISC",
|
|
"dependencies": {
|
|
"@fastify/cors": "^11.1.0",
|
|
"@fastify/jwt": "^10.0.0",
|
|
"@fastify/multipart": "^9.2.1",
|
|
"@prisma/client": "^6.17.0",
|
|
"@types/form-data": "^2.2.1",
|
|
"@wecom/crypto": "^1.0.1",
|
|
"ajv": "^8.17.1",
|
|
"ali-oss": "^6.23.0",
|
|
"axios": "^1.12.2",
|
|
"bcryptjs": "^2.4.3",
|
|
"bullmq": "^5.65.0",
|
|
"diff-match-patch": "^1.0.5",
|
|
"dotenv": "^17.2.3",
|
|
"exceljs": "^4.4.0",
|
|
"fastify": "^5.6.1",
|
|
"form-data": "^4.0.4",
|
|
"handlebars": "^4.7.8",
|
|
"html2canvas": "^1.4.1",
|
|
"js-yaml": "^4.1.0",
|
|
"json-logic-js": "^2.0.5",
|
|
"jsonrepair": "^3.13.1",
|
|
"jsonwebtoken": "^9.0.2",
|
|
"jspdf": "^3.0.3",
|
|
"openai": "^6.16.0",
|
|
"p-queue": "^9.0.1",
|
|
"pg-boss": "^12.5.2",
|
|
"prisma": "^6.17.0",
|
|
"tiktoken": "^1.0.22",
|
|
"winston": "^3.18.3",
|
|
"xlsx": "^0.18.5",
|
|
"xml2js": "^0.6.2",
|
|
"zod": "^4.1.12"
|
|
},
|
|
"devDependencies": {
|
|
"@types/ali-oss": "^6.23.1",
|
|
"@types/bcryptjs": "^2.4.6",
|
|
"@types/js-yaml": "^4.0.9",
|
|
"@types/json-logic-js": "^2.0.8",
|
|
"@types/jsonwebtoken": "^9.0.7",
|
|
"@types/node": "^24.7.1",
|
|
"@types/uuid": "^10.0.0",
|
|
"@types/winston": "^2.4.4",
|
|
"@types/xml2js": "^0.4.14",
|
|
"better-sqlite3": "^12.4.6",
|
|
"nodemon": "^3.1.10",
|
|
"pino-pretty": "^13.1.1",
|
|
"ts-node": "^10.9.2",
|
|
"tsx": "^4.20.6",
|
|
"typescript": "^5.9.3"
|
|
}
|
|
}
|