aIDiagnosis.m.dart 30 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058
  1. import 'liveConsultation.m.dart';
  2. import 'package:fis_jsonrpc/utils.dart';
  3. class AIDiagnosisRect {
  4. int right;
  5. int bottom;
  6. int left;
  7. int top;
  8. int width;
  9. int height;
  10. AIDiagnosisRect({
  11. this.right = 0,
  12. this.bottom = 0,
  13. this.left = 0,
  14. this.top = 0,
  15. this.width = 0,
  16. this.height = 0,
  17. });
  18. factory AIDiagnosisRect.fromJson(Map<String, dynamic> map) {
  19. return AIDiagnosisRect(
  20. right: map['Right'],
  21. bottom: map['Bottom'],
  22. left: map['Left'],
  23. top: map['Top'],
  24. width: map['Width'],
  25. height: map['Height'],
  26. );
  27. }
  28. Map<String, dynamic> toJson() {
  29. final map = Map<String, dynamic>();
  30. map['Right'] = right;
  31. map['Bottom'] = bottom;
  32. map['Left'] = left;
  33. map['Top'] = top;
  34. map['Width'] = width;
  35. map['Height'] = height;
  36. return map;
  37. }
  38. }
  39. class AIDiagnosisPoint2D {
  40. int x;
  41. int y;
  42. AIDiagnosisPoint2D({
  43. this.x = 0,
  44. this.y = 0,
  45. });
  46. factory AIDiagnosisPoint2D.fromJson(Map<String, dynamic> map) {
  47. return AIDiagnosisPoint2D(
  48. x: map['X'],
  49. y: map['Y'],
  50. );
  51. }
  52. Map<String, dynamic> toJson() {
  53. final map = Map<String, dynamic>();
  54. map['X'] = x;
  55. map['Y'] = y;
  56. return map;
  57. }
  58. }
  59. enum DiagnosisDescriptionEnum {
  60. Shape,
  61. Orientation,
  62. EchoPattern,
  63. LesionBoundary,
  64. Margin,
  65. Calcification,
  66. LesionSize,
  67. ThyroidEchoPattern,
  68. ThyroidShape,
  69. ThyroidMargin,
  70. ThyroidEchogenicFoci,
  71. LiverShape,
  72. LiverBoundary,
  73. LiverEchoTexture,
  74. }
  75. class AIDiagnosisDescription {
  76. DiagnosisDescriptionEnum type;
  77. String? value;
  78. AIDiagnosisDescription({
  79. this.type = DiagnosisDescriptionEnum.Shape,
  80. this.value,
  81. });
  82. factory AIDiagnosisDescription.fromJson(Map<String, dynamic> map) {
  83. return AIDiagnosisDescription(
  84. type: DiagnosisDescriptionEnum.values.firstWhere((e) => e.index == map['Type']),
  85. value: map['Value'],
  86. );
  87. }
  88. Map<String, dynamic> toJson() {
  89. final map = Map<String, dynamic>();
  90. map['Type'] = type.index;
  91. if(value != null)
  92. map['Value'] = value;
  93. return map;
  94. }
  95. }
  96. class AIDetectedObject {
  97. int label;
  98. double confidence;
  99. AIDiagnosisRect? boundingBox;
  100. List<AIDiagnosisPoint2D >? contours;
  101. List<AIDiagnosisDescription >? descriptions;
  102. AIDetectedObject({
  103. this.label = 0,
  104. this.confidence = 0,
  105. this.boundingBox,
  106. this.contours,
  107. this.descriptions,
  108. });
  109. factory AIDetectedObject.fromJson(Map<String, dynamic> map) {
  110. return AIDetectedObject(
  111. label: map['Label'],
  112. confidence: double.parse(map['Confidence'].toString()),
  113. boundingBox: map['BoundingBox'] != null ? AIDiagnosisRect.fromJson(map['BoundingBox']) : null,
  114. contours: map['Contours'] != null ? (map['Contours'] as List).map((e)=>AIDiagnosisPoint2D.fromJson(e as Map<String,dynamic>)).toList() : null,
  115. descriptions: map['Descriptions'] != null ? (map['Descriptions'] as List).map((e)=>AIDiagnosisDescription.fromJson(e as Map<String,dynamic>)).toList() : null,
  116. );
  117. }
  118. Map<String, dynamic> toJson() {
  119. final map = Map<String, dynamic>();
  120. map['Label'] = label;
  121. map['Confidence'] = confidence;
  122. if(boundingBox != null)
  123. map['BoundingBox'] = boundingBox;
  124. if(contours != null)
  125. map['Contours'] = contours;
  126. if(descriptions != null)
  127. map['Descriptions'] = descriptions;
  128. return map;
  129. }
  130. }
  131. class AIDiagnosisResultPerOrgan {
  132. DiagnosisOrganEnum organ;
  133. AIDiagnosisRect? organBoundBox;
  134. List<AIDiagnosisPoint2D >? organContours;
  135. List<AIDiagnosisDescription >? organDescriptions;
  136. List<AIDetectedObject >? detectedObjects;
  137. AIDiagnosisResultPerOrgan({
  138. this.organ = DiagnosisOrganEnum.Null,
  139. this.organBoundBox,
  140. this.organContours,
  141. this.organDescriptions,
  142. this.detectedObjects,
  143. });
  144. factory AIDiagnosisResultPerOrgan.fromJson(Map<String, dynamic> map) {
  145. return AIDiagnosisResultPerOrgan(
  146. organ: DiagnosisOrganEnum.values.firstWhere((e) => e.index == map['Organ']),
  147. organBoundBox: map['OrganBoundBox'] != null ? AIDiagnosisRect.fromJson(map['OrganBoundBox']) : null,
  148. organContours: map['OrganContours'] != null ? (map['OrganContours'] as List).map((e)=>AIDiagnosisPoint2D.fromJson(e as Map<String,dynamic>)).toList() : null,
  149. organDescriptions: map['OrganDescriptions'] != null ? (map['OrganDescriptions'] as List).map((e)=>AIDiagnosisDescription.fromJson(e as Map<String,dynamic>)).toList() : null,
  150. detectedObjects: map['DetectedObjects'] != null ? (map['DetectedObjects'] as List).map((e)=>AIDetectedObject.fromJson(e as Map<String,dynamic>)).toList() : null,
  151. );
  152. }
  153. Map<String, dynamic> toJson() {
  154. final map = Map<String, dynamic>();
  155. map['Organ'] = organ.index;
  156. if(organBoundBox != null)
  157. map['OrganBoundBox'] = organBoundBox;
  158. if(organContours != null)
  159. map['OrganContours'] = organContours;
  160. if(organDescriptions != null)
  161. map['OrganDescriptions'] = organDescriptions;
  162. if(detectedObjects != null)
  163. map['DetectedObjects'] = detectedObjects;
  164. return map;
  165. }
  166. }
  167. class AIDiagnosisPerImageDTO {
  168. int index;
  169. double priorityScore;
  170. List<AIDiagnosisResultPerOrgan >? diagResultsForEachOrgan;
  171. AIDiagnosisPerImageDTO({
  172. this.index = 0,
  173. this.priorityScore = 0,
  174. this.diagResultsForEachOrgan,
  175. });
  176. factory AIDiagnosisPerImageDTO.fromJson(Map<String, dynamic> map) {
  177. return AIDiagnosisPerImageDTO(
  178. index: map['Index'],
  179. priorityScore: double.parse(map['PriorityScore'].toString()),
  180. diagResultsForEachOrgan: map['DiagResultsForEachOrgan'] != null ? (map['DiagResultsForEachOrgan'] as List).map((e)=>AIDiagnosisResultPerOrgan.fromJson(e as Map<String,dynamic>)).toList() : null,
  181. );
  182. }
  183. Map<String, dynamic> toJson() {
  184. final map = Map<String, dynamic>();
  185. map['Index'] = index;
  186. map['PriorityScore'] = priorityScore;
  187. if(diagResultsForEachOrgan != null)
  188. map['DiagResultsForEachOrgan'] = diagResultsForEachOrgan;
  189. return map;
  190. }
  191. }
  192. class DiagnosisImageResult {
  193. DiagnosisConclusionEnum diagnosisConclusion;
  194. List<AIDiagnosisPerImageDTO >? diagnosisResult;
  195. List<DiagnosisOrganEnum >? diagnosisOrgans;
  196. CarotidResultDTO? carotidResult;
  197. DiagnosisImageResult({
  198. this.diagnosisConclusion = DiagnosisConclusionEnum.NotRequired,
  199. this.diagnosisResult,
  200. this.diagnosisOrgans,
  201. this.carotidResult,
  202. });
  203. factory DiagnosisImageResult.fromJson(Map<String, dynamic> map) {
  204. return DiagnosisImageResult(
  205. diagnosisConclusion: DiagnosisConclusionEnum.values.firstWhere((e) => e.index == map['DiagnosisConclusion']),
  206. diagnosisResult: map['DiagnosisResult'] != null ? (map['DiagnosisResult'] as List).map((e)=>AIDiagnosisPerImageDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
  207. diagnosisOrgans: map['DiagnosisOrgans'] != null ? (map['DiagnosisOrgans'] as List).map((e)=>DiagnosisOrganEnum.values.firstWhere((i) => i.index == e)).toList() : null,
  208. carotidResult: map['CarotidResult'] != null ? CarotidResultDTO.fromJson(map['CarotidResult']) : null,
  209. );
  210. }
  211. Map<String, dynamic> toJson() {
  212. final map = Map<String, dynamic>();
  213. map['DiagnosisConclusion'] = diagnosisConclusion.index;
  214. if(diagnosisResult != null)
  215. map['DiagnosisResult'] = diagnosisResult;
  216. if(diagnosisOrgans != null)
  217. map['DiagnosisOrgans'] = diagnosisOrgans;
  218. if(carotidResult != null)
  219. map['CarotidResult'] = carotidResult;
  220. return map;
  221. }
  222. }
  223. class DiagnosisImageRequest extends TokenRequest{
  224. String? fileToken;
  225. String? diskPath;
  226. String? relationCode;
  227. DiagnosisImageRequest({
  228. this.fileToken,
  229. this.diskPath,
  230. this.relationCode,
  231. String? token,
  232. }) : super(
  233. token: token,
  234. );
  235. factory DiagnosisImageRequest.fromJson(Map<String, dynamic> map) {
  236. return DiagnosisImageRequest(
  237. fileToken: map['FileToken'],
  238. diskPath: map['DiskPath'],
  239. relationCode: map['RelationCode'],
  240. token: map['Token'],
  241. );
  242. }
  243. Map<String, dynamic> toJson() {
  244. final map = super.toJson();
  245. if(fileToken != null)
  246. map['FileToken'] = fileToken;
  247. if(diskPath != null)
  248. map['DiskPath'] = diskPath;
  249. if(relationCode != null)
  250. map['RelationCode'] = relationCode;
  251. return map;
  252. }
  253. }
  254. class GetDiagnosisImageResultByAIResultRequest {
  255. String? fileUrl;
  256. String? relationCode;
  257. DateTime? createTime;
  258. DateTime? updateTime;
  259. String? aiResult;
  260. GetDiagnosisImageResultByAIResultRequest({
  261. this.fileUrl,
  262. this.relationCode,
  263. this.createTime,
  264. this.updateTime,
  265. this.aiResult,
  266. });
  267. factory GetDiagnosisImageResultByAIResultRequest.fromJson(Map<String, dynamic> map) {
  268. return GetDiagnosisImageResultByAIResultRequest(
  269. fileUrl: map['FileUrl'],
  270. relationCode: map['RelationCode'],
  271. createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
  272. updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,
  273. aiResult: map['AiResult'],
  274. );
  275. }
  276. Map<String, dynamic> toJson() {
  277. final map = Map<String, dynamic>();
  278. if(fileUrl != null)
  279. map['FileUrl'] = fileUrl;
  280. if(relationCode != null)
  281. map['RelationCode'] = relationCode;
  282. if(createTime != null)
  283. map['CreateTime'] = JsonRpcUtils.dateFormat(createTime!);
  284. if(updateTime != null)
  285. map['UpdateTime'] = JsonRpcUtils.dateFormat(updateTime!);
  286. if(aiResult != null)
  287. map['AiResult'] = aiResult;
  288. return map;
  289. }
  290. }
  291. class GetCarotidResultRequest {
  292. String? remedicalCode;
  293. String? surfaceToken;
  294. String? mdlToken;
  295. CarotidScanTypeEnum carotidScanType;
  296. CarotidScanDirectionEnum carotidScanDirection;
  297. List<MeasureImageFileDTO >? measureImageFiles;
  298. String? measureResult;
  299. GetCarotidResultRequest({
  300. this.remedicalCode,
  301. this.surfaceToken,
  302. this.mdlToken,
  303. this.carotidScanType = CarotidScanTypeEnum.CarotidLeft,
  304. this.carotidScanDirection = CarotidScanDirectionEnum.TopToBottom,
  305. this.measureImageFiles,
  306. this.measureResult,
  307. });
  308. factory GetCarotidResultRequest.fromJson(Map<String, dynamic> map) {
  309. return GetCarotidResultRequest(
  310. remedicalCode: map['RemedicalCode'],
  311. surfaceToken: map['SurfaceToken'],
  312. mdlToken: map['MdlToken'],
  313. carotidScanType: CarotidScanTypeEnum.values.firstWhere((e) => e.index == map['CarotidScanType']),
  314. carotidScanDirection: CarotidScanDirectionEnum.values.firstWhere((e) => e.index == map['CarotidScanDirection']),
  315. measureImageFiles: map['MeasureImageFiles'] != null ? (map['MeasureImageFiles'] as List).map((e)=>MeasureImageFileDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
  316. measureResult: map['MeasureResult'],
  317. );
  318. }
  319. Map<String, dynamic> toJson() {
  320. final map = Map<String, dynamic>();
  321. if(remedicalCode != null)
  322. map['RemedicalCode'] = remedicalCode;
  323. if(surfaceToken != null)
  324. map['SurfaceToken'] = surfaceToken;
  325. if(mdlToken != null)
  326. map['MdlToken'] = mdlToken;
  327. map['CarotidScanType'] = carotidScanType.index;
  328. map['CarotidScanDirection'] = carotidScanDirection.index;
  329. if(measureImageFiles != null)
  330. map['MeasureImageFiles'] = measureImageFiles;
  331. if(measureResult != null)
  332. map['MeasureResult'] = measureResult;
  333. return map;
  334. }
  335. }
  336. class CreateCarotidSurfaceImagesResult {
  337. List<String >? surfaceImages;
  338. CreateCarotidSurfaceImagesResult({
  339. this.surfaceImages,
  340. });
  341. factory CreateCarotidSurfaceImagesResult.fromJson(Map<String, dynamic> map) {
  342. return CreateCarotidSurfaceImagesResult(
  343. surfaceImages: map['SurfaceImages'] != null ? map['SurfaceImages'].cast<String>().toList() : null,
  344. );
  345. }
  346. Map<String, dynamic> toJson() {
  347. final map = Map<String, dynamic>();
  348. if(surfaceImages != null)
  349. map['SurfaceImages'] = surfaceImages;
  350. return map;
  351. }
  352. }
  353. class CreateCarotidSurfaceImagesRequest {
  354. String? surfaceFileUrl;
  355. CreateCarotidSurfaceImagesRequest({
  356. this.surfaceFileUrl,
  357. });
  358. factory CreateCarotidSurfaceImagesRequest.fromJson(Map<String, dynamic> map) {
  359. return CreateCarotidSurfaceImagesRequest(
  360. surfaceFileUrl: map['SurfaceFileUrl'],
  361. );
  362. }
  363. Map<String, dynamic> toJson() {
  364. final map = Map<String, dynamic>();
  365. if(surfaceFileUrl != null)
  366. map['SurfaceFileUrl'] = surfaceFileUrl;
  367. return map;
  368. }
  369. }
  370. class DiagnosisPerImageDTO extends AIDiagnosisPerImageDTO{
  371. String? remedicalCode;
  372. RemedicalFileDataTypeEnum dataType;
  373. double pixel;
  374. String? remedicalFileToken;
  375. String? aIFileToken;
  376. String? aIPreviewFileToken;
  377. String? perImageJson;
  378. DiagnosisConclusionEnum diagnosisConclusion;
  379. List<DiagnosisOrganEnum >? diagnosisOrgans;
  380. DiagnosisPerImageDTO({
  381. this.remedicalCode,
  382. this.dataType = RemedicalFileDataTypeEnum.VinnoVidSingle,
  383. this.pixel = 0,
  384. this.remedicalFileToken,
  385. this.aIFileToken,
  386. this.aIPreviewFileToken,
  387. this.perImageJson,
  388. this.diagnosisConclusion = DiagnosisConclusionEnum.NotRequired,
  389. this.diagnosisOrgans,
  390. int index = 0,
  391. double priorityScore = 0,
  392. List<AIDiagnosisResultPerOrgan >? diagResultsForEachOrgan,
  393. }) : super(
  394. index: index,
  395. priorityScore: priorityScore,
  396. diagResultsForEachOrgan: diagResultsForEachOrgan,
  397. );
  398. factory DiagnosisPerImageDTO.fromJson(Map<String, dynamic> map) {
  399. return DiagnosisPerImageDTO(
  400. remedicalCode: map['RemedicalCode'],
  401. dataType: RemedicalFileDataTypeEnum.values.firstWhere((e) => e.index == map['DataType']),
  402. pixel: double.parse(map['Pixel'].toString()),
  403. remedicalFileToken: map['RemedicalFileToken'],
  404. aIFileToken: map['AIFileToken'],
  405. aIPreviewFileToken: map['AIPreviewFileToken'],
  406. perImageJson: map['PerImageJson'],
  407. diagnosisConclusion: DiagnosisConclusionEnum.values.firstWhere((e) => e.index == map['DiagnosisConclusion']),
  408. diagnosisOrgans: map['DiagnosisOrgans'] != null ? (map['DiagnosisOrgans'] as List).map((e)=>DiagnosisOrganEnum.values.firstWhere((i) => i.index == e)).toList() : null,
  409. index: map['Index'],
  410. priorityScore: double.parse(map['PriorityScore'].toString()),
  411. diagResultsForEachOrgan: map['DiagResultsForEachOrgan'] != null ? (map['DiagResultsForEachOrgan'] as List).map((e)=>AIDiagnosisResultPerOrgan.fromJson(e as Map<String,dynamic>)).toList() : null,
  412. );
  413. }
  414. Map<String, dynamic> toJson() {
  415. final map = super.toJson();
  416. if(remedicalCode != null)
  417. map['RemedicalCode'] = remedicalCode;
  418. map['DataType'] = dataType.index;
  419. map['Pixel'] = pixel;
  420. if(remedicalFileToken != null)
  421. map['RemedicalFileToken'] = remedicalFileToken;
  422. if(aIFileToken != null)
  423. map['AIFileToken'] = aIFileToken;
  424. if(aIPreviewFileToken != null)
  425. map['AIPreviewFileToken'] = aIPreviewFileToken;
  426. if(perImageJson != null)
  427. map['PerImageJson'] = perImageJson;
  428. map['DiagnosisConclusion'] = diagnosisConclusion.index;
  429. if(diagnosisOrgans != null)
  430. map['DiagnosisOrgans'] = diagnosisOrgans;
  431. return map;
  432. }
  433. }
  434. class DiagnosisRemicalDTO {
  435. String? remedicalCode;
  436. RemedicalFileDataTypeEnum dataType;
  437. String? fileToken;
  438. List<AIDiagnosisPerImageDTO >? diagnosisResult;
  439. CarotidResultDTO? carotidResult;
  440. DiagnosisRemicalDTO({
  441. this.remedicalCode,
  442. this.dataType = RemedicalFileDataTypeEnum.VinnoVidSingle,
  443. this.fileToken,
  444. this.diagnosisResult,
  445. this.carotidResult,
  446. });
  447. factory DiagnosisRemicalDTO.fromJson(Map<String, dynamic> map) {
  448. return DiagnosisRemicalDTO(
  449. remedicalCode: map['RemedicalCode'],
  450. dataType: RemedicalFileDataTypeEnum.values.firstWhere((e) => e.index == map['DataType']),
  451. fileToken: map['FileToken'],
  452. diagnosisResult: map['DiagnosisResult'] != null ? (map['DiagnosisResult'] as List).map((e)=>AIDiagnosisPerImageDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
  453. carotidResult: map['CarotidResult'] != null ? CarotidResultDTO.fromJson(map['CarotidResult']) : null,
  454. );
  455. }
  456. Map<String, dynamic> toJson() {
  457. final map = Map<String, dynamic>();
  458. if(remedicalCode != null)
  459. map['RemedicalCode'] = remedicalCode;
  460. map['DataType'] = dataType.index;
  461. if(fileToken != null)
  462. map['FileToken'] = fileToken;
  463. if(diagnosisResult != null)
  464. map['DiagnosisResult'] = diagnosisResult;
  465. if(carotidResult != null)
  466. map['CarotidResult'] = carotidResult;
  467. return map;
  468. }
  469. }
  470. class DiagnosisReportResult {
  471. DiagnosisConclusionEnum diagnosisConclusion;
  472. List<DiagnosisPerImageDTO >? diagnosisResult;
  473. List<DiagnosisRemicalDTO >? carotidResult;
  474. DiagnosisReportResult({
  475. this.diagnosisConclusion = DiagnosisConclusionEnum.NotRequired,
  476. this.diagnosisResult,
  477. this.carotidResult,
  478. });
  479. factory DiagnosisReportResult.fromJson(Map<String, dynamic> map) {
  480. return DiagnosisReportResult(
  481. diagnosisConclusion: DiagnosisConclusionEnum.values.firstWhere((e) => e.index == map['DiagnosisConclusion']),
  482. diagnosisResult: map['DiagnosisResult'] != null ? (map['DiagnosisResult'] as List).map((e)=>DiagnosisPerImageDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
  483. carotidResult: map['CarotidResult'] != null ? (map['CarotidResult'] as List).map((e)=>DiagnosisRemicalDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
  484. );
  485. }
  486. Map<String, dynamic> toJson() {
  487. final map = Map<String, dynamic>();
  488. map['DiagnosisConclusion'] = diagnosisConclusion.index;
  489. if(diagnosisResult != null)
  490. map['DiagnosisResult'] = diagnosisResult;
  491. if(carotidResult != null)
  492. map['CarotidResult'] = carotidResult;
  493. return map;
  494. }
  495. }
  496. class DiagnosisReportRequest extends TokenRequest{
  497. DiagnosisOrganEnum organ;
  498. List<DiagnosisRemicalDTO >? remedicalList;
  499. DiagnosisReportRequest({
  500. this.organ = DiagnosisOrganEnum.Null,
  501. this.remedicalList,
  502. String? token,
  503. }) : super(
  504. token: token,
  505. );
  506. factory DiagnosisReportRequest.fromJson(Map<String, dynamic> map) {
  507. return DiagnosisReportRequest(
  508. organ: DiagnosisOrganEnum.values.firstWhere((e) => e.index == map['Organ']),
  509. remedicalList: map['RemedicalList'] != null ? (map['RemedicalList'] as List).map((e)=>DiagnosisRemicalDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
  510. token: map['Token'],
  511. );
  512. }
  513. Map<String, dynamic> toJson() {
  514. final map = super.toJson();
  515. map['Organ'] = organ.index;
  516. if(remedicalList != null)
  517. map['RemedicalList'] = remedicalList;
  518. return map;
  519. }
  520. }
  521. class GetDiagnosisConclusionResult {
  522. DiagnosisConclusionEnum diagnosisConclusion;
  523. List<DiagnosisOrganEnum >? diagnosisOrgans;
  524. GetDiagnosisConclusionResult({
  525. this.diagnosisConclusion = DiagnosisConclusionEnum.NotRequired,
  526. this.diagnosisOrgans,
  527. });
  528. factory GetDiagnosisConclusionResult.fromJson(Map<String, dynamic> map) {
  529. return GetDiagnosisConclusionResult(
  530. diagnosisConclusion: DiagnosisConclusionEnum.values.firstWhere((e) => e.index == map['DiagnosisConclusion']),
  531. diagnosisOrgans: map['DiagnosisOrgans'] != null ? (map['DiagnosisOrgans'] as List).map((e)=>DiagnosisOrganEnum.values.firstWhere((i) => i.index == e)).toList() : null,
  532. );
  533. }
  534. Map<String, dynamic> toJson() {
  535. final map = Map<String, dynamic>();
  536. map['DiagnosisConclusion'] = diagnosisConclusion.index;
  537. if(diagnosisOrgans != null)
  538. map['DiagnosisOrgans'] = diagnosisOrgans;
  539. return map;
  540. }
  541. }
  542. class GetDiagnosisConclusionRequest extends TokenRequest{
  543. String? perImageJson;
  544. GetDiagnosisConclusionRequest({
  545. this.perImageJson,
  546. String? token,
  547. }) : super(
  548. token: token,
  549. );
  550. factory GetDiagnosisConclusionRequest.fromJson(Map<String, dynamic> map) {
  551. return GetDiagnosisConclusionRequest(
  552. perImageJson: map['PerImageJson'],
  553. token: map['Token'],
  554. );
  555. }
  556. Map<String, dynamic> toJson() {
  557. final map = super.toJson();
  558. if(perImageJson != null)
  559. map['PerImageJson'] = perImageJson;
  560. return map;
  561. }
  562. }
  563. class EnumFieldDTO {
  564. int id;
  565. String? value;
  566. EnumFieldDTO({
  567. this.id = 0,
  568. this.value,
  569. });
  570. factory EnumFieldDTO.fromJson(Map<String, dynamic> map) {
  571. return EnumFieldDTO(
  572. id: map['Id'],
  573. value: map['Value'],
  574. );
  575. }
  576. Map<String, dynamic> toJson() {
  577. final map = Map<String, dynamic>();
  578. map['Id'] = id;
  579. if(value != null)
  580. map['Value'] = value;
  581. return map;
  582. }
  583. }
  584. class EnumItemDTO {
  585. String? code;
  586. List<EnumFieldDTO >? children;
  587. EnumItemDTO({
  588. this.code,
  589. this.children,
  590. });
  591. factory EnumItemDTO.fromJson(Map<String, dynamic> map) {
  592. return EnumItemDTO(
  593. code: map['Code'],
  594. children: map['Children'] != null ? (map['Children'] as List).map((e)=>EnumFieldDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
  595. );
  596. }
  597. Map<String, dynamic> toJson() {
  598. final map = Map<String, dynamic>();
  599. if(code != null)
  600. map['Code'] = code;
  601. if(children != null)
  602. map['Children'] = children;
  603. return map;
  604. }
  605. }
  606. class GetDiagnosisEnumItemsResult {
  607. List<EnumItemDTO >? source;
  608. GetDiagnosisEnumItemsResult({
  609. this.source,
  610. });
  611. factory GetDiagnosisEnumItemsResult.fromJson(Map<String, dynamic> map) {
  612. return GetDiagnosisEnumItemsResult(
  613. source: map['Source'] != null ? (map['Source'] as List).map((e)=>EnumItemDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
  614. );
  615. }
  616. Map<String, dynamic> toJson() {
  617. final map = Map<String, dynamic>();
  618. if(source != null)
  619. map['Source'] = source;
  620. return map;
  621. }
  622. }
  623. class GetDiagnosisEnumItemsRequest extends TokenRequest{
  624. GetDiagnosisEnumItemsRequest({
  625. String? token,
  626. }) : super(
  627. token: token,
  628. );
  629. factory GetDiagnosisEnumItemsRequest.fromJson(Map<String, dynamic> map) {
  630. return GetDiagnosisEnumItemsRequest(
  631. token: map['Token'],
  632. );
  633. }
  634. Map<String, dynamic> toJson() {
  635. final map = super.toJson();
  636. return map;
  637. }
  638. }
  639. enum DiagnosisKeyPointType {
  640. Null,
  641. OtherKeyPoints,
  642. HorizontalPointLeft,
  643. HorizontalPointRight,
  644. VerticalPointUp,
  645. VerticalPointDown,
  646. }
  647. class DiagnosisKeyPointDTO {
  648. DiagnosisKeyPointType type;
  649. AIDiagnosisPoint2D? point;
  650. int indexInContour;
  651. DiagnosisKeyPointDTO({
  652. this.type = DiagnosisKeyPointType.Null,
  653. this.point,
  654. this.indexInContour = 0,
  655. });
  656. factory DiagnosisKeyPointDTO.fromJson(Map<String, dynamic> map) {
  657. return DiagnosisKeyPointDTO(
  658. type: DiagnosisKeyPointType.values.firstWhere((e) => e.index == map['Type']),
  659. point: map['Point'] != null ? AIDiagnosisPoint2D.fromJson(map['Point']) : null,
  660. indexInContour: map['IndexInContour'],
  661. );
  662. }
  663. Map<String, dynamic> toJson() {
  664. final map = Map<String, dynamic>();
  665. map['Type'] = type.index;
  666. if(point != null)
  667. map['Point'] = point;
  668. map['IndexInContour'] = indexInContour;
  669. return map;
  670. }
  671. }
  672. class AIDiagnosisLesionSize {
  673. AIDiagnosisPoint2D? horizontalPoint1;
  674. AIDiagnosisPoint2D? horizontalPoint2;
  675. AIDiagnosisPoint2D? verticalPoint1;
  676. AIDiagnosisPoint2D? verticalPoint2;
  677. int horizontalLengthInPixel;
  678. int verticalLengthInPixel;
  679. AIDiagnosisLesionSize({
  680. this.horizontalPoint1,
  681. this.horizontalPoint2,
  682. this.verticalPoint1,
  683. this.verticalPoint2,
  684. this.horizontalLengthInPixel = 0,
  685. this.verticalLengthInPixel = 0,
  686. });
  687. factory AIDiagnosisLesionSize.fromJson(Map<String, dynamic> map) {
  688. return AIDiagnosisLesionSize(
  689. horizontalPoint1: map['HorizontalPoint1'] != null ? AIDiagnosisPoint2D.fromJson(map['HorizontalPoint1']) : null,
  690. horizontalPoint2: map['HorizontalPoint2'] != null ? AIDiagnosisPoint2D.fromJson(map['HorizontalPoint2']) : null,
  691. verticalPoint1: map['VerticalPoint1'] != null ? AIDiagnosisPoint2D.fromJson(map['VerticalPoint1']) : null,
  692. verticalPoint2: map['VerticalPoint2'] != null ? AIDiagnosisPoint2D.fromJson(map['VerticalPoint2']) : null,
  693. horizontalLengthInPixel: map['HorizontalLengthInPixel'],
  694. verticalLengthInPixel: map['VerticalLengthInPixel'],
  695. );
  696. }
  697. Map<String, dynamic> toJson() {
  698. final map = Map<String, dynamic>();
  699. if(horizontalPoint1 != null)
  700. map['HorizontalPoint1'] = horizontalPoint1;
  701. if(horizontalPoint2 != null)
  702. map['HorizontalPoint2'] = horizontalPoint2;
  703. if(verticalPoint1 != null)
  704. map['VerticalPoint1'] = verticalPoint1;
  705. if(verticalPoint2 != null)
  706. map['VerticalPoint2'] = verticalPoint2;
  707. map['HorizontalLengthInPixel'] = horizontalLengthInPixel;
  708. map['VerticalLengthInPixel'] = verticalLengthInPixel;
  709. return map;
  710. }
  711. }
  712. class GetKeyPointsOfContourRequest extends TokenRequest{
  713. List<AIDiagnosisPoint2D >? contours;
  714. AIDiagnosisLesionSize? lesionSize;
  715. GetKeyPointsOfContourRequest({
  716. this.contours,
  717. this.lesionSize,
  718. String? token,
  719. }) : super(
  720. token: token,
  721. );
  722. factory GetKeyPointsOfContourRequest.fromJson(Map<String, dynamic> map) {
  723. return GetKeyPointsOfContourRequest(
  724. contours: map['Contours'] != null ? (map['Contours'] as List).map((e)=>AIDiagnosisPoint2D.fromJson(e as Map<String,dynamic>)).toList() : null,
  725. lesionSize: map['LesionSize'] != null ? AIDiagnosisLesionSize.fromJson(map['LesionSize']) : null,
  726. token: map['Token'],
  727. );
  728. }
  729. Map<String, dynamic> toJson() {
  730. final map = super.toJson();
  731. if(contours != null)
  732. map['Contours'] = contours;
  733. if(lesionSize != null)
  734. map['LesionSize'] = lesionSize;
  735. return map;
  736. }
  737. }
  738. class AffectedKeyPointsByDragActionRequest extends TokenRequest{
  739. List<DiagnosisKeyPointDTO >? keyPoints;
  740. AIDiagnosisPoint2D? mousePoint;
  741. AffectedKeyPointsByDragActionRequest({
  742. this.keyPoints,
  743. this.mousePoint,
  744. String? token,
  745. }) : super(
  746. token: token,
  747. );
  748. factory AffectedKeyPointsByDragActionRequest.fromJson(Map<String, dynamic> map) {
  749. return AffectedKeyPointsByDragActionRequest(
  750. keyPoints: map['KeyPoints'] != null ? (map['KeyPoints'] as List).map((e)=>DiagnosisKeyPointDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
  751. mousePoint: map['MousePoint'] != null ? AIDiagnosisPoint2D.fromJson(map['MousePoint']) : null,
  752. token: map['Token'],
  753. );
  754. }
  755. Map<String, dynamic> toJson() {
  756. final map = super.toJson();
  757. if(keyPoints != null)
  758. map['KeyPoints'] = keyPoints;
  759. if(mousePoint != null)
  760. map['MousePoint'] = mousePoint;
  761. return map;
  762. }
  763. }
  764. class ContourAndKeyPointsAfterDragResult {
  765. List<AIDiagnosisPoint2D >? dstContours;
  766. List<DiagnosisKeyPointDTO >? dstKeyPoints;
  767. List<int >? affectedKeyPointIndexes;
  768. ContourAndKeyPointsAfterDragResult({
  769. this.dstContours,
  770. this.dstKeyPoints,
  771. this.affectedKeyPointIndexes,
  772. });
  773. factory ContourAndKeyPointsAfterDragResult.fromJson(Map<String, dynamic> map) {
  774. return ContourAndKeyPointsAfterDragResult(
  775. dstContours: map['DstContours'] != null ? (map['DstContours'] as List).map((e)=>AIDiagnosisPoint2D.fromJson(e as Map<String,dynamic>)).toList() : null,
  776. dstKeyPoints: map['DstKeyPoints'] != null ? (map['DstKeyPoints'] as List).map((e)=>DiagnosisKeyPointDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
  777. affectedKeyPointIndexes: map['AffectedKeyPointIndexes'] != null ? map['AffectedKeyPointIndexes'].cast<int>().toList() : null,
  778. );
  779. }
  780. Map<String, dynamic> toJson() {
  781. final map = Map<String, dynamic>();
  782. if(dstContours != null)
  783. map['DstContours'] = dstContours;
  784. if(dstKeyPoints != null)
  785. map['DstKeyPoints'] = dstKeyPoints;
  786. if(affectedKeyPointIndexes != null)
  787. map['AffectedKeyPointIndexes'] = affectedKeyPointIndexes;
  788. return map;
  789. }
  790. }
  791. class ContourAndKeyPointsAfterDragRequest extends TokenRequest{
  792. List<AIDiagnosisPoint2D >? contours;
  793. List<DiagnosisKeyPointDTO >? keyPoints;
  794. AIDiagnosisPoint2D? startPoint;
  795. AIDiagnosisPoint2D? endPoint;
  796. ContourAndKeyPointsAfterDragRequest({
  797. this.contours,
  798. this.keyPoints,
  799. this.startPoint,
  800. this.endPoint,
  801. String? token,
  802. }) : super(
  803. token: token,
  804. );
  805. factory ContourAndKeyPointsAfterDragRequest.fromJson(Map<String, dynamic> map) {
  806. return ContourAndKeyPointsAfterDragRequest(
  807. contours: map['Contours'] != null ? (map['Contours'] as List).map((e)=>AIDiagnosisPoint2D.fromJson(e as Map<String,dynamic>)).toList() : null,
  808. keyPoints: map['KeyPoints'] != null ? (map['KeyPoints'] as List).map((e)=>DiagnosisKeyPointDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
  809. startPoint: map['StartPoint'] != null ? AIDiagnosisPoint2D.fromJson(map['StartPoint']) : null,
  810. endPoint: map['EndPoint'] != null ? AIDiagnosisPoint2D.fromJson(map['EndPoint']) : null,
  811. token: map['Token'],
  812. );
  813. }
  814. Map<String, dynamic> toJson() {
  815. final map = super.toJson();
  816. if(contours != null)
  817. map['Contours'] = contours;
  818. if(keyPoints != null)
  819. map['KeyPoints'] = keyPoints;
  820. if(startPoint != null)
  821. map['StartPoint'] = startPoint;
  822. if(endPoint != null)
  823. map['EndPoint'] = endPoint;
  824. return map;
  825. }
  826. }
  827. class MinimumDistanceToContourPointsResult {
  828. double distanceCaught;
  829. int closestPointIndex;
  830. MinimumDistanceToContourPointsResult({
  831. this.distanceCaught = 0,
  832. this.closestPointIndex = 0,
  833. });
  834. factory MinimumDistanceToContourPointsResult.fromJson(Map<String, dynamic> map) {
  835. return MinimumDistanceToContourPointsResult(
  836. distanceCaught: double.parse(map['DistanceCaught'].toString()),
  837. closestPointIndex: map['ClosestPointIndex'],
  838. );
  839. }
  840. Map<String, dynamic> toJson() {
  841. final map = Map<String, dynamic>();
  842. map['DistanceCaught'] = distanceCaught;
  843. map['ClosestPointIndex'] = closestPointIndex;
  844. return map;
  845. }
  846. }
  847. class MinimumDistanceToContourPointsRequest extends TokenRequest{
  848. List<AIDiagnosisPoint2D >? contourPoints;
  849. AIDiagnosisPoint2D? mousePoint;
  850. MinimumDistanceToContourPointsRequest({
  851. this.contourPoints,
  852. this.mousePoint,
  853. String? token,
  854. }) : super(
  855. token: token,
  856. );
  857. factory MinimumDistanceToContourPointsRequest.fromJson(Map<String, dynamic> map) {
  858. return MinimumDistanceToContourPointsRequest(
  859. contourPoints: map['ContourPoints'] != null ? (map['ContourPoints'] as List).map((e)=>AIDiagnosisPoint2D.fromJson(e as Map<String,dynamic>)).toList() : null,
  860. mousePoint: map['MousePoint'] != null ? AIDiagnosisPoint2D.fromJson(map['MousePoint']) : null,
  861. token: map['Token'],
  862. );
  863. }
  864. Map<String, dynamic> toJson() {
  865. final map = super.toJson();
  866. if(contourPoints != null)
  867. map['ContourPoints'] = contourPoints;
  868. if(mousePoint != null)
  869. map['MousePoint'] = mousePoint;
  870. return map;
  871. }
  872. }
  873. class ContourMergeResult {
  874. List<AIDiagnosisPoint2D >? dstContours;
  875. AIDiagnosisLesionSize? dstLesionSize;
  876. ContourMergeResult({
  877. this.dstContours,
  878. this.dstLesionSize,
  879. });
  880. factory ContourMergeResult.fromJson(Map<String, dynamic> map) {
  881. return ContourMergeResult(
  882. dstContours: map['DstContours'] != null ? (map['DstContours'] as List).map((e)=>AIDiagnosisPoint2D.fromJson(e as Map<String,dynamic>)).toList() : null,
  883. dstLesionSize: map['DstLesionSize'] != null ? AIDiagnosisLesionSize.fromJson(map['DstLesionSize']) : null,
  884. );
  885. }
  886. Map<String, dynamic> toJson() {
  887. final map = Map<String, dynamic>();
  888. if(dstContours != null)
  889. map['DstContours'] = dstContours;
  890. if(dstLesionSize != null)
  891. map['DstLesionSize'] = dstLesionSize;
  892. return map;
  893. }
  894. }
  895. class ContourMergeRequest extends TokenRequest{
  896. List<AIDiagnosisPoint2D >? contourPoints;
  897. AIDiagnosisLesionSize? lesionSize;
  898. List<AIDiagnosisPoint2D >? drawingNewContourPoints;
  899. ContourMergeRequest({
  900. this.contourPoints,
  901. this.lesionSize,
  902. this.drawingNewContourPoints,
  903. String? token,
  904. }) : super(
  905. token: token,
  906. );
  907. factory ContourMergeRequest.fromJson(Map<String, dynamic> map) {
  908. return ContourMergeRequest(
  909. contourPoints: map['ContourPoints'] != null ? (map['ContourPoints'] as List).map((e)=>AIDiagnosisPoint2D.fromJson(e as Map<String,dynamic>)).toList() : null,
  910. lesionSize: map['LesionSize'] != null ? AIDiagnosisLesionSize.fromJson(map['LesionSize']) : null,
  911. drawingNewContourPoints: map['DrawingNewContourPoints'] != null ? (map['DrawingNewContourPoints'] as List).map((e)=>AIDiagnosisPoint2D.fromJson(e as Map<String,dynamic>)).toList() : null,
  912. token: map['Token'],
  913. );
  914. }
  915. Map<String, dynamic> toJson() {
  916. final map = super.toJson();
  917. if(contourPoints != null)
  918. map['ContourPoints'] = contourPoints;
  919. if(lesionSize != null)
  920. map['LesionSize'] = lesionSize;
  921. if(drawingNewContourPoints != null)
  922. map['DrawingNewContourPoints'] = drawingNewContourPoints;
  923. return map;
  924. }
  925. }