radiology ai lab analysis & lab ai analysis api end points updates.

pull/217/head
aamir-csol 2 days ago
parent 10fa8c46cf
commit 2d7aa5d80d

@ -26,9 +26,9 @@ abstract class LabRepo {
Future<Either<Failure, GenericApiModel<dynamic>>> getLabResultsByAppointmentNo({required num appointmentNo, required num projectID, required num clinicID}); Future<Either<Failure, GenericApiModel<dynamic>>> getLabResultsByAppointmentNo({required num appointmentNo, required num projectID, required num clinicID});
Future<Either<Failure, GenericApiModel<LabOrdersResponseByAi>>> getPatientAiOverViewLabOrders(var payload); Future<Either<Failure, GenericApiModel<LabOrdersResponseByAi>>> getPatientAiOverViewLabOrders({required int langId, required dynamic payload});
Future<Either<Failure, GenericApiModel<LabOrderResponseByAi>>> getPatientAiOverViewLabOrder(var payload); Future<Either<Failure, GenericApiModel<LabOrderResponseByAi>>> getPatientAiOverViewLabOrder(var payloa);
} }
class LabRepoImp implements LabRepo { class LabRepoImp implements LabRepo {
@ -358,7 +358,7 @@ class LabRepoImp implements LabRepo {
} }
@override @override
Future<Either<Failure, GenericApiModel<LabOrdersResponseByAi>>> getPatientAiOverViewLabOrders(var labOrder) async { Future<Either<Failure, GenericApiModel<LabOrdersResponseByAi>>> getPatientAiOverViewLabOrders({required int langId, required dynamic payload}) async {
try { try {
GenericApiModel<LabOrdersResponseByAi>? apiResponse; GenericApiModel<LabOrdersResponseByAi>? apiResponse;
Failure? failure; Failure? failure;
@ -372,7 +372,7 @@ class LabRepoImp implements LabRepo {
'X-API-KEY': '9d9d2ac4c1fc302299dbb0fbb1b7fea1', 'X-API-KEY': '9d9d2ac4c1fc302299dbb0fbb1b7fea1',
'accept': 'application/json', 'accept': 'application/json',
}, },
body: {"lab_results": labOrder}, body: {"lab_results": payload, "language_id": langId},
onFailure: (error, statusCode, {messageStatus, failureType}) { onFailure: (error, statusCode, {messageStatus, failureType}) {
failure = failureType; failure = failureType;
}, },

@ -459,7 +459,6 @@ class LabViewModel extends ChangeNotifier {
highRefrenceValue = double.negativeInfinity; highRefrenceValue = double.negativeInfinity;
} }
if (double.parse(element.referenceLow ?? "0.0") == 0) { if (double.parse(element.referenceLow ?? "0.0") == 0) {
lowRefenceValue = double.negativeInfinity; lowRefenceValue = double.negativeInfinity;
} }
@ -473,9 +472,7 @@ class LabViewModel extends ChangeNotifier {
time: DateUtil.convertStringToDate(element.verifiedOnDateTime), time: DateUtil.convertStringToDate(element.verifiedOnDateTime),
referenceValue: element.calculatedResultFlag ?? "", referenceValue: element.calculatedResultFlag ?? "",
)); ));
} catch (e) {}
} catch (e) {
}
}); });
if (flagForLowReferenceRange == null && flagForHighReferenceRange == null) { if (flagForLowReferenceRange == null && flagForHighReferenceRange == null) {
highRefrenceValue = maxY; highRefrenceValue = maxY;
@ -504,7 +501,6 @@ class LabViewModel extends ChangeNotifier {
maxX = maxY; maxX = maxY;
} }
// if (maxY < highRefrenceValue) { // if (maxY < highRefrenceValue) {
// minY = highRefrenceValue - getInterval(); // minY = highRefrenceValue - getInterval();
// } // }
@ -530,6 +526,7 @@ class LabViewModel extends ChangeNotifier {
bool isNumeric(String s) { bool isNumeric(String s) {
return num.tryParse(s) != null; return num.tryParse(s) != null;
} }
num getInterval() { num getInterval() {
// return .1; // return .1;
var maxX = maxY; var maxX = maxY;
@ -845,9 +842,7 @@ class LabViewModel extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
Future<void> getAiOverviewLabOrders({required PatientLabOrdersResponseModel labOrder, required String loadingText}) async { Future<void> getAiOverviewLabOrders({required int langId, required PatientLabOrdersResponseModel labOrder, required String loadingText}) async {
// LoadingUtils.showFullScreenLoader(loadingText: "Loading and analysing your data,\nPlease be patient and let the AI do the magic. \nPlease be patient, This might take some time.");
// LoadingUtils.showFullScreenLoader(loadingText: loadingText);
isLabAIAnalysisNeedsToBeShown = true; isLabAIAnalysisNeedsToBeShown = true;
notifyListeners(); notifyListeners();
@ -875,7 +870,8 @@ class LabViewModel extends ChangeNotifier {
} }
orderData["results"] = testResults; orderData["results"] = testResults;
results.add(orderData); results.add(orderData);
final result = await labRepo.getPatientAiOverViewLabOrders(results);
final result = await labRepo.getPatientAiOverViewLabOrders(payload: results, langId: langId);
result.fold( result.fold(
(failure) async { (failure) async {
LoaderBottomSheet.hideLoader(); LoaderBottomSheet.hideLoader();
@ -903,7 +899,7 @@ class LabViewModel extends ChangeNotifier {
// LoadingUtils.hideFullScreenLoader(); // LoadingUtils.hideFullScreenLoader();
} }
Future<void> getAiOverviewSingleLabResult({required String langId, required LabResult recentLabResult, required String loadingText}) async { Future<void> getAiOverviewSingleLabResult({required int langId, required LabResult recentLabResult, required String loadingText}) async {
LoaderBottomSheet.showLoader( LoaderBottomSheet.showLoader(
loadingText: loadingText, loadingText: loadingText,
showCloseButton: true, showCloseButton: true,

@ -19,7 +19,7 @@ abstract class RadiologyRepo {
Future<Either<Failure, GenericApiModel<List<PatientRadiologyResponseModel>>>> getPatientRadiologyOrderByAppointment({required num appointmentNo, required num projectID}); Future<Either<Failure, GenericApiModel<List<PatientRadiologyResponseModel>>>> getPatientRadiologyOrderByAppointment({required num appointmentNo, required num projectID});
Future<Either<Failure, GenericApiModel<RadiologyAiAnalysisResponse>>> getRadiologyAiAnalysis({required String reportData}); Future<Either<Failure, GenericApiModel<RadiologyAiAnalysisResponse>>> getRadiologyAiAnalysis({required String reportData, required int langId,});
} }
class RadiologyRepoImp implements RadiologyRepo { class RadiologyRepoImp implements RadiologyRepo {
@ -223,9 +223,10 @@ class RadiologyRepoImp implements RadiologyRepo {
} }
@override @override
Future<Either<Failure, GenericApiModel<RadiologyAiAnalysisResponse>>> getRadiologyAiAnalysis({required String reportData}) async { Future<Either<Failure, GenericApiModel<RadiologyAiAnalysisResponse>>> getRadiologyAiAnalysis({required String reportData, required int langId}) async {
Map<String, dynamic> payload = { Map<String, dynamic> payload = {
"text": reportData, "text": reportData,
"language_id": langId
}; };
try { try {

@ -127,8 +127,7 @@ class RadiologyViewModel extends ChangeNotifier {
); );
} }
Future<void> getRadiologyImage( Future<void> getRadiologyImage({required PatientRadiologyResponseModel patientRadiologyResponseModel, Function(dynamic)? onSuccess, Function(String)? onError}) async {
{required PatientRadiologyResponseModel patientRadiologyResponseModel, Function(dynamic)? onSuccess, Function(String)? onError}) async {
final result = await radiologyRepo.getRadiologyImage(patientRadiologyResponseModel: patientRadiologyResponseModel); final result = await radiologyRepo.getRadiologyImage(patientRadiologyResponseModel: patientRadiologyResponseModel);
result.fold( result.fold(
@ -149,12 +148,8 @@ class RadiologyViewModel extends ChangeNotifier {
} }
Future<void> getRadiologyPDF( Future<void> getRadiologyPDF(
{required PatientRadiologyResponseModel patientRadiologyResponseModel, {required PatientRadiologyResponseModel patientRadiologyResponseModel, required AuthenticatedUser authenticatedUser, Function(dynamic)? onSuccess, Function(String)? onError}) async {
required AuthenticatedUser authenticatedUser, final result = await radiologyRepo.getRadiologyReportPDF(patientRadiologyResponseModel: patientRadiologyResponseModel, authenticatedUser: authenticatedUser);
Function(dynamic)? onSuccess,
Function(String)? onError}) async {
final result =
await radiologyRepo.getRadiologyReportPDF(patientRadiologyResponseModel: patientRadiologyResponseModel, authenticatedUser: authenticatedUser);
result.fold( result.fold(
(failure) async => await errorHandlerService.handleError( (failure) async => await errorHandlerService.handleError(
@ -229,7 +224,7 @@ class RadiologyViewModel extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
Future<void> getRadiologyAiAnalysis({required String reportData, required String loadingText}) async { Future<void> getRadiologyAiAnalysis({required String reportData, required String loadingText, required int langId}) async {
LoaderBottomSheet.showLoader( LoaderBottomSheet.showLoader(
loadingText: loadingText, loadingText: loadingText,
showCloseButton: true, showCloseButton: true,
@ -238,7 +233,7 @@ class RadiologyViewModel extends ChangeNotifier {
}, },
); );
final result = await radiologyRepo.getRadiologyAiAnalysis(reportData: reportData); final result = await radiologyRepo.getRadiologyAiAnalysis(reportData: reportData, langId: langId);
result.fold( result.fold(
(failure) async { (failure) async {

@ -168,15 +168,16 @@ class LabResultByClinic extends StatelessWidget {
], ],
), ),
).paddingSymmetrical(24.h, 24.h).onPress(() async { ).paddingSymmetrical(24.h, 24.h).onPress(() async {
final _dialogService = getIt.get<DialogService>(); final dialogService = getIt.get<DialogService>();
await _dialogService.showCommonBottomSheetWithoutH( final appState = getIt.get<AppState>();
await dialogService.showCommonBottomSheetWithoutH(
message: LocaleKeys.aiDisclaimer.tr(), message: LocaleKeys.aiDisclaimer.tr(),
label: LocaleKeys.consent.tr(), label: LocaleKeys.consent.tr(),
okLabel: LocaleKeys.acceptLbl.tr(), okLabel: LocaleKeys.acceptLbl.tr(),
cancelLabel: LocaleKeys.rejectView.tr(), cancelLabel: LocaleKeys.rejectView.tr(),
onOkPressed: () { onOkPressed: () {
context.pop(); context.pop();
labViewModel.getAiOverviewLabOrders(labOrder: labOrder, loadingText: LocaleKeys.loadingAIAnalysis.tr(context: context)); labViewModel.getAiOverviewLabOrders(langId: appState.getLanguageID(), labOrder: labOrder, loadingText: LocaleKeys.loadingAIAnalysis.tr(context: context));
}, },
onCancelPressed: () { onCancelPressed: () {
context.pop(); context.pop();

@ -197,7 +197,7 @@ class _LabResultDetailsState extends State<LabResultDetails> {
onOkPressed: () { onOkPressed: () {
context.pop(); context.pop();
labViewModel.getAiOverviewSingleLabResult( labViewModel.getAiOverviewSingleLabResult(
langId: appState.getLanguageID().toString(), recentLabResult: recentLabResult, loadingText: LocaleKeys.loadingAIAnalysis.tr(context: context)); langId: appState.getLanguageID(), recentLabResult: recentLabResult, loadingText: LocaleKeys.loadingAIAnalysis.tr(context: context));
}, },
onCancelPressed: () { onCancelPressed: () {
context.pop(); context.pop();

@ -48,6 +48,14 @@ class _RadiologyResultPageState extends State<RadiologyResultPage> {
super.initState(); super.initState();
} }
@override
void dispose() {
// Clear AI analysis data when leaving the screen
radiologyViewModel.closeRadiologyAIAnalysis();
radiologyViewModel.setIsRadiologyAIAnalysisNeedsToBeShown(true);
super.dispose();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
radiologyViewModel = Provider.of<RadiologyViewModel>(context, listen: false); radiologyViewModel = Provider.of<RadiologyViewModel>(context, listen: false);
@ -259,6 +267,7 @@ class _RadiologyResultPageState extends State<RadiologyResultPage> {
radiologyViewModel.getRadiologyAiAnalysis( radiologyViewModel.getRadiologyAiAnalysis(
reportData: widget.patientRadiologyResponseModel.reportData ?? "", reportData: widget.patientRadiologyResponseModel.reportData ?? "",
loadingText: LocaleKeys.loadingAIAnalysis.tr(context: context), loadingText: LocaleKeys.loadingAIAnalysis.tr(context: context),
langId: _appState.getLanguageID(),
); );
}, },
onCancelPressed: () { onCancelPressed: () {

Loading…
Cancel
Save