aIDiagnosis.m.dart 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435
  1. import 'liveConsultation.m.dart';
  2. class AIDiagnosisRect {
  3. int right;
  4. int bottom;
  5. int left;
  6. int top;
  7. int width;
  8. int height;
  9. AIDiagnosisRect({
  10. this.right = 0,
  11. this.bottom = 0,
  12. this.left = 0,
  13. this.top = 0,
  14. this.width = 0,
  15. this.height = 0,
  16. });
  17. factory AIDiagnosisRect.fromJson(Map<String, dynamic> map) {
  18. return AIDiagnosisRect(
  19. right: map['Right'],
  20. bottom: map['Bottom'],
  21. left: map['Left'],
  22. top: map['Top'],
  23. width: map['Width'],
  24. height: map['Height'],
  25. );
  26. }
  27. Map<String, dynamic> toJson() {
  28. final map = Map<String, dynamic>();
  29. map['Right'] = right;
  30. map['Bottom'] = bottom;
  31. map['Left'] = left;
  32. map['Top'] = top;
  33. map['Width'] = width;
  34. map['Height'] = height;
  35. return map;
  36. }
  37. }
  38. class AIDiagnosisPoint2D {
  39. int x;
  40. int y;
  41. AIDiagnosisPoint2D({
  42. this.x = 0,
  43. this.y = 0,
  44. });
  45. factory AIDiagnosisPoint2D.fromJson(Map<String, dynamic> map) {
  46. return AIDiagnosisPoint2D(
  47. x: map['X'],
  48. y: map['Y'],
  49. );
  50. }
  51. Map<String, dynamic> toJson() {
  52. final map = Map<String, dynamic>();
  53. map['X'] = x;
  54. map['Y'] = y;
  55. return map;
  56. }
  57. }
  58. enum DiagnosisDescriptionEnum {
  59. Shape,
  60. Orientation,
  61. EchoPattern,
  62. LesionBoundary,
  63. Margin,
  64. Calcification,
  65. LesionSize,
  66. ThyroidEchoPattern,
  67. ThyroidShape,
  68. ThyroidMargin,
  69. ThyroidEchogenicFoci,
  70. LiverShape,
  71. LiverBoundary,
  72. LiverEchoTexture,
  73. }
  74. class AIDiagnosisDescription {
  75. DiagnosisDescriptionEnum type;
  76. String? value;
  77. AIDiagnosisDescription({
  78. this.type = DiagnosisDescriptionEnum.Shape,
  79. this.value,
  80. });
  81. factory AIDiagnosisDescription.fromJson(Map<String, dynamic> map) {
  82. return AIDiagnosisDescription(
  83. type: DiagnosisDescriptionEnum.values.firstWhere((e) => e.index == map['Type']),
  84. value: map['Value'],
  85. );
  86. }
  87. Map<String, dynamic> toJson() {
  88. final map = Map<String, dynamic>();
  89. map['Type'] = type.index;
  90. if(value != null)
  91. map['Value'] = value;
  92. return map;
  93. }
  94. }
  95. class AIDetectedObject {
  96. int label;
  97. double confidence;
  98. AIDiagnosisRect? boundingBox;
  99. List<AIDiagnosisPoint2D >? contours;
  100. List<AIDiagnosisDescription >? descriptions;
  101. AIDetectedObject({
  102. this.label = 0,
  103. this.confidence = 0,
  104. this.boundingBox,
  105. this.contours,
  106. this.descriptions,
  107. });
  108. factory AIDetectedObject.fromJson(Map<String, dynamic> map) {
  109. return AIDetectedObject(
  110. label: map['Label'],
  111. confidence: double.parse(map['Confidence'].toString()),
  112. boundingBox: map['BoundingBox'] != null ? AIDiagnosisRect.fromJson(map['BoundingBox']) : null,
  113. contours: map['Contours'] != null ? (map['Contours'] as List).map((e)=>AIDiagnosisPoint2D.fromJson(e as Map<String,dynamic>)).toList() : null,
  114. descriptions: map['Descriptions'] != null ? (map['Descriptions'] as List).map((e)=>AIDiagnosisDescription.fromJson(e as Map<String,dynamic>)).toList() : null,
  115. );
  116. }
  117. Map<String, dynamic> toJson() {
  118. final map = Map<String, dynamic>();
  119. map['Label'] = label;
  120. map['Confidence'] = confidence;
  121. if(boundingBox != null)
  122. map['BoundingBox'] = boundingBox;
  123. if(contours != null)
  124. map['Contours'] = contours;
  125. if(descriptions != null)
  126. map['Descriptions'] = descriptions;
  127. return map;
  128. }
  129. }
  130. class AIDiagnosisResultPerOrgan {
  131. DiagnosisOrganEnum organ;
  132. AIDiagnosisRect? organBoundBox;
  133. List<AIDiagnosisPoint2D >? organContours;
  134. List<AIDiagnosisDescription >? organDescriptions;
  135. List<AIDetectedObject >? detectedObjects;
  136. AIDiagnosisResultPerOrgan({
  137. this.organ = DiagnosisOrganEnum.Null,
  138. this.organBoundBox,
  139. this.organContours,
  140. this.organDescriptions,
  141. this.detectedObjects,
  142. });
  143. factory AIDiagnosisResultPerOrgan.fromJson(Map<String, dynamic> map) {
  144. return AIDiagnosisResultPerOrgan(
  145. organ: DiagnosisOrganEnum.values.firstWhere((e) => e.index == map['Organ']),
  146. organBoundBox: map['OrganBoundBox'] != null ? AIDiagnosisRect.fromJson(map['OrganBoundBox']) : null,
  147. organContours: map['OrganContours'] != null ? (map['OrganContours'] as List).map((e)=>AIDiagnosisPoint2D.fromJson(e as Map<String,dynamic>)).toList() : null,
  148. organDescriptions: map['OrganDescriptions'] != null ? (map['OrganDescriptions'] as List).map((e)=>AIDiagnosisDescription.fromJson(e as Map<String,dynamic>)).toList() : null,
  149. detectedObjects: map['DetectedObjects'] != null ? (map['DetectedObjects'] as List).map((e)=>AIDetectedObject.fromJson(e as Map<String,dynamic>)).toList() : null,
  150. );
  151. }
  152. Map<String, dynamic> toJson() {
  153. final map = Map<String, dynamic>();
  154. map['Organ'] = organ.index;
  155. if(organBoundBox != null)
  156. map['OrganBoundBox'] = organBoundBox;
  157. if(organContours != null)
  158. map['OrganContours'] = organContours;
  159. if(organDescriptions != null)
  160. map['OrganDescriptions'] = organDescriptions;
  161. if(detectedObjects != null)
  162. map['DetectedObjects'] = detectedObjects;
  163. return map;
  164. }
  165. }
  166. class AIDiagnosisPerImageDTO {
  167. int index;
  168. double priorityScore;
  169. List<AIDiagnosisResultPerOrgan >? diagResultsForEachOrgan;
  170. AIDiagnosisPerImageDTO({
  171. this.index = 0,
  172. this.priorityScore = 0,
  173. this.diagResultsForEachOrgan,
  174. });
  175. factory AIDiagnosisPerImageDTO.fromJson(Map<String, dynamic> map) {
  176. return AIDiagnosisPerImageDTO(
  177. index: map['Index'],
  178. priorityScore: double.parse(map['PriorityScore'].toString()),
  179. diagResultsForEachOrgan: map['DiagResultsForEachOrgan'] != null ? (map['DiagResultsForEachOrgan'] as List).map((e)=>AIDiagnosisResultPerOrgan.fromJson(e as Map<String,dynamic>)).toList() : null,
  180. );
  181. }
  182. Map<String, dynamic> toJson() {
  183. final map = Map<String, dynamic>();
  184. map['Index'] = index;
  185. map['PriorityScore'] = priorityScore;
  186. if(diagResultsForEachOrgan != null)
  187. map['DiagResultsForEachOrgan'] = diagResultsForEachOrgan;
  188. return map;
  189. }
  190. }
  191. class DiagnosisImageResult {
  192. DiagnosisConclusionEnum diagnosisConclusion;
  193. List<AIDiagnosisPerImageDTO >? diagnosisResult;
  194. List<DiagnosisOrganEnum >? diagnosisOrgans;
  195. CarotidResultDTO? carotidResult;
  196. DiagnosisImageResult({
  197. this.diagnosisConclusion = DiagnosisConclusionEnum.NotRequired,
  198. this.diagnosisResult,
  199. this.diagnosisOrgans,
  200. this.carotidResult,
  201. });
  202. factory DiagnosisImageResult.fromJson(Map<String, dynamic> map) {
  203. return DiagnosisImageResult(
  204. diagnosisConclusion: DiagnosisConclusionEnum.values.firstWhere((e) => e.index == map['DiagnosisConclusion']),
  205. diagnosisResult: map['DiagnosisResult'] != null ? (map['DiagnosisResult'] as List).map((e)=>AIDiagnosisPerImageDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
  206. diagnosisOrgans: map['DiagnosisOrgans'] != null ? (map['DiagnosisOrgans'] as List).map((e)=>DiagnosisOrganEnum.values.firstWhere((i) => i.index == e)).toList() : null,
  207. carotidResult: map['CarotidResult'] != null ? CarotidResultDTO.fromJson(map['CarotidResult']) : null,
  208. );
  209. }
  210. Map<String, dynamic> toJson() {
  211. final map = Map<String, dynamic>();
  212. map['DiagnosisConclusion'] = diagnosisConclusion.index;
  213. if(diagnosisResult != null)
  214. map['DiagnosisResult'] = diagnosisResult;
  215. if(diagnosisOrgans != null)
  216. map['DiagnosisOrgans'] = diagnosisOrgans;
  217. if(carotidResult != null)
  218. map['CarotidResult'] = carotidResult;
  219. return map;
  220. }
  221. }
  222. class DiagnosisImageRequest extends TokenRequest{
  223. String? fileToken;
  224. String? diskPath;
  225. String? relationCode;
  226. DiagnosisImageRequest({
  227. this.fileToken,
  228. this.diskPath,
  229. this.relationCode,
  230. String? token,
  231. }) : super(
  232. token: token,
  233. );
  234. factory DiagnosisImageRequest.fromJson(Map<String, dynamic> map) {
  235. return DiagnosisImageRequest(
  236. fileToken: map['FileToken'],
  237. diskPath: map['DiskPath'],
  238. relationCode: map['RelationCode'],
  239. token: map['Token'],
  240. );
  241. }
  242. Map<String, dynamic> toJson() {
  243. final map = super.toJson();
  244. if(fileToken != null)
  245. map['FileToken'] = fileToken;
  246. if(diskPath != null)
  247. map['DiskPath'] = diskPath;
  248. if(relationCode != null)
  249. map['RelationCode'] = relationCode;
  250. return map;
  251. }
  252. }
  253. class DiagnosisPerImageDTO extends AIDiagnosisPerImageDTO{
  254. String? remedicalCode;
  255. RemedicalFileDataTypeEnum dataType;
  256. double pixel;
  257. String? remedicalFileToken;
  258. String? aIFileToken;
  259. DiagnosisPerImageDTO({
  260. this.remedicalCode,
  261. this.dataType = RemedicalFileDataTypeEnum.VinnoVidSingle,
  262. this.pixel = 0,
  263. this.remedicalFileToken,
  264. this.aIFileToken,
  265. int index = 0,
  266. double priorityScore = 0,
  267. List<AIDiagnosisResultPerOrgan >? diagResultsForEachOrgan,
  268. }) : super(
  269. index: index,
  270. priorityScore: priorityScore,
  271. diagResultsForEachOrgan: diagResultsForEachOrgan,
  272. );
  273. factory DiagnosisPerImageDTO.fromJson(Map<String, dynamic> map) {
  274. return DiagnosisPerImageDTO(
  275. remedicalCode: map['RemedicalCode'],
  276. dataType: RemedicalFileDataTypeEnum.values.firstWhere((e) => e.index == map['DataType']),
  277. pixel: double.parse(map['Pixel'].toString()),
  278. remedicalFileToken: map['RemedicalFileToken'],
  279. aIFileToken: map['AIFileToken'],
  280. index: map['Index'],
  281. priorityScore: double.parse(map['PriorityScore'].toString()),
  282. diagResultsForEachOrgan: map['DiagResultsForEachOrgan'] != null ? (map['DiagResultsForEachOrgan'] as List).map((e)=>AIDiagnosisResultPerOrgan.fromJson(e as Map<String,dynamic>)).toList() : null,
  283. );
  284. }
  285. Map<String, dynamic> toJson() {
  286. final map = super.toJson();
  287. if(remedicalCode != null)
  288. map['RemedicalCode'] = remedicalCode;
  289. map['DataType'] = dataType.index;
  290. map['Pixel'] = pixel;
  291. if(remedicalFileToken != null)
  292. map['RemedicalFileToken'] = remedicalFileToken;
  293. if(aIFileToken != null)
  294. map['AIFileToken'] = aIFileToken;
  295. return map;
  296. }
  297. }
  298. class DiagnosisRemicalDTO {
  299. String? remedicalCode;
  300. RemedicalFileDataTypeEnum dataType;
  301. String? fileToken;
  302. List<AIDiagnosisPerImageDTO >? diagnosisResult;
  303. CarotidResultDTO? carotidResult;
  304. DiagnosisRemicalDTO({
  305. this.remedicalCode,
  306. this.dataType = RemedicalFileDataTypeEnum.VinnoVidSingle,
  307. this.fileToken,
  308. this.diagnosisResult,
  309. this.carotidResult,
  310. });
  311. factory DiagnosisRemicalDTO.fromJson(Map<String, dynamic> map) {
  312. return DiagnosisRemicalDTO(
  313. remedicalCode: map['RemedicalCode'],
  314. dataType: RemedicalFileDataTypeEnum.values.firstWhere((e) => e.index == map['DataType']),
  315. fileToken: map['FileToken'],
  316. diagnosisResult: map['DiagnosisResult'] != null ? (map['DiagnosisResult'] as List).map((e)=>AIDiagnosisPerImageDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
  317. carotidResult: map['CarotidResult'] != null ? CarotidResultDTO.fromJson(map['CarotidResult']) : null,
  318. );
  319. }
  320. Map<String, dynamic> toJson() {
  321. final map = Map<String, dynamic>();
  322. if(remedicalCode != null)
  323. map['RemedicalCode'] = remedicalCode;
  324. map['DataType'] = dataType.index;
  325. if(fileToken != null)
  326. map['FileToken'] = fileToken;
  327. if(diagnosisResult != null)
  328. map['DiagnosisResult'] = diagnosisResult;
  329. if(carotidResult != null)
  330. map['CarotidResult'] = carotidResult;
  331. return map;
  332. }
  333. }
  334. class DiagnosisReportResult {
  335. DiagnosisConclusionEnum diagnosisConclusion;
  336. List<DiagnosisPerImageDTO >? diagnosisResult;
  337. List<DiagnosisRemicalDTO >? carotidResult;
  338. DiagnosisReportResult({
  339. this.diagnosisConclusion = DiagnosisConclusionEnum.NotRequired,
  340. this.diagnosisResult,
  341. this.carotidResult,
  342. });
  343. factory DiagnosisReportResult.fromJson(Map<String, dynamic> map) {
  344. return DiagnosisReportResult(
  345. diagnosisConclusion: DiagnosisConclusionEnum.values.firstWhere((e) => e.index == map['DiagnosisConclusion']),
  346. diagnosisResult: map['DiagnosisResult'] != null ? (map['DiagnosisResult'] as List).map((e)=>DiagnosisPerImageDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
  347. carotidResult: map['CarotidResult'] != null ? (map['CarotidResult'] as List).map((e)=>DiagnosisRemicalDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
  348. );
  349. }
  350. Map<String, dynamic> toJson() {
  351. final map = Map<String, dynamic>();
  352. map['DiagnosisConclusion'] = diagnosisConclusion.index;
  353. if(diagnosisResult != null)
  354. map['DiagnosisResult'] = diagnosisResult;
  355. if(carotidResult != null)
  356. map['CarotidResult'] = carotidResult;
  357. return map;
  358. }
  359. }
  360. class DiagnosisReportRequest extends TokenRequest{
  361. DiagnosisOrganEnum organ;
  362. List<DiagnosisRemicalDTO >? remedicalList;
  363. DiagnosisReportRequest({
  364. this.organ = DiagnosisOrganEnum.Null,
  365. this.remedicalList,
  366. String? token,
  367. }) : super(
  368. token: token,
  369. );
  370. factory DiagnosisReportRequest.fromJson(Map<String, dynamic> map) {
  371. return DiagnosisReportRequest(
  372. organ: DiagnosisOrganEnum.values.firstWhere((e) => e.index == map['Organ']),
  373. remedicalList: map['RemedicalList'] != null ? (map['RemedicalList'] as List).map((e)=>DiagnosisRemicalDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
  374. token: map['Token'],
  375. );
  376. }
  377. Map<String, dynamic> toJson() {
  378. final map = super.toJson();
  379. map['Organ'] = organ.index;
  380. if(remedicalList != null)
  381. map['RemedicalList'] = remedicalList;
  382. return map;
  383. }
  384. }