protocol.ts 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718
  1. /**
  2. * Protocol Mock Handlers
  3. * 协议相关的 mock 处理器
  4. */
  5. /**
  6. * 获取患者类型列表 - Human类型
  7. *
  8. * @description 获取启用的人医患者类型列表
  9. * @method GET
  10. * @url /dr/api/v1/auth/protocol/patient_type
  11. * @access 需要认证
  12. *
  13. * @param {boolean} [is_enabled] - 是否只返回启用的类型
  14. *
  15. * @returns {Object[]} data.patient_type_list - 患者类型列表
  16. * @returns {string} data.patient_type_list[].patient_type_id - 患者类型ID
  17. * @returns {string} data.patient_type_list[].patient_type_name - 患者类型名称
  18. * @returns {boolean} data.patient_type_list[].is_enabled - 是否启用
  19. * @returns {string} data.patient_type_list[].product - 产品类型(DROS/VETDROS)
  20. *
  21. * @example
  22. * mockGetPatientTypeHuman();
  23. * cy.wait('@getPatientTypeHuman');
  24. *
  25. * @see docs/DR.md - 章节12.1
  26. */
  27. export function mockGetPatientTypeHuman() {
  28. cy.intercept('GET', '/dr/api/v1/auth/protocol/patient_type*', {
  29. statusCode: 200,
  30. body: {
  31. code: "0x000000",
  32. description: "Success",
  33. solution: "",
  34. data: {
  35. patient_type_list: [
  36. {
  37. id: "1",
  38. patient_type_id: "Human",
  39. patient_type_name: "Human",
  40. patient_type_local: "Human",
  41. patient_type_description: "Human",
  42. sort: 1,
  43. is_enabled: true,
  44. product: "DROS",
  45. is_pre_install: true
  46. }
  47. ]
  48. }
  49. }
  50. }).as('getPatientTypeHuman');
  51. }
  52. /**
  53. * 获取患者类型列表 - 所有类型
  54. *
  55. * @description 获取所有患者类型列表(包括禁用的)
  56. * @method GET
  57. * @url /dr/api/v1/auth/protocol/patient_type
  58. * @access 需要认证
  59. *
  60. * @returns {Object[]} data.patient_type_list - 患者类型列表
  61. *
  62. * @example
  63. * mockGetPatientTypeAll();
  64. * cy.wait('@getPatientTypeAll');
  65. *
  66. * @see docs/DR.md - 章节12.1
  67. */
  68. export function mockGetPatientTypeAll() {
  69. cy.intercept('GET', '/dr/api/v1/auth/protocol/patient_type*', {
  70. statusCode: 200,
  71. body: {
  72. code: "0x000000",
  73. description: "Success",
  74. solution: "",
  75. data: {
  76. patient_type_list: [
  77. {
  78. id: "1",
  79. patient_type_id: "Human",
  80. patient_type_name: "Human",
  81. patient_type_local: "Human",
  82. patient_type_description: "Human",
  83. sort: 1,
  84. is_enabled: true,
  85. product: "DROS",
  86. is_pre_install: true
  87. },
  88. {
  89. id: "2",
  90. patient_type_id: "SpecialType",
  91. patient_type_name: "SpecialType",
  92. patient_type_local: "SpecialType",
  93. patient_type_description: "SpecialType",
  94. sort: 2,
  95. is_enabled: false,
  96. product: "DROS",
  97. is_pre_install: true
  98. }
  99. ]
  100. }
  101. }
  102. }).as('getPatientTypeAll');
  103. }
  104. /**
  105. * 获取身体部位列表 - Human
  106. *
  107. * @description 根据患者类型获取支持的身体部位(人医)
  108. * @method GET
  109. * @url /dr/api/v1/auth/protocol/body_part
  110. * @access 需要认证
  111. *
  112. * @param {string} patient_type - 患者类型
  113. * @param {string} modality - 模式(DX)
  114. * @param {boolean} [is_enabled] - 是否只返回启用的
  115. *
  116. * @returns {Object[]} data.body_part_list - 身体部位列表
  117. * @returns {string} data.body_part_list[].body_part_id - 身体部位ID
  118. * @returns {string} data.body_part_list[].body_part_name - 身体部位名称
  119. *
  120. * @example
  121. * mockGetBodyPartHuman();
  122. * cy.wait('@getBodyPartHuman');
  123. *
  124. * @see docs/DR.md - 章节12.2
  125. */
  126. export function mockGetBodyPartHuman() {
  127. cy.intercept('GET', '/dr/api/v1/auth/protocol/body_part*', {
  128. statusCode: 200,
  129. body: {
  130. code: "0x000000",
  131. description: "Success",
  132. solution: "",
  133. data: {
  134. body_part_list: [
  135. {
  136. id: "1",
  137. body_part_id: "Human_SKULL",
  138. body_part_name: "颅骨",
  139. body_part_local: "颅骨",
  140. body_part_description: "Skull",
  141. patient_type: "Human",
  142. category: "DX",
  143. sort: 1,
  144. is_enabled: true,
  145. product: "DROS",
  146. is_pre_install: true
  147. },
  148. {
  149. id: "2",
  150. body_part_id: "Human_NECK",
  151. body_part_name: "颈部",
  152. body_part_local: "颈部",
  153. body_part_description: "Neck",
  154. patient_type: "Human",
  155. category: "DX",
  156. sort: 2,
  157. is_enabled: true,
  158. product: "DROS",
  159. is_pre_install: true
  160. }
  161. ]
  162. }
  163. }
  164. }).as('getBodyPartHuman');
  165. }
  166. /**
  167. * 获取协议列表 - 成功场景
  168. *
  169. * @description 根据身体部位获取协议列表
  170. * @method GET
  171. * @url /dr/api/v1/auth/protocol/procedure
  172. * @access 需要认证
  173. *
  174. * @param {string} patient_type - 患者类型
  175. * @param {string} body_part - 身体部位
  176. * @param {string} [procedure_type] - 协议类型(NORMAL/EMERGENCY)
  177. * @param {boolean} [is_enabled] - 是否只返回启用的
  178. * @param {number} [page] - 页码
  179. * @param {number} [page_size] - 每页数量
  180. *
  181. * @returns {Object} data - 协议列表数据
  182. * @returns {number} data.count - 总数
  183. * @returns {Object[]} data.procedures - 协议列表
  184. *
  185. * @example
  186. * mockGetProcedureListSuccess();
  187. * cy.wait('@getProcedureListSuccess');
  188. *
  189. * @see docs/DR.md - 章节12.3
  190. */
  191. export function mockGetProcedureListSuccess() {
  192. cy.intercept('GET', '/dr/api/v1/auth/protocol/procedure*', {
  193. statusCode: 200,
  194. body: {
  195. code: "0x000000",
  196. description: "Success",
  197. solution: "",
  198. data: {
  199. "@type": "type.googleapis.com/dr.protocol.ProcedureList",
  200. count: 4,
  201. procedures: [
  202. {
  203. id: "2",
  204. procedure_id: "P0-0002",
  205. procedure_code: "P0-0002",
  206. procedure_name: "颅骨前后位 + 侧位",
  207. procedure_name_local: "颅骨前后位 + 侧位",
  208. procedure_other_name: "Skull AP + LAT",
  209. procedure_description: "颅骨前后位 + 侧位",
  210. procedure_description_local: "颅骨前后位 + 侧位",
  211. patient_type: "Human",
  212. body_part_id: "Human_SKULL",
  213. procedure_type: "NORMAL",
  214. fast_search: false,
  215. protocol_laterality: "U",
  216. procedure_category: "Adult",
  217. modality: "DX",
  218. sort: 1,
  219. is_enabled: true,
  220. product: "DROS",
  221. is_pre_install: true
  222. },
  223. {
  224. id: "3",
  225. procedure_id: "P0-0003",
  226. procedure_code: "P0-0003",
  227. procedure_name: "颅骨后前位 + 侧位",
  228. procedure_name_local: "颅骨后前位 + 侧位",
  229. procedure_other_name: "Skull PA + LAT",
  230. procedure_description: "颅骨后前位 + 侧位",
  231. procedure_description_local: "颅骨后前位 + 侧位",
  232. patient_type: "Human",
  233. body_part_id: "Human_SKULL",
  234. procedure_type: "NORMAL",
  235. fast_search: false,
  236. protocol_laterality: "U",
  237. procedure_category: "Adult",
  238. modality: "DX",
  239. sort: 1,
  240. is_enabled: true,
  241. product: "DROS",
  242. is_pre_install: true
  243. }
  244. ]
  245. }
  246. }
  247. }).as('getProcedureListSuccess');
  248. }
  249. /**
  250. * 获取体位列表 - 成功场景
  251. *
  252. * @description 获取体位列表
  253. * @method GET
  254. * @url /dr/api/v1/auth/protocol/view
  255. * @access 需要认证
  256. *
  257. * @param {string} patient_type - 患者类型
  258. * @param {string} body_part - 身体部位
  259. * @param {boolean} [is_enabled] - 是否只返回启用的
  260. * @param {number} [page] - 页码
  261. * @param {number} [page_size] - 每页数量
  262. *
  263. * @returns {Object} data - 体位列表数据
  264. * @returns {number} data.count - 总数
  265. * @returns {Object[]} data.views - 体位列表
  266. *
  267. * @example
  268. * mockGetViewListSuccess();
  269. * cy.wait('@getViewListSuccess');
  270. *
  271. * @see docs/DR.md - 章节12.4
  272. */
  273. export function mockGetViewListSuccess() {
  274. cy.intercept('GET', '/dr/api/v1/auth/protocol/view*', {
  275. statusCode: 200,
  276. body: {
  277. code: "0x000000",
  278. description: "Success",
  279. solution: "",
  280. data: {
  281. "@type": "type.googleapis.com/dr.protocol.ViewList",
  282. count: 2,
  283. views: [
  284. {
  285. internal_id: "View_DX_T_A_SK_AP_00",
  286. view_id: "View_DX_T_A_SK_AP_00",
  287. view_name: "颅骨前后位",
  288. view_name_local: "",
  289. view_other_name: "Skull AP",
  290. view_description: "颅骨前后位",
  291. view_position: "AP",
  292. application: "RAD",
  293. anatomic_region: "SKULL",
  294. patient_type: "Human",
  295. body_part_id: "Human_SKULL",
  296. view_icon_name: "/Image/Position/Human/skull.ap.table.x.png",
  297. modality: "DX",
  298. work_station_id: 0,
  299. apr_id: "View_DX_T_A_SK_AP_00",
  300. img_proc_id: "View_DX_T_A_SK_AP_00",
  301. sort: 1,
  302. is_enabled: true,
  303. product: "DROS",
  304. is_pre_install: true
  305. }
  306. ]
  307. }
  308. }
  309. }).as('getViewListSuccess');
  310. }
  311. /**
  312. * 获取体位详情 - 成功场景(简化版)
  313. *
  314. * @description 根据ID获取体位详情(不含完整config_object)
  315. * @method GET
  316. * @url /dr/api/v1/auth/protocol/view/{id}
  317. * @access 需要认证
  318. *
  319. * @param {string} id - 体位ID(路径参数)
  320. *
  321. * @returns {Object} data - 体位详情
  322. *
  323. * @example
  324. * mockGetViewDetailSuccess();
  325. * cy.wait('@getViewDetailSuccess');
  326. *
  327. * @see docs/DR.md - 章节12.6
  328. */
  329. export function mockGetViewDetailSuccess() {
  330. cy.intercept('GET', '/dr/api/v1/auth/protocol/view/*', {
  331. statusCode: 200,
  332. body: {
  333. code: "0x000000",
  334. description: "Success",
  335. solution: "",
  336. data: {
  337. "@type": "type.googleapis.com/dr.protocol.View",
  338. internal_id: "View_DX_T_A_SK_AP_00",
  339. view_id: "View_DX_T_A_SK_AP_00",
  340. view_name: "颅骨前后位",
  341. view_description: "颅骨前后位",
  342. patient_type: "Human",
  343. body_part_id: "Human_SKULL",
  344. modality: "DX",
  345. sort: 1,
  346. is_enabled: true,
  347. product: "DROS",
  348. is_pre_install: true
  349. }
  350. }
  351. }).as('getViewDetailSuccess');
  352. }
  353. /**
  354. * 获取体位详情 - 完整版(包含config_object)
  355. *
  356. * @description 根据ID获取完整的体位详情,包含DX和Common配置对象
  357. * @method GET
  358. * @url /dr/api/v1/auth/protocol/view/{id}
  359. * @access 需要认证
  360. *
  361. * @param {string} id - 体位ID(路径参数)
  362. *
  363. * @returns {Object} data - 完整的体位详情,包含config_object
  364. * @returns {Object} data.config_object.DX - 人医配置参数
  365. * @returns {Object} data.config_object.Common - 通用配置参数
  366. *
  367. * @example
  368. * mockGetViewDetailComplete();
  369. * cy.wait('@getViewDetailComplete');
  370. *
  371. * @see src/API/patient/viewActions.ts - fetchViewDetail函数
  372. */
  373. export function mockGetViewDetailComplete() {
  374. cy.intercept('GET', '/dr/api/v1/auth/protocol/view/*', {
  375. statusCode: 200,
  376. body: {
  377. code: "0x000000",
  378. description: "Success",
  379. solution: "",
  380. data: {
  381. "@type": "type.googleapis.com/dr.protocol.View",
  382. internal_id: "View_DX_T_A_SK_AP_00",
  383. view_id: "View_DX_T_A_SK_AP_00",
  384. view_name: "颅骨前后位",
  385. view_name_local: "颅骨前后位",
  386. view_other_name: "Skull AP",
  387. view_description: "颅骨前后位",
  388. view_position: "AP",
  389. application: "RAD",
  390. anatomic_region: "Skull",
  391. patient_type: "Human",
  392. body_part_id: "Human_SKULL",
  393. view_icon_name: "/Image/Position/Human/skull.ap.table.x.png",
  394. view_big_icon_name: "/Image/Position/Human/skull.ap.table.x_big.png",
  395. view_coach_name: "/Image/Coach/Human/skull_ap.png",
  396. modality: "DX",
  397. work_station_id: 0,
  398. apr_id: "View_DX_T_A_SK_AP_00",
  399. img_proc_id: "View_DX_T_A_SK_AP_00",
  400. config_object: {
  401. DX: {
  402. WorkStationID: "0",
  403. PatientOrientationRow: "P",
  404. PatientOrientationColumn: "L",
  405. ImageLaterality: "U",
  406. ImageRotate: "0",
  407. CollimatorSizeLength: "430",
  408. CollimatorSizeWidth: "430",
  409. CollimatorSize: "430*430",
  410. CollimatorCenter: "0,0",
  411. CollimatorFilter: "None",
  412. CollimatorNoChange: false,
  413. StandPos: "Table",
  414. ImageHorizontalFlip: "False",
  415. LabelStyle: "Default",
  416. LabelPosition: "TopLeft",
  417. RatioFactorThickness: 1.0,
  418. RatioFactorWeight: 1.0,
  419. RatioFactorSize: 1.0,
  420. RatioFactorLength: 1.0,
  421. TargetEXI: 200
  422. },
  423. Common: {
  424. CollimatorCenter: "0,0",
  425. CollimatorFilter: "None",
  426. CollimatorNoChange: false,
  427. CollimatorSize: "430*430",
  428. CollimatorSizeLength: "430",
  429. CollimatorSizeWidth: "430",
  430. ImageHorizontalFlip: "False",
  431. ImageInvert: false,
  432. ImageLaterality: "U",
  433. ImageRotate: "0",
  434. LabelPosition: "TopLeft",
  435. RatioFactorLength: 1.0,
  436. RatioFactorSize: 1.0,
  437. RatioFactorThickness: 1.0,
  438. RatioFactorWeight: 1.0,
  439. StandPos: "Table",
  440. TargetEXI: 200,
  441. UseMaskMapMatrix: false,
  442. ViewID: "View_DX_T_A_SK_AP_00",
  443. XIndex: 0,
  444. YIndex: 0
  445. }
  446. },
  447. sort: 1,
  448. is_enabled: true,
  449. product: "DROS",
  450. is_pre_install: true
  451. }
  452. }
  453. }).as('getViewDetailComplete');
  454. }
  455. /**
  456. * 获取APR详情(通过view_id)- 成功场景
  457. *
  458. * @description 根据体位ID获取APR详情
  459. * @method GET
  460. * @url /dr/api/v1/auth/protocol/view/{id}/apr
  461. * @access 需要认证
  462. *
  463. * @param {string} id - 体位ID(路径参数)
  464. *
  465. * @returns {Object} data - APR详情
  466. * @returns {Object[]} data.exposures - 曝光参数列表
  467. *
  468. * @example
  469. * mockGetAprByViewSuccess();
  470. * cy.wait('@getAprByViewSuccess');
  471. *
  472. * @see docs/DR.md - 章节12.7
  473. */
  474. export function mockGetAprByViewSuccess() {
  475. cy.intercept('GET', '/dr/api/v1/auth/protocol/view/*/apr*', {
  476. statusCode: 200,
  477. body: {
  478. code: "0x000000",
  479. description: "Success",
  480. solution: "",
  481. data: {
  482. "@type": "type.googleapis.com/dr.protocol.AprReply",
  483. apr_id: "View_DX_T_A_SK_AP_00",
  484. apr_name: "View_DX_T_A_SK_AP_00",
  485. apr_description: "颅骨前后位",
  486. patient_type: "Human",
  487. body_part_id: "Human_SKULL",
  488. modality: "DX",
  489. exposures: [
  490. {
  491. work_station_id: 0,
  492. patient_size: "Medium",
  493. config_object: {
  494. Common: {
  495. kV: 70,
  496. mA: 125,
  497. ms: 100,
  498. mAs: 12.5
  499. }
  500. }
  501. }
  502. ],
  503. sort: 0,
  504. is_enabled: true,
  505. product: "DROS",
  506. is_pre_install: true
  507. }
  508. }
  509. }).as('getAprByViewSuccess');
  510. }
  511. /**
  512. * 获取APR设备信息 - 成功场景
  513. *
  514. * @description 根据APR ID获取设备参数信息
  515. * @method GET
  516. * @url /dr/api/v1/auth/protocol/apr/{id}/device
  517. * @access 需要认证
  518. *
  519. * @param {string} id - APR ID(路径参数)
  520. * @param {number} [work_station_id] - 工作位ID(0或1)
  521. *
  522. * @returns {Object} data - 设备参数
  523. *
  524. * @example
  525. * mockGetAprDeviceSuccess();
  526. * cy.wait('@getAprDeviceSuccess');
  527. *
  528. * @see docs/DR.md - 章节12.9
  529. */
  530. export function mockGetAprDeviceSuccess() {
  531. cy.intercept('GET', '/dr/api/v1/auth/protocol/apr/*/device*', {
  532. statusCode: 200,
  533. body: {
  534. code: "0x000000",
  535. description: "Success",
  536. solution: "",
  537. data: {
  538. "@type": "type.googleapis.com/dr.protocol.AprDevice",
  539. work_station_id: 1,
  540. config_object: {
  541. Common: {
  542. APRNumber: "5",
  543. SID: 115,
  544. GridType: 2
  545. }
  546. }
  547. }
  548. }
  549. }).as('getAprDeviceSuccess');
  550. }
  551. /**
  552. * 获取APR默认曝光参数 - 成功场景
  553. *
  554. * @description 根据APR ID获取默认曝光技术参数
  555. * @method GET
  556. * @url /dr/api/v1/auth/protocol/apr/{id}/tech
  557. * @access 需要认证
  558. *
  559. * @param {string} id - APR ID(路径参数)
  560. * @param {number} [work_station_id] - 工作位ID
  561. * @param {string} [patient_size] - 患者体型(Large/Medium/Small)
  562. *
  563. * @returns {Object} data - 技术参数
  564. * @returns {Object} data.dp - 设备参数
  565. * @returns {Object} data.ep - 曝光参数
  566. *
  567. * @example
  568. * mockGetAprTechParamsSuccess();
  569. * cy.wait('@getAprTechParamsSuccess');
  570. *
  571. * @see docs/DR.md - 章节12.10
  572. */
  573. export function mockGetAprTechParamsSuccess() {
  574. cy.intercept('GET', '/dr/api/v1/auth/protocol/apr/*/tech*', {
  575. statusCode: 200,
  576. body: {
  577. code: "0x000000",
  578. description: "Success",
  579. solution: "",
  580. data: {
  581. "@type": "type.googleapis.com/dr.protocol.TechParam",
  582. dp: {
  583. SID: 115,
  584. GridType: 2,
  585. GridSpeed: 0
  586. },
  587. ep: {
  588. kV: 70,
  589. mA: 125,
  590. ms: 100,
  591. mAs: 12.5
  592. }
  593. }
  594. }
  595. }).as('getAprTechParamsSuccess');
  596. }
  597. /**
  598. * 获取APR完整详情(包含所有体型参数)- 成功场景
  599. *
  600. * @description 根据体位ID获取完整的APR详情,包含所有患者体型的曝光参数
  601. * @method GET
  602. * @url /dr/api/v1/auth/protocol/view/{id}/apr
  603. * @access 需要认证
  604. *
  605. * @param {string} id - 体位ID(路径参数)
  606. * @param {string} [patient_type] - 患者类型
  607. * @param {string} [body_part] - 身体部位
  608. * @param {boolean} [is_enabled] - 是否启用
  609. * @param {string} [procedure_id] - 协议ID
  610. *
  611. * @returns {Object} data - 完整的APR详情
  612. * @returns {Object[]} data.sub - 不同体型的曝光参数列表
  613. * @returns {Object} data.sub[].config_object.Common - 完整的曝光配置
  614. *
  615. * @example
  616. * mockGetAprDetailsComplete();
  617. * cy.wait('@getAprDetailsComplete');
  618. *
  619. * @see src/API/exam/APRActions.ts - getAprDetails函数
  620. */
  621. export function mockGetAprDetailsComplete() {
  622. cy.intercept('GET', '/dr/api/v1/auth/protocol/view/*/apr*', {
  623. statusCode: 200,
  624. body: {
  625. code: "0x000000",
  626. description: "Success",
  627. solution: "",
  628. data: {
  629. "@type": "type.googleapis.com/dr.protocol.APR",
  630. apr_id: "View_DX_T_A_SK_AP_00",
  631. apr_name: "颅骨前后位APR",
  632. apr_description: "颅骨前后位曝光参数",
  633. patient_type: "Human",
  634. body_part_id: "Human_SKULL",
  635. view_position: "AP",
  636. category: "DX",
  637. modality: "DX",
  638. sub: [
  639. {
  640. work_station_id: 0,
  641. patient_size: "Large",
  642. config_object: {
  643. Common: {
  644. AECDensity: 0,
  645. AECField: "Center",
  646. AECFilm: 0,
  647. Dose: 100,
  648. ExposureMode: 1,
  649. Focus: 0,
  650. TOD: 100,
  651. TubeLoad: 50,
  652. kV: 70,
  653. mA: 125,
  654. mAs: 12.5,
  655. ms: 100
  656. }
  657. }
  658. },
  659. {
  660. work_station_id: 0,
  661. patient_size: "Medium",
  662. config_object: {
  663. Common: {
  664. AECDensity: 0,
  665. AECField: "Center",
  666. AECFilm: 0,
  667. Dose: 80,
  668. ExposureMode: 1,
  669. Focus: 0,
  670. TOD: 100,
  671. TubeLoad: 40,
  672. kV: 65,
  673. mA: 100,
  674. mAs: 10,
  675. ms: 100
  676. }
  677. }
  678. },
  679. {
  680. work_station_id: 0,
  681. patient_size: "Small",
  682. config_object: {
  683. Common: {
  684. AECDensity: 0,
  685. AECField: "Center",
  686. AECFilm: 0,
  687. Dose: 60,
  688. ExposureMode: 1,
  689. Focus: 0,
  690. TOD: 100,
  691. TubeLoad: 30,
  692. kV: 60,
  693. mA: 80,
  694. mAs: 8,
  695. ms: 100
  696. }
  697. }
  698. }
  699. ],
  700. sort: 1,
  701. is_enabled: true,
  702. product: "DROS",
  703. is_pre_install: true
  704. }
  705. }
  706. }).as('getAprDetailsComplete');
  707. }