aIDiagnosis.m.dart 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563
  1. class BaseRequest {
  2. BaseRequest();
  3. factory BaseRequest.fromJson(Map<String, dynamic> map) {
  4. return BaseRequest(
  5. );
  6. }
  7. Map<String, dynamic> toJson() {
  8. final map = Map<String, dynamic>();
  9. return map;
  10. }
  11. }
  12. class TokenRequest extends BaseRequest{
  13. String? token;
  14. TokenRequest({
  15. this.token,
  16. }) : super(
  17. );
  18. factory TokenRequest.fromJson(Map<String, dynamic> map) {
  19. return TokenRequest(
  20. token: map['Token'],
  21. );
  22. }
  23. Map<String, dynamic> toJson() {
  24. final map = super.toJson();
  25. if(token != null)
  26. map['Token'] = token;
  27. return map;
  28. }
  29. }
  30. enum DiagnosisConclusionEnum {
  31. NotRequired,
  32. InProcess,
  33. Unrecognized,
  34. NoObviousLesion,
  35. Benign,
  36. Malignant,
  37. BenignAndMalignant,
  38. }
  39. enum DiagnosisOrganEnum {
  40. Null,
  41. placeHolder_1,
  42. Breast,
  43. Abdomen,
  44. Liver,
  45. Cholecyst,
  46. Kidney,
  47. Spleen,
  48. CarotidArtery,
  49. }
  50. class AIDiagnosisRect {
  51. int right;
  52. int bottom;
  53. int left;
  54. int top;
  55. int width;
  56. int height;
  57. AIDiagnosisRect({
  58. this.right = 0,
  59. this.bottom = 0,
  60. this.left = 0,
  61. this.top = 0,
  62. this.width = 0,
  63. this.height = 0,
  64. });
  65. factory AIDiagnosisRect.fromJson(Map<String, dynamic> map) {
  66. return AIDiagnosisRect(
  67. right: map['Right'],
  68. bottom: map['Bottom'],
  69. left: map['Left'],
  70. top: map['Top'],
  71. width: map['Width'],
  72. height: map['Height'],
  73. );
  74. }
  75. Map<String, dynamic> toJson() {
  76. final map = Map<String, dynamic>();
  77. map['Right'] = right;
  78. map['Bottom'] = bottom;
  79. map['Left'] = left;
  80. map['Top'] = top;
  81. map['Width'] = width;
  82. map['Height'] = height;
  83. return map;
  84. }
  85. }
  86. class AIDiagnosisPoint2D {
  87. int x;
  88. int y;
  89. AIDiagnosisPoint2D({
  90. this.x = 0,
  91. this.y = 0,
  92. });
  93. factory AIDiagnosisPoint2D.fromJson(Map<String, dynamic> map) {
  94. return AIDiagnosisPoint2D(
  95. x: map['X'],
  96. y: map['Y'],
  97. );
  98. }
  99. Map<String, dynamic> toJson() {
  100. final map = Map<String, dynamic>();
  101. map['X'] = x;
  102. map['Y'] = y;
  103. return map;
  104. }
  105. }
  106. enum DiagnosisDescriptionEnum {
  107. Shape,
  108. Orientation,
  109. EchoPattern,
  110. LesionBoundary,
  111. Margin,
  112. Calcification,
  113. LesionSize,
  114. }
  115. class AIDiagnosisDescription {
  116. DiagnosisDescriptionEnum type;
  117. String? value;
  118. AIDiagnosisDescription({
  119. this.type = DiagnosisDescriptionEnum.Shape,
  120. this.value,
  121. });
  122. factory AIDiagnosisDescription.fromJson(Map<String, dynamic> map) {
  123. return AIDiagnosisDescription(
  124. type: DiagnosisDescriptionEnum.values.firstWhere((e) => e.index == map['Type']),
  125. value: map['Value'],
  126. );
  127. }
  128. Map<String, dynamic> toJson() {
  129. final map = Map<String, dynamic>();
  130. map['Type'] = type.index;
  131. if(value != null)
  132. map['Value'] = value;
  133. return map;
  134. }
  135. }
  136. class AIDetectedObject {
  137. int label;
  138. double confidence;
  139. AIDiagnosisRect? boundingBox;
  140. List<AIDiagnosisPoint2D >? contours;
  141. List<AIDiagnosisDescription >? descriptions;
  142. AIDetectedObject({
  143. this.label = 0,
  144. this.confidence = 0,
  145. this.boundingBox,
  146. this.contours,
  147. this.descriptions,
  148. });
  149. factory AIDetectedObject.fromJson(Map<String, dynamic> map) {
  150. return AIDetectedObject(
  151. label: map['Label'],
  152. confidence: double.parse(map['Confidence'].toString()),
  153. boundingBox: map['BoundingBox'] != null ? AIDiagnosisRect.fromJson(map['BoundingBox']) : null,
  154. contours: map['Contours'] != null ? (map['Contours'] as List).map((e)=>AIDiagnosisPoint2D.fromJson(e as Map<String,dynamic>)).toList() : null,
  155. descriptions: map['Descriptions'] != null ? (map['Descriptions'] as List).map((e)=>AIDiagnosisDescription.fromJson(e as Map<String,dynamic>)).toList() : null,
  156. );
  157. }
  158. Map<String, dynamic> toJson() {
  159. final map = Map<String, dynamic>();
  160. map['Label'] = label;
  161. map['Confidence'] = confidence;
  162. if(boundingBox != null)
  163. map['BoundingBox'] = boundingBox;
  164. if(contours != null)
  165. map['Contours'] = contours;
  166. if(descriptions != null)
  167. map['Descriptions'] = descriptions;
  168. return map;
  169. }
  170. }
  171. class AIDiagnosisResultPerOrgan {
  172. DiagnosisOrganEnum organ;
  173. AIDiagnosisRect? organBoundBox;
  174. List<AIDiagnosisPoint2D >? organContours;
  175. List<AIDiagnosisDescription >? organDescriptions;
  176. List<AIDetectedObject >? detectedObjects;
  177. AIDiagnosisResultPerOrgan({
  178. this.organ = DiagnosisOrganEnum.Null,
  179. this.organBoundBox,
  180. this.organContours,
  181. this.organDescriptions,
  182. this.detectedObjects,
  183. });
  184. factory AIDiagnosisResultPerOrgan.fromJson(Map<String, dynamic> map) {
  185. return AIDiagnosisResultPerOrgan(
  186. organ: DiagnosisOrganEnum.values.firstWhere((e) => e.index == map['Organ']),
  187. organBoundBox: map['OrganBoundBox'] != null ? AIDiagnosisRect.fromJson(map['OrganBoundBox']) : null,
  188. organContours: map['OrganContours'] != null ? (map['OrganContours'] as List).map((e)=>AIDiagnosisPoint2D.fromJson(e as Map<String,dynamic>)).toList() : null,
  189. organDescriptions: map['OrganDescriptions'] != null ? (map['OrganDescriptions'] as List).map((e)=>AIDiagnosisDescription.fromJson(e as Map<String,dynamic>)).toList() : null,
  190. detectedObjects: map['DetectedObjects'] != null ? (map['DetectedObjects'] as List).map((e)=>AIDetectedObject.fromJson(e as Map<String,dynamic>)).toList() : null,
  191. );
  192. }
  193. Map<String, dynamic> toJson() {
  194. final map = Map<String, dynamic>();
  195. map['Organ'] = organ.index;
  196. if(organBoundBox != null)
  197. map['OrganBoundBox'] = organBoundBox;
  198. if(organContours != null)
  199. map['OrganContours'] = organContours;
  200. if(organDescriptions != null)
  201. map['OrganDescriptions'] = organDescriptions;
  202. if(detectedObjects != null)
  203. map['DetectedObjects'] = detectedObjects;
  204. return map;
  205. }
  206. }
  207. class AIDiagnosisPerImageDTO {
  208. int index;
  209. double priorityScore;
  210. List<AIDiagnosisResultPerOrgan >? diagResultsForEachOrgan;
  211. AIDiagnosisPerImageDTO({
  212. this.index = 0,
  213. this.priorityScore = 0,
  214. this.diagResultsForEachOrgan,
  215. });
  216. factory AIDiagnosisPerImageDTO.fromJson(Map<String, dynamic> map) {
  217. return AIDiagnosisPerImageDTO(
  218. index: map['Index'],
  219. priorityScore: double.parse(map['PriorityScore'].toString()),
  220. diagResultsForEachOrgan: map['DiagResultsForEachOrgan'] != null ? (map['DiagResultsForEachOrgan'] as List).map((e)=>AIDiagnosisResultPerOrgan.fromJson(e as Map<String,dynamic>)).toList() : null,
  221. );
  222. }
  223. Map<String, dynamic> toJson() {
  224. final map = Map<String, dynamic>();
  225. map['Index'] = index;
  226. map['PriorityScore'] = priorityScore;
  227. if(diagResultsForEachOrgan != null)
  228. map['DiagResultsForEachOrgan'] = diagResultsForEachOrgan;
  229. return map;
  230. }
  231. }
  232. enum CarotidScanTypeEnum {
  233. CarotidLeft,
  234. CarotidRight,
  235. }
  236. enum CarotidScanDirectionEnum {
  237. TopToBottom,
  238. BottomToTop,
  239. }
  240. enum CarotidAIImageTypeEnum {
  241. Base,
  242. YShape,
  243. Plaque,
  244. }
  245. class MeasureImageFileDTO {
  246. CarotidAIImageTypeEnum imageType;
  247. String? imageFile;
  248. MeasureImageFileDTO({
  249. this.imageType = CarotidAIImageTypeEnum.Base,
  250. this.imageFile,
  251. });
  252. factory MeasureImageFileDTO.fromJson(Map<String, dynamic> map) {
  253. return MeasureImageFileDTO(
  254. imageType: CarotidAIImageTypeEnum.values.firstWhere((e) => e.index == map['ImageType']),
  255. imageFile: map['ImageFile'],
  256. );
  257. }
  258. Map<String, dynamic> toJson() {
  259. final map = Map<String, dynamic>();
  260. map['ImageType'] = imageType.index;
  261. if(imageFile != null)
  262. map['ImageFile'] = imageFile;
  263. return map;
  264. }
  265. }
  266. class CarotidResultDTO {
  267. CarotidScanTypeEnum carotidScanType;
  268. CarotidScanDirectionEnum carotidScanDirection;
  269. String? surfaceFile;
  270. String? mdlFile;
  271. List<MeasureImageFileDTO >? measureImageFiles;
  272. String? measureResult;
  273. List<String >? surfaceImageList;
  274. CarotidResultDTO({
  275. this.carotidScanType = CarotidScanTypeEnum.CarotidLeft,
  276. this.carotidScanDirection = CarotidScanDirectionEnum.TopToBottom,
  277. this.surfaceFile,
  278. this.mdlFile,
  279. this.measureImageFiles,
  280. this.measureResult,
  281. this.surfaceImageList,
  282. });
  283. factory CarotidResultDTO.fromJson(Map<String, dynamic> map) {
  284. return CarotidResultDTO(
  285. carotidScanType: CarotidScanTypeEnum.values.firstWhere((e) => e.index == map['CarotidScanType']),
  286. carotidScanDirection: CarotidScanDirectionEnum.values.firstWhere((e) => e.index == map['CarotidScanDirection']),
  287. surfaceFile: map['SurfaceFile'],
  288. mdlFile: map['MdlFile'],
  289. measureImageFiles: map['MeasureImageFiles'] != null ? (map['MeasureImageFiles'] as List).map((e)=>MeasureImageFileDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
  290. measureResult: map['MeasureResult'],
  291. surfaceImageList: map['SurfaceImageList'] != null ? map['SurfaceImageList'].cast<String>().toList() : null,
  292. );
  293. }
  294. Map<String, dynamic> toJson() {
  295. final map = Map<String, dynamic>();
  296. map['CarotidScanType'] = carotidScanType.index;
  297. map['CarotidScanDirection'] = carotidScanDirection.index;
  298. if(surfaceFile != null)
  299. map['SurfaceFile'] = surfaceFile;
  300. if(mdlFile != null)
  301. map['MdlFile'] = mdlFile;
  302. if(measureImageFiles != null)
  303. map['MeasureImageFiles'] = measureImageFiles;
  304. if(measureResult != null)
  305. map['MeasureResult'] = measureResult;
  306. if(surfaceImageList != null)
  307. map['SurfaceImageList'] = surfaceImageList;
  308. return map;
  309. }
  310. }
  311. class DiagnosisImageResult {
  312. DiagnosisConclusionEnum diagnosisConclusion;
  313. List<AIDiagnosisPerImageDTO >? diagnosisResult;
  314. List<DiagnosisOrganEnum >? diagnosisOrgans;
  315. CarotidResultDTO? carotidResult;
  316. DiagnosisImageResult({
  317. this.diagnosisConclusion = DiagnosisConclusionEnum.NotRequired,
  318. this.diagnosisResult,
  319. this.diagnosisOrgans,
  320. this.carotidResult,
  321. });
  322. factory DiagnosisImageResult.fromJson(Map<String, dynamic> map) {
  323. return DiagnosisImageResult(
  324. diagnosisConclusion: DiagnosisConclusionEnum.values.firstWhere((e) => e.index == map['DiagnosisConclusion']),
  325. diagnosisResult: map['DiagnosisResult'] != null ? (map['DiagnosisResult'] as List).map((e)=>AIDiagnosisPerImageDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
  326. diagnosisOrgans: map['DiagnosisOrgans'] != null ? (map['DiagnosisOrgans'] as List).map((e)=>DiagnosisOrganEnum.values.firstWhere((i) => i.index == e)).toList() : null,
  327. carotidResult: map['CarotidResult'] != null ? CarotidResultDTO.fromJson(map['CarotidResult']) : null,
  328. );
  329. }
  330. Map<String, dynamic> toJson() {
  331. final map = Map<String, dynamic>();
  332. map['DiagnosisConclusion'] = diagnosisConclusion.index;
  333. if(diagnosisResult != null)
  334. map['DiagnosisResult'] = diagnosisResult;
  335. if(diagnosisOrgans != null)
  336. map['DiagnosisOrgans'] = diagnosisOrgans;
  337. if(carotidResult != null)
  338. map['CarotidResult'] = carotidResult;
  339. return map;
  340. }
  341. }
  342. class DiagnosisImageRequest extends TokenRequest{
  343. String? fileToken;
  344. DiagnosisImageRequest({
  345. this.fileToken,
  346. String? token,
  347. }) : super(
  348. token: token,
  349. );
  350. factory DiagnosisImageRequest.fromJson(Map<String, dynamic> map) {
  351. return DiagnosisImageRequest(
  352. fileToken: map['FileToken'],
  353. token: map['Token'],
  354. );
  355. }
  356. Map<String, dynamic> toJson() {
  357. final map = super.toJson();
  358. if(fileToken != null)
  359. map['FileToken'] = fileToken;
  360. return map;
  361. }
  362. }
  363. enum RemedicalFileDataTypeEnum {
  364. VinnoVidSingle,
  365. ThirdVidSingle,
  366. VinnoVidMovie,
  367. ThirdVidMovie,
  368. Image,
  369. }
  370. class DiagnosisPerImageDTO extends AIDiagnosisPerImageDTO{
  371. String? remedicalCode;
  372. RemedicalFileDataTypeEnum dataType;
  373. double pixel;
  374. String? remedicalFileToken;
  375. String? aIFileToken;
  376. DiagnosisPerImageDTO({
  377. this.remedicalCode,
  378. this.dataType = RemedicalFileDataTypeEnum.VinnoVidSingle,
  379. this.pixel = 0,
  380. this.remedicalFileToken,
  381. this.aIFileToken,
  382. int index = 0,
  383. double priorityScore = 0,
  384. List<AIDiagnosisResultPerOrgan >? diagResultsForEachOrgan,
  385. }) : super(
  386. index: index,
  387. priorityScore: priorityScore,
  388. diagResultsForEachOrgan: diagResultsForEachOrgan,
  389. );
  390. factory DiagnosisPerImageDTO.fromJson(Map<String, dynamic> map) {
  391. return DiagnosisPerImageDTO(
  392. remedicalCode: map['RemedicalCode'],
  393. dataType: RemedicalFileDataTypeEnum.values.firstWhere((e) => e.index == map['DataType']),
  394. pixel: double.parse(map['Pixel'].toString()),
  395. remedicalFileToken: map['RemedicalFileToken'],
  396. aIFileToken: map['AIFileToken'],
  397. index: map['Index'],
  398. priorityScore: double.parse(map['PriorityScore'].toString()),
  399. diagResultsForEachOrgan: map['DiagResultsForEachOrgan'] != null ? (map['DiagResultsForEachOrgan'] as List).map((e)=>AIDiagnosisResultPerOrgan.fromJson(e as Map<String,dynamic>)).toList() : null,
  400. );
  401. }
  402. Map<String, dynamic> toJson() {
  403. final map = super.toJson();
  404. if(remedicalCode != null)
  405. map['RemedicalCode'] = remedicalCode;
  406. map['DataType'] = dataType.index;
  407. map['Pixel'] = pixel;
  408. if(remedicalFileToken != null)
  409. map['RemedicalFileToken'] = remedicalFileToken;
  410. if(aIFileToken != null)
  411. map['AIFileToken'] = aIFileToken;
  412. return map;
  413. }
  414. }
  415. class DiagnosisReportResult {
  416. DiagnosisConclusionEnum diagnosisConclusion;
  417. List<DiagnosisPerImageDTO >? diagnosisResult;
  418. DiagnosisReportResult({
  419. this.diagnosisConclusion = DiagnosisConclusionEnum.NotRequired,
  420. this.diagnosisResult,
  421. });
  422. factory DiagnosisReportResult.fromJson(Map<String, dynamic> map) {
  423. return DiagnosisReportResult(
  424. diagnosisConclusion: DiagnosisConclusionEnum.values.firstWhere((e) => e.index == map['DiagnosisConclusion']),
  425. diagnosisResult: map['DiagnosisResult'] != null ? (map['DiagnosisResult'] as List).map((e)=>DiagnosisPerImageDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
  426. );
  427. }
  428. Map<String, dynamic> toJson() {
  429. final map = Map<String, dynamic>();
  430. map['DiagnosisConclusion'] = diagnosisConclusion.index;
  431. if(diagnosisResult != null)
  432. map['DiagnosisResult'] = diagnosisResult;
  433. return map;
  434. }
  435. }
  436. class DiagnosisRemicalDTO {
  437. String? remedicalCode;
  438. RemedicalFileDataTypeEnum dataType;
  439. String? fileToken;
  440. List<AIDiagnosisPerImageDTO >? diagnosisResult;
  441. DiagnosisRemicalDTO({
  442. this.remedicalCode,
  443. this.dataType = RemedicalFileDataTypeEnum.VinnoVidSingle,
  444. this.fileToken,
  445. this.diagnosisResult,
  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. );
  454. }
  455. Map<String, dynamic> toJson() {
  456. final map = Map<String, dynamic>();
  457. if(remedicalCode != null)
  458. map['RemedicalCode'] = remedicalCode;
  459. map['DataType'] = dataType.index;
  460. if(fileToken != null)
  461. map['FileToken'] = fileToken;
  462. if(diagnosisResult != null)
  463. map['DiagnosisResult'] = diagnosisResult;
  464. return map;
  465. }
  466. }
  467. class DiagnosisReportRequest extends TokenRequest{
  468. DiagnosisOrganEnum organ;
  469. List<DiagnosisRemicalDTO >? remedicalList;
  470. DiagnosisReportRequest({
  471. this.organ = DiagnosisOrganEnum.Null,
  472. this.remedicalList,
  473. String? token,
  474. }) : super(
  475. token: token,
  476. );
  477. factory DiagnosisReportRequest.fromJson(Map<String, dynamic> map) {
  478. return DiagnosisReportRequest(
  479. organ: DiagnosisOrganEnum.values.firstWhere((e) => e.index == map['Organ']),
  480. remedicalList: map['RemedicalList'] != null ? (map['RemedicalList'] as List).map((e)=>DiagnosisRemicalDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
  481. token: map['Token'],
  482. );
  483. }
  484. Map<String, dynamic> toJson() {
  485. final map = super.toJson();
  486. map['Organ'] = organ.index;
  487. if(remedicalList != null)
  488. map['RemedicalList'] = remedicalList;
  489. return map;
  490. }
  491. }